Menu
CoddyTech

Baktığın Yöne Hareket Et

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 41 / 56.

Kamera oyuncuya bir açıdan baktığında ok tuşları, oyuncuyu ekranın gösterdiği yönde hareket ettirmelidir: yukarı, kameradan uzaklaşarak yürütür; sağ ise kameranın sağına doğru yürütür. Dünyanın eksenleri bunu yalnızca kamera +z boyunca baktığında yapar. Bu yüzden hareketi kameranın kendi yönlerinden, cam.forward ve cam.right değerlerinden oluştur.

Önce bu yönleri temizlemek gerekir. Oyuncuya yukarıdan bakan bir kameranın forward yönü yere doğru işaret eder; bu yüzden yalnızca yere paralel kısmı tutmak için y değerini 0 yap. Geriye kalan vektör 1'den kısadır; 30 derece aşağı eğilmiş bir kamera için yaklaşık 0.87 olur ve oyuncu daha yavaş yürür. Bu nedenle vektörü normalize et. Bu karakter, seviyenin bir köşesine bakan ana kamerayı takip eder:

Transform cam = Camera.main.transform;

Vector3 forward = cam.forward;
forward.y = 0f;
forward.Normalize();
Vector3 right = cam.right;
right.y = 0f;
right.Normalize();

Vector3 move = forward * Input.GetAxisRaw("Vertical") + right * Input.GetAxisRaw("Horizontal");
if (move.magnitude > 1f) move.Normalize();   // çapraz hareketler daha hızlı değil
controller.Move(move * speed * Time.deltaTime);

Camera.main, MainCamera etiketine sahip kameradır. İki yön de her karede okunur; böylece kamera döndüğünde kontroller doğru kalır. Yukarı ve sağ yönleri birlikte kullanmak, birbirine dik iki birim vektörü toplar; uzunlukları yaklaşık 1.41 olur. Bu nedenle hareket vektörü 1'den uzunsa normalize edilir.

challenge icon

Görev

Orta

Kamera oyuncunun etrafında yavaşça dönüyor (CameraRig.cs, hazır), bu yüzden dünyanın eksenleri ekranda dönmeye devam ediyor. Ok tuşlarının, yerçekiminin zaten yazılı olduğu Mover.cs içinde oyuncuyu kameraya göre hareket ettirmesini sağla. Inspector'da speed (4) ve kameranın Transform'u olan cam ayarlanır.

  • Yukarı, yerde kameradan uzağa; aşağı kameraya doğru; sağ ve sol ise kameranın sağına ve soluna hareket ettirir: çaprazlar da dahil her yönde saniyede speed birim, kamera oyuncuya aşağı bakıyor olsa bile.
  • Hareket ederken oyuncu, yürüdüğü yöne dönük olur. Durduğunda da o yöne bakmaya devam eder.

Play'e bas, kamera dönerken etrafta yürü, ardından Check'e bas.

Kendin dene

using UnityEngine;

public class Mover : MonoBehaviour
{
    public float speed = 4f;
    public float gravity = -15f;
    public Transform cam;

    CharacterController controller;
    float verticalSpeed;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (controller.isGrounded && verticalSpeed < 0f)
        {
            verticalSpeed = -2f;
        }
        verticalSpeed += gravity * Time.deltaTime;

        // Dünya eksenleri boyunca hareket ediyor: cam'e göre hareket etmesini ve hareket ettiği yöne dönmesini sağla
        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
        move.y = verticalSpeed;
        controller.Move(move * Time.deltaTime);
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler