CharacterController.Move
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 37 / 56.
CharacterController, Unity'de yürüyen bir karakter için kullanılan bileşendir: yalnızca betiğin controller.Move(motion) çağrısı yaptığında hareket eden bir kapsül. motion, bu karede kat edilecek mesafedir; yani hız ile Time.deltaTime'ın çarpımıdır. Move, kapsülü duvarların içinden geçirmek yerine duvarlar boyunca kaydırır, Slope Limit değerine (45 derece) kadar olan eğimlerde yukarı yürütür ve Step Offset değerine (0.3 birim) kadar olan çıkıntılara adım atmasını sağlar. Bu bir Rigidbody değildir: kuvvet yoktur, yer çekimi yoktur, sekme yoktur ve onu iten hiçbir şey yoktur. Move onu tam olarak nereye gönderirse oraya gider; hassas oyun kontrollerinin gereksinimi de budur.
Yer çekimini eklemek ve zemini bulmak sana kalmıştır. isGrounded, son Move çağrısı aşağıda bir şeye dokunduğunda true olur; bu nedenle aşağı yönlü bileşeni olmayan bir hareket zemini asla bulamaz. Controller'ın Min Move Distance değerinden (0.001) kısa bir Move hiçbir şey yapmaz; bu yüzden yalnızca yana hareket ettirilen bir controller, hareketsiz kaldığı anda zeminde olmadığını bildirir. Bu kurye ok tuşlarıyla yürür ve her harekette biraz aşağı doğru bastırılır:
public class Courier : MonoBehaviour
{
public float speed = 6f;
CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
move.y = -2f; // zeminin algılanması için her zaman aşağı doğru baskı uygula
controller.Move(move * Time.deltaTime);
if (!controller.isGrounded)
{
Debug.Log("Off the ground");
}
}
}Kapsül, dokunduğu yüzeylerden Skin Width (0.08) kadar uzakta durur; bu nedenle y = 0 konumundaki bir zeminde duran 2 birim yüksekliğinde bir controller'ın konumu 1 değil, y = 1.08 olur. Ayrıca Move, controller'ı fiziğin en son gördüğü konumdan hareket ettirir; bu yüzden üzerinde transform.position ayarı yapmak, bir sonraki Move çağrısında bu ayarın geri alınmasına neden olabilir. Onu ışınlamak için controller.enabled = false ayarını yap, konumunu değiştir ve ardından yeniden etkinleştir.
Görev
OrtaKaşif, arkasında duvar ve solunda uçurum olan taş bir platformda duruyor. CharacterController bileşeni olan Player nesnesine Explorer.cs yaz. Inspector, speed (4) ve fallSpeed (3) değerlerini ayarlar; Start() zaten denetleyiciyi ve kaşifin Renderer bileşenini bulur.
- Ham eksenlerle okunan ok tuşları (veya WASD), kaşifi saniyede
speedbirim hızla hareket ettirir: x ekseni boyunca sola ve sağa, z ekseni boyunca ileri ve geri. Duvar onu durdurmalıdır. - Her hareket aynı zamanda saniyede
fallSpeedbirim aşağı iner; böylece kaşif platformda kalır ve kenarından düşer. - Denetleyici zemindeyken kaşif
Color.greenolur; zeminde değilkenColor.redolur.
Play'e bas, duvara ve ardından kenardan aşağı doğru yürü, sonra Check'e bas.
Kendin dene
using UnityEngine;
public class Explorer : MonoBehaviour
{
public float speed = 4f;
public float fallSpeed = 3f;
CharacterController controller;
Renderer rend;
void Start()
{
controller = GetComponent<CharacterController>();
rend = GetComponent<Renderer>();
}
void Update()
{
// controller.Move ile yürü, ardından gezgini isGrounded durumuna göre renklendir
}
}
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