Unity Bir Objeyi Döndürmek

ücretsiz unity eğitim serisi

Unity Bir Objeyi Döndürmek.. Unity oyun motorunda bir nesneyi döndürmenin birden fazla yolu vardır. Bu yazıda olabildiğince tüm yolları farklı şekillerle denemeye çalışacağız. Bir objeyi kendi ekseni etrafında döndürmeyi, başka bir objenin etrafında döndürmeyi, belirli hızlarda ve açılarda döndürmeyi öğreneceğiz.

Bir Objeyi Belirlenen Açıya Kadar Döndürmek

unity_left_right_rotate

Quaternion Lerp fonksiyonunu kullanarak objenin belirlenen hızda belirlenen açıya kadar dönmesini sağlayabiliriz.

using UnityEngine;

public class SmoothlyRotateLeftAndRight : MonoBehaviour
{
    public Vector3 leftRotateVector;
    public Vector3 rightRotateVector;
    public float speed = 5f;
    Quaternion currentRotation;

    private void Start()
    {
        currentRotation = transform.rotation;
    }
    private void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.Q))
        {
            transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(leftRotateVector), Time.deltaTime * speed);
        }
        else if (Input.GetKey(KeyCode.E))
        {

            transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(rightRotateVector), Time.deltaTime * speed);

        }
        else
        {
            transform.rotation = Quaternion.Lerp(transform.rotation, currentRotation, Time.deltaTime * speed);

        }
    }
}

Unity’de Bir Objeyi Döndürmek

unity bir objeyi döndürmek

Bir gameobject’i döndürmenin en kolay yolu Rotate fonksiyonunu kullanmaktır.

Fonksiyon Yapısı: public void Rotate(Vector3 axis, float angleSpace relativeTo = Space.Self);

using UnityEngine;

public class EasyRotate: MonoBehaviour
{
    public Vector3 rotateVector = new Vector3(-1, 0, 0);
    public float speed = 50;

    void Update()
    {
        transform.Rotate(rotateVector * speed * Time.fixedDeltaTime);
    }
}

Daha karmaşık bir örnek ile horizontal ve vertical inputlar ile nesneyi farklı şekillerde döndürmeyi deneyeceğiz.

using UnityEngine;

public class RotateAnObject : MonoBehaviour
{
    [Range(0, 360)] public float angle;//Dönüş açısı
    float tempAngle;//geçici olarak güncel açıyı tutmak için oluşturulmuş değişken
    bool horizontalFlag;//horizontal input kontrolü için oluşturulmuş değişken 
    bool verticalFlag;//vertical input kontrolü için oluşturulmuş değişken
    bool isRotating;//obje rotate oluyor mu?
    int Direction;

    //Değerlerin başlatılması
    void Start()
    {
        horizontalFlag = verticalFlag = isRotating = false;
    }

    void Update()
    {
        CheckForHorizontalInput();

        CheckForVerticalInput();
        if (horizontalFlag)
            HorizontalRotation();
        if (verticalFlag)
            VerticalRotation();
    }

    //Horizontal Input Alınması
    void CheckForHorizontalInput()
    {
        if (Input.GetAxis("Horizontal") != 0 && !isRotating)
        {
            isRotating = true;
            Direction = (Input.GetAxis("Horizontal") < 0 ? -1 : 1);
            horizontalFlag = true;
            tempAngle = 0;
        }
    }

    //Vertical Input Alınması
    void CheckForVerticalInput()
    {
        if (Input.GetAxis("Vertical") != 0 && !isRotating)
        {
            isRotating = true;
            Direction = (Input.GetAxis("Vertical") < 0 ? -1 : 1);
            verticalFlag = true;
            tempAngle = 0;
        }
    }

    //Horizontal döndürmek için oluşturulmuş method
    void HorizontalRotation()
    {
        transform.Rotate(Vector3.up * angle * Time.fixedDeltaTime * Direction, Space.World);
        tempAngle += angle * Time.fixedDeltaTime;
        if (tempAngle >= angle)
        {
            tempAngle = 0;
            isRotating = false;
            horizontalFlag = false;
        }
    }

    //Vertical döndürmek için oluşturulmuş method
    void VerticalRotation()
    {
        transform.Rotate(Vector3.right * angle * Time.fixedDeltaTime * Direction, Space.World);
        tempAngle += angle * Time.fixedDeltaTime;
        if (tempAngle >= angle)
        {
            tempAngle = 0;
            isRotating = false;
            verticalFlag = false;
        }
    }


}

Bir Objeyi Başka Bir Objenin Etrafında Döndürmek

unity bir objeyi başka bir objenin etrafında döndürme

unity-ata-evlat-ilişkisi
Bir objeyi başka bir objenin etrafında döndürmek için başka bir obje oluşturup ata – evlat ilişkisi kurabiliriz. Ata olan obje döndüğünde evlat da dönecektir. Ardından RotateAround veya başka bir döndürme fonksiyonu kullanarak küp nesnesi döndürüldüğünde sphere nesnesi de etrafında dönecektir.

using UnityEngine;

public class RotateAround : MonoBehaviour
{
    void Update()
    {
        transform.RotateAround(transform.position, transform.up, 100 * Time.deltaTime);
    }

}