Unity Anlamadığım Kodlar

OyunMenyağı

Centipat
Katılım
18 Mart 2020
Mesajlar
281
using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;

public class PlayerManager : MonoBehaviour
{
[SerializeField]
private Transform gun;

float angle;

float donusHizi = 5f;

void Update()
{
RotateDegistir();
}

void RotateDegistir()
{
if(Input.GetMouseButtonDown(0))
{
Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - gun.transform.position;

angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f;
}

Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);

gun.transform.rotation = Quaternion.Slerp(gun.transform.rotation, rotation, donusHizi * Time.deltaTime);

}
}


Anlayan biri bana şu kodları anlatsa nasıl olur?
 
Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - gun.transform.position; Bu satırda mouse un imlecinin pozisyonundan silahın pozisyonunu çıkararak nereye doğru bakması gerektiğini belirlemiş.

angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f; Bu satırda açıyı hesaplamak için belirlenen yönün x ve y sini tanjantını alarak radyana dönüştürmüş ve Mathf.Rad2Deg yani Radian to Degree ile çarparak dereceye dönüştürmüş.(kaç derecelik açıyla bakması gerektiğini belirlemiş yani)

Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward); Belirlediği açıya dönme komudunu yazmış.

gun.transform.rotation = Quaternion.Slerp(gun.transform.rotation, rotation, donusHizi * Time.deltaTime); Burada ise Slerp ile smooth bir şekilde döndürme işlemi uygulamış.

Umarım yardımcı olabilmişimdir.
 
Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - gun.transform.position; Bu satırda mouse un imlecinin pozisyonundan silahın pozisyonunu çıkararak nereye doğru bakması gerektiğini belirlemiş.

angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f; Bu satırda açıyı hesaplamak için belirlenen yönün x ve y sini tanjantını alarak radyana dönüştürmüş ve Mathf.Rad2Deg yani Radian to Degree ile çarparak dereceye dönüştürmüş.(kaç derecelik açıyla bakması gerektiğini belirlemiş yani)

Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward); Belirlediği açıya dönme komudunu yazmış.

gun.transform.rotation = Quaternion.Slerp(gun.transform.rotation, rotation, donusHizi * Time.deltaTime); Burada ise Slerp ile smooth bir şekilde döndürme işlemi uygulamış.

Umarım yardımcı olabilmişimdir.
Yardımcı olduğun için teşekkür ederim.

Kod:
Camera.main.ScreenToWorldPoint

Burada Camera.main derken hangi camera olduğunu seçmiş de mi? Birde ScreenToWorldPoint ne demek?[/QUOTE]
Thx
 
Camera.main'deki main maincamera demektir yani bunun çalışması için bir kameranızda maincamera tagi olması lazım.
[/QUOTE]
Sağol aydınlanıyorum şuan. Peki Birde ScreenToWorldPoint ne demek?
 
C#:
Kod:
using System.Collections;

using System.Collections.Generic;

using Unity.Mathematics;

using UnityEngine;


public class PlayerManager : MonoBehaviour

{

    [SerializeField]

    private Transform gun;


    float angle;


    float donusHizi = 5f;


    void Update()

    {

        RotateDegistir();

    }


    void RotateDegistir()

    {

        if(Input.GetMouseButtonDown(0))

        {

            Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - gun.transform.position;


            angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f;

        }


        Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);


        gun.transform.rotation = Quaternion.Slerp(gun.transform.rotation, rotation, donusHizi * Time.deltaTime);


    }

}


Anlayan biri bana şu kodları anlatsa nasıl olur?
[

[SerializeField] -> alttaki değişkenin private olmasına rağmen Inspector kısmında gözükmesini sağlar.

Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - gun.transform.position; -> kamera açısının ereye baktığını hesaplar

angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f; tam emin olmamakla birlikte sanırsam açıyı kilitlemek için kullanılmış

Quaternion rotasyon için Vector3 .forward ise new Vector3(0, 0, 1) anlamına geliyor yani ön anlamına gelen z eksenine 1 değer atıyor sadece

Quaternion.slerp ise geçişi yumuşatmaya yarıyor

Time.deltatime ise fps düşmesine veya yükselmesine bağlı kalmadan hızın aynı kalması için kullanıyor

Kolay gelsin başarılar.
 
C#:
[

[SerializeField] -> alttaki değişkenin private olmasına rağmen Inspector kısmında gözükmesini sağlar.

Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - gun.transform.position; -> kamera açısının ereye baktığını hesaplar

angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f; tam emin olmamakla birlikte sanırsam açıyı kilitlemek için kullanılmış

Quaternion rotasyon için Vector3 .forward ise new Vector3(0, 0, 1) anlamına geliyor yani ön anlamına gelen z eksenine 1 değer atıyor sadece

Quaternion.slerp ise geçişi yumuşatmaya yarıyor

Time.deltatime ise fps düşmesine veya yükselmesine bağlı kalmadan hızın aynı kalması için kullanıyor

Kolay gelsin başarılar.
Teşekkür ederim
 

Yeni konular

Geri
Yukarı