Új vagy a Unityben? Szeretnéd megtanulni, hogyan veheted át a játékosok inputjait, és hogyan mozgathatod a karaktereket a képernyőn? Ezt az útmutatót azért hoztuk létre, hogy bemutassuk a játékosok mozgásának három különböző módját a Unityben.
Akár most ismerkedsz a kódolással, akár van némi tapasztalatod, ez a C# oktatóanyag talpra hoz téged, a karaktereidet pedig a saját lábukra.
Kezdjük el.
Játékos mozgás egységben: Bemenetek gyűjtése
Először is tudnod kell, hogyan rögzítheted a felhasználó bemeneteit, és hogyan alakíthatod őket mozgássá a játékban. A Unity ezt meglehetősen egyszerűvé teszi, ha tudod, hol keress.
Ha a Unity meg van nyitva, kattintson a gombra Szerkesztés a felső eszköztáron. Most válassza ki Projektbeállítások. A bal oldali listából válassza ki a lehetőséget Bemenetkezelő. Válassza ki Tengelyek, kitölti a bemeneti értékek listáját. Meg akarod nézni Vízszintes és Függőleges alapmozgáshoz.
Ezeket a tengelyeket együtt fogja használni Bemenet. GetAxisRaw(); az alapvető mozgáshoz a következő részben.
Játékos mozgás egységben merev test és ütköztető segítségével
Most, hogy ismeri a tengelyek nevét, használhatja őket a játékos mozgásának vezérlésére.
Az Ön Unity projektjében Hierarchia nézet, kattintson a jobb gombbal, és válassza ki 3D objektum > Kapszula hogy megteremtse azt, aminek mozgást ad. Ügyeljen arra, hogy ugyanazt a taktikát használja a talaj létrehozásához Repülőgép hogy a kapszula ráálljon.
Feltétlenül állítsa vissza a Átalakítani mindkét objektum értékét, és mozgassa a kapszulát úgy, hogy az a Síkon álljon. Nevezze át a kapszulát „Player”-re az egyszerű azonosítás érdekében.
Összefüggő: Az 5 Unity játékfejlesztő nyelv: melyiket érdemes megtanulni?
Kattintson a Játékos objektumban és a Ellenőr nézethez görgessen le Adjon hozzá komponenst. Add hozzá a Merev test, majd adjon hozzá egy másik összetevőt a Kapszulaütköző ezúttal. Szüksége lesz ezekre az összetevőkre, hogy hozzáadja a fizikát, és így a mozgást is Játékos.
Ezután kattintson jobb gombbal a sajátjára Szkriptek mappa és Teremt egy új C# szkript. Nevezd el ezt a szkriptet a "PlayerMovement" mintájára. Ha többféle mozgástípust szeretne hozzáadni a különböző karakterekhez vagy vezérlőtípusokhoz, akkor sok különböző szkriptet kell létrehoznia minden mozgástípushoz. Egyelőre az alapokra fogunk összpontosítani, és egyetlen szkriptet használunk.
Lásd még: Mi a moduláris programozás az Unity-ben és miért fontos?
Kattintson duplán a szkriptre a megnyitásához. Megjelenik egy alapértelmezett Unity-szkript:
rendszer segítségével. Gyűjtemények;
rendszer segítségével. Gyűjtemények. Generikus;
UnityEngine használatával;
nyilvános osztály PlayerMovement: MonoBehaviour
{
// A Start meghívása az első keretfrissítés előtt történik
void Start()
{}
// A frissítést keretenként egyszer hívják meg
érvénytelen frissítés ()
{
}
}
Lehet törölni rendszer segítségével. Gyűjtemények; és segítségévelRendszer. Gyűjtemények. Generikus; mivel nincs rájuk szükség ehhez a szkripthez.
Ha ez nincs az útból, összpontosítson rá
public class PlayerMovement: MonoBehaviour {
átmenetileg. A nyitó göndör merevítő belsejében hozzon létre a nyilvános úszó nevű változó sebesség vagy valami hasonló. Ez sebesség változó egy szorzó, amely szabályozza, hogy milyen gyorsan a mi Játékos további programozás után mozog. Egyelőre beállítva sebesség egyenlő valami hasonlóval 10f.
Azt is meg kell engedned a Unity-nek, hogy van egy merev test, amelyet manipulálhat ebben a szkriptben. Ez a kulcsszóval történik Merev test és egy változónév – mi választjuk rb.
nyilvános osztály PlayerMovement: MonoBehaviour
{
nyilvános lebegési sebesség = 10f; //Sebességszorzót vezérli
Merev test rb; //Kiírja a szkriptnek, hogy van egy merev test, az rb változóval hivatkozhatunk rá egy további szkriptben
Ennyit kell hozzáfűznie ehhez a szakaszhoz. Most pedig lépjen tovább void Start(). A játék elindításakor be kell állítani a rb változó egyenlő a Merev test a Játékos így:
void Start()
{
rb = GetComponent(); //rb egyenlő a lejátszó merev testével
}
Most pedig vessen egy pillantást a érvénytelen frissítés () funkció. Ez az a funkció, amellyel folyamatosan lekérheti a bemeneteket a lejátszók billentyűzetéről, kontrollereiről stb. Emlékezzen, amikor ellenőrizte a Projektbeállítások számára Bemeneti tengelyek? Itt fogod használni őket.
érvénytelen frissítés ()
{
float xMove = Bemenet. GetAxisRaw("Vízszintes"); // d kulcs 1-re, a kulcs -1-re változtatja az értéket
float zMove = Bemenet. GetAxisRaw("Függőleges"); // w gomb 1-re, s gomb -1-re változtatja az értéket
rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * sebesség; // Sebességet hoz létre az érték irányában, amely megegyezik a gombnyomással (WASD). Az rb.velocity.y az eséssel + ugrással foglalkozik, a sebességet y-ra állítva.
}
Ne aggódjon, ha túlterheltnek érzi magát a kód ugrása miatt; lépésről lépésre elmagyarázzuk. Először hozzon létre a úszó változó névvel, mint xMove, és állítsa egyenlőnek Bemenet. GetAxisRaw("Vízszintes");
Bemenet. GetAxisRaw(); a Unity módszere a lejátszó bemeneteinek rögzítésére Tengelyek megtaláltad a Projektbeállítások. Bővebben olvashatsz róla A Unity hivatalos dokumentációja. "Vízszintes" származik a Vízszintes tengely név a Unityben. Ez a tengely balra és jobbra mozgást vezérel az "a" és "d" gombokkal.
Amint valószínűleg mostanra sejtheti, float zMove = Bemenet. GetAxisRaw("Függőleges");
ugyanezt teszi a "w" és az "s" billentyűk kivételével.
Összefüggő: A legjobb Unity 3D oktatóanyagok kezdőknek
Következő, ezt tedd fel sebesség játékba hozott változót, és fejezd be a kirakós játék utolsó darabját a játékosok mozgásához Unityben.
rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * sebesség; // Sebességet hoz létre az érték irányában, amely megegyezik a gombnyomással (WASD). Az rb.velocity.y az eséssel + ugrással foglalkozik, a sebességet y-ra állítva.
Menj vissza a Unityhoz Ellenőr nézet a Játékos tárgy. Vessen egy pillantást a Merev test-alatt Info, akkor megjelenik egy érték Sebesség. Ez az az érték, amelyet megcéloz rb.sebesség.
új Vector3(xMove, rb.velocity.y, zMove) * sebesség, létrehoz egy új vektort a megadott x, y és z értékekkel, majd megszorozza a vektor értékét sebesség.
Ügyeljen arra, hogy húzza a PlayerMovement script rá Játékos tárgy az Unityben, és ennyi! Összességében van egy működő C# szkripted, amely bemeneteket vesz a lejátszótól, és karaktermozgássá alakítja át azokat a Unityben.
Íme a kész kód:
UnityEngine használatával;
nyilvános osztály PlayerMovement: MonoBehaviour
{
nyilvános lebegési sebesség = 10f; //Sebességszorzót vezérli
Merev test rb; //Kiírja a szkriptnek, hogy van egy merev test, az rb változóval hivatkozhatunk rá egy további szkriptben// A Start meghívása az első keretfrissítés előtt történik
void Start()
{
rb = GetComponent(); //rb egyenlő a lejátszó merev testével
}// A frissítést keretenként egyszer hívják meg
érvénytelen frissítés ()
{
float xMove = Bemenet. GetAxisRaw("Vízszintes"); // d kulcs 1-re, a kulcs -1-re változtatja az értéket
float zMove = Bemenet. GetAxisRaw("Függőleges"); // w gomb 1-re, s gomb -1-re változtatja az értéket
rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * sebesség; // Sebességet hoz létre az érték irányában, amely megegyezik a gombnyomással (WASD). Az rb.velocity.y az eséssel + ugrással foglalkozik, a sebességet y-ra állítva.
}
}
jegyzet: Ha úgy találja, hogy a karaktere többet csapkod, mint bármi más, győződjön meg arról, hogy a játékos forgását rögzíti a Ellenőr.
Tanuljon és szerezzen többet a Unityben
Most, hogy tudja, hogyan kell programozni a játékosok mozgását Unityben a Rigidbody és Collider komponensekkel, mit fog tanulni ezután? Lehet, hogy a mozgásvezérlő bővítése olyan dolgokkal, mint a csúsztatás, a dupla ugrás és még sok más, szórakoztató és vonzó lenne.
A Unity Learn tele van érdekes témákkal, amelyekkel fejlesztheti játékfejlesztési készségeit. Úgy gondoljuk, hogy a programozási ismereteinek bővítésében az egyik legfontosabb tényező az, hogy minden nap tanuljon valami újat. Maradjon kíváncsi és boldog hackelést!
Szeretnéd elkezdeni saját játékaid fejlesztését? A Unity Learn a legjobb és legegyszerűbb módja annak, hogy megtanulja és elsajátítsa azt, amit tudnia kell.
Olvassa el a következőt
- Programozás
- Játékfejlesztés
- Egység
- Programozás
Marcus szabadúszó technológiai újságíró és a MUO programozási részlegének junior szerkesztője. Ő egy egész életen át tanuló, hobbi front-end fejlesztő és novellaíró, aki több mint 3 éves tapasztalattal rendelkezik a próza fejlesztésében, amely folyamatosan tájékozódik az olvasókról.
Iratkozzon fel hírlevelünkre
Csatlakozzon hírlevelünkhöz műszaki tippekért, ismertetőkért, ingyenes e-könyvekért és exkluzív ajánlatokért!
Kattintson ide az előfizetéshez