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 42 / 60.
Kamera oyuncuya bir açıdan baktığında, oklar oyuncuyu ekranın gösterdiği şekilde hareket ettirmelidir: yukarı, kameradan uzaklaşarak yürümeyi; sağ ise kameranın sağına doğru yürümeyi sağlar. Dünyanın eksenleri bunu yalnızca kamera +z yönü boyunca baktığında yapar. Bu yüzden hareketi kameranın kendi yönlerinden, cam.forward ve cam.right ile oluştur.
Önce bunları düzeltmek gerekir. Oyuncuya yukarıdan bakan bir kameranın forward yönü zemini gösterir; bu nedenle yalnızca zemin boyunca olan kısmı bırakmak için y değerini 0 yap. Geriye kalan uzunluk 1'den kısadır; aşağı doğru 30 derece eğilmiş bir kamerada yaklaşık 0.87 olur ve oyuncu daha yavaş yürür. Bu yüzden vektörü normalize et. Bu yürüme denetleyicisi, seviyenin bir köşesine bakan ana kamerayı izler:
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 etiketli 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, dik açılarda iki birim vektörü toplar; sonuç yaklaşık 1.41 uzunluğundadır. Bu nedenle hareket uzunluğu 1'den fazlaysa normalize edilir.
Görev
OrtaOk tuşları, oyuncuyu dönen kameraya göre hareket ettirsin.
Update()içindecam.forwardvecam.rightdeğerlerini kopyala;ydeğerini 0 yap ve normalize et.dir, ham"Vertical"ekseniyle çarpılmışforwardile"Horizontal"ekseniyle çarpılmışrightdeğerlerinin toplamıdır; uzunluğu 1’den büyükse normalize et.dir != Vector3.zeroolduğundatransform.rotation = Quaternion.LookRotation(dir);değerini ata.movedeğerinidir * speedifadesinden oluştur.
“Oyna” düğmesine bas: yukarı tuşu, kamera hangi yöne bakıyorsa oyuncuyu o yönde kameradan uzağa yürütür. Ardından “Kontrol et” düğmesine 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);
}
}
Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki Paralar8Karakter Kontrolcüsü
CharacterController.MoveYerçekimini Elle UygulamaZıplamaNesneleri İtmeBaktığın Yöne Hareket EtTekrar: Çift ZıplamaKendi başına pratik yap: Unity playground