Parkur
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 49 / 60.
Bu bölümde bir 3B platform oyunu geliştireceğiz. Koşup zıplayarak havada duran platformları geçecek, süzülen bir platforma binecek, düşüşün seni başlangıca göndermemesi için kontrol noktalarına dokunacak, ekranda sayılan mücevherleri toplayacak, bitiş çizgisini geçerek sonraki seviyeye ulaşacak ve en iyi zamanını geçmeye çalışacaksın. Oyun, projenin en başından beri mevcut olan beş betikten oluşuyor: Player, MovingPlatform, Checkpoint, Gem ve FinishLine. Son dört betik şimdilik boş ve her derste bunlardan biri dolduruluyor. Oyuncu, Input System eylemleriyle yönlendirilen bir CharacterController'dır ve kamera onun alt öğesidir; bu sayede betik olmadan oyuncuyu takip eder.
CharacterController iki şekilde hareket eder. Move(motion) onu belirli bir mesafe hareket ettirir ve başka bir şey eklemez; bu nedenle Character Controller bölümündeki gibi yer çekimi, zıplamalar ve Time.deltaTime betiğin sorumluluğundadır. SimpleMove(speed) saniye başına birim cinsinden hız alır, bunu kare süresiyle kendisi ölçeklendirir ve yer çekimini ekler; verdiğin y değerini yok sayar. Bu yüzden onunla hareket ettirilen bir karakter çıkıntılardan düşebilir ama asla zıplayamaz. Yukarıdan görülen bir çoban köpeği oyununda bu çoban köpeğinin zıplaması gerekmediğinden, SimpleMove ve Move eylemi betiğin tamamını oluşturur:
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ı korur ve Move ile hareket eder; Input sınıfı yerine Move ve Jump eylemlerini okur. Unity, kare başına bir kez Move veya SimpleMove çağrılmasını önerir: yürüme ve düşme aynı çağrıya eklenir ve ardından isGrounded bu hareketin tamamını tanımlar.
Görev
OrtaOyuncunun yürümesini, zıplamasını ve düşmesini sağla.
Start()içinde,InputSystem.actions.FindActionileMoveveJumpeylemlerini bul.Update()içinde,speedhızında yürü: Move'un x değerini x ekseninde, y değerini z ekseninde kullan.- Yerdeyken ve düşerken
velocity.ydeğerinegravity * Time.deltaTimeekle ve değerini-2fyap. Yerdeyken zıplama, bu değeriMathf.Sqrt(jumpHeight * -2f * gravity)olarak ayarlar. controller.Move((move + velocity) * Time.deltaTime)çağrısını bir kez yap.
“Oyna” düğmesine bas: ilk platforma zıpla. Ardından “Kontrol et” düğmesine 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üş
}
}
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 ParalarKendi başına pratik yap: Unity playground