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
 
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı