Fizikai alapú karaktervezérlő kódolása a Unity3D-ben

Fizikai alapú karaktervezérlő kódolása a Unity3D-ben
A hozzád hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

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 fizika alapú karaktervezérlő létrehozása szórakoztató hely lehet a játékfejlesztés elindításához.





1. lépés: Készítsen jelenetet lejátszóval és tereptárgyakkal

  egység karakter vezérlő 3d tér

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ó.

Windows 98 emulátor a Windows 10 rendszerhez

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.

 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }

    void Update() {
    }
}

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.

 public Rigidbody rigidbody; 
public float speed;

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.

 void Start() { 
    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. Az Input.GetKey segítségével meghatározhatja, 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ére a merevtest segítségével.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.

 if (Input.GetKey("w")) { 
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

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 komponensként kell látnia az Inspector panelen. 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.

 public float torque;

Ebben a szkriptben a balra és jobbra forgatáshoz használt kód nagyon hasonló az előre és visszafelé 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.GetAxis metódus segítségével, és az eredmény hozzárendelése egy float változóhoz. Ezt követően használja a rigidbody.AddTorque alkalmazást, hogy a kocka karaktermodelljére forgóerőt fejtsen ki a kocka nyomatékának, fordulatának és Z tengelyének megszorzásával.

 if (Input.GetKey("d")) { 
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

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.

 private bool isJumping = false;

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.

 if (!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.

 if (Input.GetKey("w") && !isJumping) { 
    rigidbody.AddForce(transform.forward * speed);
}

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 rigidbody.AddForce deklarációt, hogy erőt adjon a kockának 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.

 if (!isJumping) { 
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 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.

 void Move_Setter() { 
    isJumping = false;
}

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.