A karaktervezérlő segíthet az egyszerű mozgásfizika megvalósításában a játékban.
A Unity3D karaktervezérlőket több oldalról is megközelítheti. Ha hatékony osztályokat és funkciókat tartalmazó könyvtárat használ, egy fizikai alapú karaktervezérlő létrehozása szórakoztató hely lehet a játékfejlesztés megkezdéséhez.
1. lépés: Készítsen jelenetet lejátszóval és tereptárgyakkal
Miután a Unity megnyílt, és létrehoztál egy új projektet, elkezdheted néhány objektum hozzáadásával a jelenethez. Ezeket az objektumokat bármilyen sorrendben létrehozhatja, de ügyeljen arra, hogy a megfelelő beállításokat használja. Bár ez a projekt alapvető, nagyszerű módja annak kezdje el a Unityt.
Egy 3D sík objektum terephez
Az első tárgy, amelyet a jelenethez adunk, egy sík. Kattintson a jobb gombbal a hierarchia ablaktáblára, és mutasson rá 3D objektumés válassza ki a lehetőséget
Repülőgép a listáról. Beállíthatja a repülőgép méretét, hogy nagyobb tesztelési területet biztosítson, de nem kell mást tennie.A Cube Object Player modell
Ezután itt az ideje, hogy hozzáadjunk egy kockát a jelenethez, hogy játékosmodellként működhessen. Kattintson a jobb gombbal a hierarchia ablaktáblára, és mutasson rá 3D objektumés válassza ki a lehetőséget Kocka a legördülő menüből. Helyezze el az új kockát úgy, hogy az a szintén hozzáadott sík fölé kerüljön. Egy merevtest komponenst is hozzá kell adni ahhoz, hogy a kockából fizikai objektum legyen.
Válassza ki a kockát, és lépjen az Inspectorhoz. Kattintson Adjon hozzá komponenst az ablaktábla alján keressen rá a merev testre, és válassza ki Merev test a listából, amikor megjelenik. Jelölje be a Használd a Gravitációt jelölje be a jelölőnégyzetet, és hagyja a többi beállítást úgy, ahogy van.
Megtalálhatod ingyenes Unity eszközök online hogy feldobja a projektjét.
Egy harmadik személy kamera
A jelenetnek már rendelkeznie kell egy kamerával, amelyet harmadik személyű kameraként használhat. Helyezze el a kamerát úgy, hogy a harmadik személy kényelmes pozíciójában üljön a kocka felett. Nyissa meg a hierarchia ablaktáblát, mielőtt a kamerát a kockára húzza, hogy szülő-gyermek kapcsolatot hozzon létre. A kamera automatikusan követi a kockát, ha ez megtörtént.
Gyors teszt
Bár jelenetének még nincs kódja, tesztelheti az eddig végzett munkát. Kattints a Játék gombot a képernyő tetején a játék betöltéséhez. Látnod kell, hogy a kocka leesik, és a repülőgép tetején landol, a kamerának pedig követnie kell a kockát, ahogy esik.
2. lépés: Állítson be egy C# fájlt
Most itt az ideje, hogy hozzon létre egy C# fájlt, hogy elkezdhesse programozni a mozgást. Lépjen a Projekt részre, kattintson a jobb gombbal, mutasson a Létrehozás elemre, és válassza a Mappa lehetőséget a listából. Nevezze el a mappát Scripts vagy valami hasonló.
Navigáljon az új mappában, és ismételje meg a folyamatot, de válassza ki a C# Scriptet a listából. Bármilyen nevet adhat ennek a fájlnak, de ez lesz a benne lévő fő függvény neve is. Győződjön meg arról, hogy az új C#-ja így néz ki.
segítségével Rendszer. Gyűjtemények;
segítségével Rendszer. Gyűjtemények. Generikus;
segítségével UnityEngine;nyilvánososztályCharacter_Control: MonoBehaviour {
üresRajt() {
}
üresFrissítés() {
}
}
3. lépés: A C# használatával hozzon létre előre és hátra mozgást sebességgel
Mielőtt hozzáadná a függvényeket a szkriptfájlban, deklaráljon néhány nyilvános változót. Először is egy Rigidbody a játékos modelljének tárolására. Adjon meg egy úszót is, hogy nyomon kövesse a mozgási sebességet. Ezek a változók a fő osztályba kerülnek, minden függvényen kívül.
nyilvános Merev test merev test;
nyilvánosúszó sebesség;
Ezután itt az ideje, hogy egyetlen kódsort adjunk a Start funkcióhoz. Ez egy GetComponent deklarációt használ a kocka merevtest komponensének hozzárendeléséhez az Ön által létrehozott merevtest változóhoz.
üresRajt() {
rigidbody = GetComponent < Rigidbody > ();
}
Most hozzáadhat néhány kódot, amely mozgatja a játékos modelljét. Ez a kód szép és egyszerű; csak két if utasításra van szüksége, egy az előre mozgáshoz és egy a hátrafelé történő mozgáshoz. Használhatja a Bemenetet. GetKey annak meghatározásához, hogy mikor van lenyomva egy billentyű. Ebben az esetben a W és az S billentyűk lenyomását keresi.
Ezen billentyűk bármelyikének megnyomása erőt ad a kocka merev testéhez a merev test használatával. AddForce. A hozzáadott erő irányát és sebességét úgy számíthatja ki, hogy a Z-tengely pozícióját (transzform.előre) megszorozza a sebességváltozóval. Nincs transzformáció.hátra osztály, amelyet visszafelé történő mozgáshoz használhatna, de ez elérhető a transzformáció előre -1-gyel való szorzásával.
ha (Bemenet. GetKey("w")) {
merev test. AddForce (transform.forward * sebesség);
}
ha (Bemenet. GetKey("s")) {
merev test. AddForce((transform.forward * -1) * sebesség);
}
Mentse el a C# fájlt, és navigáljon vissza a Unityhoz. Keresse meg a szkriptet a Projekt ablaktáblán, és húzza rá a hierarchián belüli Cube karaktermodellre, hogy hozzárendelje a szkriptet az objektumhoz. Amikor kiválasztja a Kockát, a szkriptet összetevőként kell látnia az Inspector ablaktáblában. Kattintson a merevtest változó mezőbe, és válassza ki a kocka merev testét.
Most már használhatja a Play gombot a játék elindításához és a kód teszteléséhez. De várj! Van egy probléma; a kockád inkább gurul, mintsem egyenesen előre halad. Menjen vissza a kocka ellenőrzőjéhez, keresse meg a Rigidbody komponenst, és jelölje be a Forgatás kimerevítését az X és Z tengelyen, mielőtt újra elindítaná a játékot. Most már működnie kell.
4. lépés: Használja a C#-t a bal és jobb oldali esztergálás létrehozásához nyomatékkal
A hátra és előre mozgással ellentétben a Cube lejátszómodell forgatása nyomatéknak nevezett erőt igényel. Ehhez egy másik változóra van szükség: egy nyilvános lebegőre a nyomatékérték hozzárendeléséhez.
nyilvánosúszó nyomaték;
Ebben a szkriptben a balra és jobbra forgatáshoz használt kód nagyon hasonló az előre és hátrafelé történő mozgáshoz. Van egy ha utasítás minden irányhoz, amely a D gomb (jobbra fordulás) vagy az A gomb (balra fordulás) megnyomását keresi.
Minden if utasítás első lépése a fordulat irányának meghatározása az Input segítségével. GetAxis metódust, és rendelje hozzá az eredményt egy lebegő változóhoz. Ezt követően használjon merev testet. AddTorque, hogy a kocka karaktermodelljére forgóerőt alkalmazzon a kocka nyomatékának, fordulatának és Z tengelyének megszorzásával.
ha (Bemenet. GetKey("d")) {
úszó turn = Bemenet. GetAxis("Vízszintes");
merev test. AddTorque (transform.up * nyomaték * fordulat);
}
ha (Bemenet. GetKey("a")) {
úszó turn = Bemenet. GetAxis("Vízszintes");
merev test. AddTorque (transform.up * nyomaték * fordulat);
}
Mentse el a kódot, és térjen vissza a Unity-hez, hogy tesztelje. Beállíthatja a lejátszómodell forgásának sebességét és felfutási idejét a kocka kiválasztásával és a merev test tömegének, húzási és nyomatékának változóinak szerkesztésével a szkriptben. Ez a példaprojekt 1 tömegre, 1 ellenállásra és 2 nyomatékra állítja be.
5. lépés: Használja a C#-t az ugrás programozásához
A Unity karaktervezérlő utolsó elemeként itt az ideje, hogy létrehozza az ugrást. Az ugrás létrehozása bonyolultabb, mint a többi alapvető vezérlő, amelyen már dolgozott, mivel az ugrásnak korlátozott magasságúnak kell lennie. Kezdje egy privát logikai változó hozzáadásával annak nyomon követésére, hogy a játékos ugrik-e vagy sem.
magánbool isJumping = hamis;
Ez a változó nem csinál semmit, ha nincs egy tesztelő utasítás. Ebben az esetben egy alapvető if utasítás, amely ellenőrzi, hogy a változó hamis-e, megteszi a trükköt. Ugyanezen feltétel hozzáadása a másik mozgáshoz, ha az utasítások megakadályozzák a játékos mozgását ugrás közben.
ha (!isJumping) {
}
Ugyanezen feltétel hozzáadása a másik mozgáshoz, ha az utasítások megakadályozzák a játékos mozgását ugrás közben.
ha (Bemenet. GetKey("w") && !isJumping) {
merev test. AddForce (transform.forward * sebesség);
}
Az !isJumping if utasításon belül egy másik if utasításra van szükség, ezúttal az ugrás gomb megnyomásának ellenőrzéséhez. Ebben az if utasításban először az isJumping változót igazra kell állítani, majd ezt követi a rigidbody.angularVelocity deklaráció a kockára jelenleg ható erők eltávolítására.
Most már használhatja a merev testet. AddForce deklaráció, amellyel erőt ad a kockához a Z tengelyén, létrehozva egy ugrás felfelé irányuló mozgását. Végül itt az ideje, hogy egy hívási deklarációt használjunk egy másik függvény meghívására 0,8 másodperc után.
ha (!isJumping) {
ha (Bemenet. GetKeyDown("hely")) {
isJumping = igaz;
merev test. AddForce (transform.up * sebesség * 120);
rigidbody.angularVelocity = Vector3.zero;
Invoke("Move_Setter", 0.8 f);
}
}
Ez a funkció visszaállítja az isJumping változót false értékre, így a mozgás/ugrás ismét lehetséges, és a 0,8 másodperces késleltetés megakadályozza, hogy túl korán aktiválódjon.
üresMove_Setter() {
isJumping = hamis;
}
6. lépés: Tesztelje a karaktervezérlő kódját
Mentse el a fájlt, és térjen vissza a Unity-be, hogy tesztelje a megírt kódot. A legtöbb fordítóhoz hasonlóan a Unity is információkat nyújt a kóddal kapcsolatos hibákról és egyéb problémákról, hogy könnyebben áttekinthesse, mit kell módosítania. A projekt teljes kódját megtekintheti oldalunkon GitHub oldalon.
Unity karaktervezérlők létrehozása
Számos különböző megközelítés közül választhat, amikor karaktervezérlőt hoz létre a Unityben. A fizika használata az egyik lehetőség, de ha akarod, használhatod a beépített karaktervezérlő rendszert is.
Az ehhez hasonló különféle lehetőségek felfedezése nagyszerű módja annak, hogy megismerkedjen az olyan eszközökkel, mint a Unity.