Parkur
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 48 / 56.
Bu bölümde bir 3D platform oyunu yapılıyor. Yüzen platformların üzerinde koşup zıplıyor, süzülen bir platforma biniyor, düşmenin seni başlangıca geri göndermemesi için kontrol noktalarına dokunuyor, ekranda sayılan mücevherleri topluyor, bitiş çizgisini geçerek sonraki seviyeye ilerliyor ve en iyi süreni geçmeye çalışıyorsun. Oyun, en başından beri projede bulunan beş betikten oluşuyor: Player, MovingPlatform, Checkpoint, Gem ve FinishLine. Son dört betik şimdilik boş ve her ders bunlardan birini dolduruyor. Oyuncu, Input System'in eylemleriyle yönlendirilen bir CharacterController'dır; kamera da onun alt öğesi olduğundan bir betik olmadan takip eder.
Bir CharacterController iki şekilde hareket eder. Move(motion) onu bir mesafe kadar hareket ettirir ve başka bir şey eklemez; bu nedenle yer çekimi, zıplamalar ve Time.deltaTime betiğin sorumluluğundadır; Character Controller bölümünde olduğu gibi. SimpleMove(speed) saniyedeki birim cinsinden bir hız alır, bunu kare süresiyle kendisi çarpar ve yer çekimini ekler; ilettiğin y değerini yok sayar. Bu nedenle onunla hareket ettirilen bir karakter çıkıntılardan düşer ama asla zıplayamaz. Yukarıdan görülen bir çoban köpeği oyunundaki bu koyun köpeğinin zıplaması gerekmez; bu yüzden SimpleMove ve Move eylemi, betiğinin tamamıdır:
using UnityEngine;
using UnityEngine.InputSystem;
public class Sheepdog : MonoBehaviour
{
[SerializeField] private float speed = 6f;
private CharacterController controller;
private InputAction moveAction;
void Start()
{
controller = GetComponent<CharacterController>();
moveAction = InputSystem.actions.FindAction("Move");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
}
}Platform oyununun oyuncusunun zıplaması gerektiğinden kendi dikey hızını tutar ve Input sınıfı yerine Move ve Jump eylemlerini okuyarak Move ile hareket eder. Unity, kare başına bir kez Move veya SimpleMove çağrılmasını önerir: yürüme ve düşme aynı çağrıya girer ve ardından isGrounded bu hareketin tamamını tanımlar.
Görev
OrtaPlatform oyununa oyuncuyla başla. Player betiğinde speed (5), jumpHeight (1.5) ve gravity (-9.81), controller ve düşüş için bir velocity bulunur. Move ve Jump eylemlerini bir kez, Start içinde bul; ardından Update içinde:
- Move, oyuncuyu saniyede
speedbirim hızla yürütür: x ekseninde sağa ve sola, z ekseninde ileri ve geri. - Yer çekimi, her karede
gravity * Time.deltaTimedeğerinivelocity.ydeğerine ekler. Denetleyici yerdeyken vevelocity.y0'ın altındayken, yere basılı kalması için öncevelocity.ydeğerini -2 yap. - Yerdeyken Jump'a her basıldığında
velocity.ydeğeriMathf.Sqrt(jumpHeight * -2f * gravity)olarak ayarlanır:jumpHeightbirim yüksekliğinde bir zıplama. Jump'ı basılı tutmak yalnızca bir kez zıplatır ve havadayken zıplanamaz. - Yürüme hareketiyle
velocitydeğerini birleştiripTime.deltaTimeile çarparakcontroller.Moveişlevini bir kez çağır.
Play'e basıp ilk platformlara doğru zıpla, ardından Check'e bas.
Kendin dene
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private float jumpHeight = 1.5f;
[SerializeField] private float gravity = -9.81f;
private CharacterController controller;
private Vector3 velocity;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// Move eylemiyle yürü, Jump eylemiyle zıpla, yerçekimiyle düş
}
}
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 Paralar