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.
Görev
OrtaKamera 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
speedbirim, 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);
}
}
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
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi4Sahneler ve Bölümler
Bir Sahne YüklemeBölümü Yeniden BaşlatmaSonraki BölümSahneler Arasında SaklamaTekrar: Bölüm Seçimi10Proje: 3D Platform Oyunu
ParkurHareketli Platformlar2Düğ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ıplama