Esiteks on teil vaja mängijat, kes saab piirkonnas ringi vaadata.
Näiteks saate selle jaoks luua tühja objekti. Hierarhiaaknas valige hiire parema nupuga Loo -> Tühjenda. Nimetage objekt esimese isiku mängijaks. Lohistage see stseeni keskele. Lisage märgikontrolleri komponent.
Keskendage tähemärki F ja veenduge, et vidinad on aktiveeritud. Siis tulevad ilmsiks tegelase piirangud. Järgmisena looge graafika, et muuta objekt paremini nähtavaks. Paremklõpsake GameObjectil, valige Loo -> 3D -> Silinder. Seejärel eemaldage kapsel Collider, kuna märgikontroller toimib põrkurina. Oma tegelasele materjali määramiseks valige Loo–>Materjal. Lohistage materjal pleierile.
Kui teil pole mängus veel kaamerat, saate selle luua GameObjecti hiire parema nupuga või lohistate MainCamera oma GameObjecti, mis peaks mängijana toimima.
Valige kaamera, lähtestage teisenduskomponent ja lohistage see mängija peapiirkonda. Kaamera ei tohiks minna lõpuni üles, kuna kaamera ei tohiks läbi lae minna, kui teie tegelane hüppab.
Teil on vaja skripti, mis võimaldab teil ringi vaadata. Kõik liigutatakse hiirega ja see liigub kahel teljel (x ja y). Kui liigutate hiirt küljele, peaks mängija pöörlema y-teljel. Kui liigutate hiirt üles või alla, ei tohiks teie tegelane liikuda, ainult x-telje kaamera.
Kaamera pööramine peaks olema piiratud 180 °, et see ei jääks mängija taha. Seda protsessi nimetatakse klammerdamiseks. Valige kaamera ja lisage uus komponent: MouseLook
Skripti värskendusfunktsiooni tuleb sisestada hiire liikumise sisendfunktsioon.
Loo:
float mouseX = Input.GetAxis ("Hiir X")
See on programmi Unity hiire pööramiseks juurdepääs.
Tehke sama Y-telje puhul:
float mouseY = Input.GetAxis ("Hiir Y");
Nüüd soovite juhtida hiire kiirust.
Seetõttu looge avaliku klassi alla:
avalik hõljuv hiirTundlikkus = 100f;
Sisend korrutatakse hiire tundlikkusega.
Kirjutage mängu stsenaarium esimese isiku vaatenurgast
Esiteks on teil vaja mängijat, kes saab piirkonnas ringi vaadata.
Näiteks saate selle jaoks luua tühja objekti. Hierarhiaaknas valige hiire parema nupuga Loo -> Tühjenda. Nimetage objekt esimese isiku mängijaks. Lohistage see stseeni keskele. Lisage märgikontrolleri komponent.
Keskendage tegelane F -ga ja veenduge, et gizmos on aktiveeritud. Siis on näha tegelase piiranguid. Seejärel looge graafika, et objekti paremini näha. Paremklõpsake GameObjectil, valige Loo -> 3D–> Silinder. Seejärel eemaldage kapsli põrkeseade, kuna märgikontroller toimib põrkurina. Oma tegelasele materjali määramiseks valige Loo -> Materjal. Lohistage materjal mängijale.
Kui teil pole mängus veel kaamerat, saate selle luua GameObjecti hiire parema nupuga või lohistate MainCamera oma GameObjecti, mis peaks mängijana toimima.
Valige kaamera, lähtestage teisenduskomponent ja lohistage see mängija peapiirkonda. Kaamera ei tohiks minna lõpuni üles, kuna kaamera ei tohiks läbi lae minna, kui teie tegelane hüppab.
Teil on vaja skripti, mis võimaldab teil ringi vaadata. Kõik liigutatakse hiirega ja see liigub kahel teljel (x ja y). Kui liigutate hiirt küljele, peaks mängija pöörlema y-teljel. Kui liigutate hiirt üles või alla, ei tohiks teie tegelane liikuda, ainult x-telje kaamera.
Kaamera pööramine peaks olema piiratud 180 °, et see ei jääks mängija taha. Seda protsessi nimetatakse klammerdamiseks. Valige kaamera ja lisage uus komponent: MouseLook
Skripti värskendusfunktsiooni tuleb sisestada hiire liikumise sisendfunktsioon.
Loo:
float mouseX = Input.GetAxis ("Hiir X")
See on programmi Unity hiire pööramiseks juurdepääs.
Tehke sama Y-telje puhul:
float mouseY = Input.GetAxis ("Hiir Y");
Nüüd soovite juhtida hiire kiirust.
Seetõttu looge avaliku klassi alla:
avalik hõljuv hiirTundlikkus = 100f;
Sisend korrutatakse hiire tundlikkusega. Lisaks peaks liikumine olema kaadrisagedusest sõltumatu. Lisaks korrutage oma funktsioon Time.deltaTime'iga;
Sama teete Y-teljega. See kohandab pöörlemiskiirust kaadrisagedusega.
Nüüd peaks liikuma ka mängija keha. Selleks on vajalik viide põhikaamerast 1. isiku objektile.
Selleks looge: public Transform playerBody;
Juurdepääs PlayerBody -le värskendusalal.
playerBody.Rotate (Vector3.up * mouseX)
Seejärel lohistage mängija PlayerBody alale.
Nüüd on vaja üles ja alla vaadata. Selleks peab hiir pöörlema ümber X -telje.
Looge selleks privaatne muutuja:
ujuk xRotation = 0f
Värskendusalale lisage:
xRotation - = hiirY;
Nüüd lisatakse pöörlemine:
transform.localRotation = Quaternion.Euler ()
Quaternion vastutab Unity in Unity rotatsiooni eest. Siis on väärtused x, y ja z.
transform.localRotation = Quaternion.Euler (xRotation, 0f, 0f);
Sellele pöörlemisele tuleb nüüd lisada "kinnitus".
Selleks vajate:
xRotation = Mathf.Clamp (xRotation, -90f, 90f)
See piirab kaamera liikumist -90f ja 90f. Nii võite olla kindel, et kaamera ei pöörle mängija taha.
Stardifunktsioonis on endiselt puudu kood, mis seab kursori lähtepunktiks ekraani keskele.
Cursor.lockState = CursorLockMode.Locked;
Skript näeb nüüd välja selline:
Järgmine on mängija liikumine. Mängija liikumiseks on vaja sisendeid. Sisestused on vajalikud horisontaalse ja vertikaalse telje jaoks. Liigutusklahvid, mis on Unity'is eelmääratletud, asuvad klaviatuuril ja on W, A, S ja D.
W puhul vertikaalne = 1
S -> vertikaalne = -1
Sama kehtib horisontaalse kohta:
A -> -1
D -> 1
Need seaded töötavad kontrolleri jaoks samal ajal.
Mängija liigub külgsuunas piki x-telge ja edasi-tagasi piki z-telge.
Liikumine peab alati olema selle suuna suhtes, kuhu mängija vaatab.
Selleks vajame Visual Stuudios kirjutatud PlayerMovement Scripti. Lisage see FirstPersonPlayerile.
Loo tühja värskenduse all:
float x = Input.GetAxis ("Horisontaalne");
float z = Input.GetAxis ("Vertikaalne");
Nüüd muudetakse sisend selles suunas, kuhu mängija peaks liikuma.
Verctor3 käik = teisendus.parem * x + teisendus.forard * z;
Olete nüüd loonud suuna, mis põhineb mängija liikumisel ning vastaval x ja z liikumisel. Selle tulemusena liigub tegelane alati vastavalt sellele, millises suunas ta vaatab.
Samuti on vaja viidet märgikontrollerile.
Nüüd looge CharacterController avalikuks:
avalik CharacterController kontroller;
Eemaldage starditeade.
Nüüd lisage Vector3 käigu alla:
kontroller.Move (liiguta);
Lisaks peaks olema võimalik kontrollida liikumiskiirust:
avalik ujuki kiirus = 12f;
Seetõttu korrutage regulaatori liigutused kiirusega:
kontroller.Move (liiguta * kiirus);
Lisaks on "* Time.deltaTime");
sest see asub värskenduste piirkonnas.
controller.Move (liiguta * kiirus * Time.deltaTime);
See muudab kaadrisageduse sõltumatuks.
Seejärel lohistatakse CharacterController väljale. Kui kaamera liigub, liigub ka mängija liikumissuund.
Selleks, et saaksite näiteks trepist üles ronida, on vaja suurendada CharacterController StepOffset, nt. B. kuni 0.7
Sammu nihe määrab, kui kõrgete astmetega saate ronida. Kaldpiirangu all määrate nurga, mida teie tegelane saab ronida.
Järgmiseks vajate gravitatsiooni, et teie tegelane ei jääks õhku kinni, kui ta on näiteks trepist üles roninud.
Gravitatsioon on määratletud kui jõud, mis toimib teatud aja jooksul. See suurendab kiirust, kui see on tõhus. Vajalik on kiiruse muutuja.
Sa vajad:
Vektor 3 kiirus;
Kiirus y-telje suhtes määratakse gravitatsioonikonstandiga.
kiirus.y + =
Looge ka: avalik ujuki gravitatsioon = -9,81f;
Seejärel lisate kiirusele raskusjõu.
kiirus.y + = raskusaste * Aeg.deltaaeg;
Lisatava kiiruse lisamiseks tehke järgmist.
controller.Move (kiirus * Time.deltaTime)
Delta y tuleneb poolest gravitatsioonist, korrutatuna aja ruuduga.
Sel põhjusel korrutatakse kiirus uuesti ajaga.deltaTime.
Valmis skript näeb välja selline:
Gravitatsioon mõjutab nüüd mängijat.
Looge tühi objekt ja lohistage see oma mängijale alla ning pange sellele nimi GroundCheck. See objekt kontrollib füüsikat, kas mängija seisab maapinnal. Skriptis tuleb luua ühendus, et objekt saaks selle kontrolli läbi viia.
Lisama:
avalik Transform groundCheck;
avalik ujuvpindKaugus = 0.4f;
Samuti on üks
avalik LayerMask groundMask;
Teil on vaja ka muutujat, mis määrab, kas mängija on kohapeal:
bool isGrounded;
Nüüd lisandub värskendusfunktsiooni täiendus:
isGrounded = Physics.CheckSphere (groundCheck.position, groundDistance, groundMask);
See kasutab füüsikat, et kontrollida, kas figuur on maapinnal. See on siis, kui objekt või kera on maapinnal, asend ja kaugus.
Uue GameObjectiga luuakse määratud kohas väike nähtamatu kera. Kui see põrkub kokku millegi GroundMaskiga, on mängija maas. Vastasel juhul pole see mängija.
Lisaks:
if (isGrounded && velocity.y <0)
{
kiirus.y = 2f;
}
Sellega sunnite mängija maapinnale.
Skript näeb nüüd välja selline:
Lohistage GroundCheck PlayerScripti vastavale väljale.
Lisage kiht või jahvatatud mask kiht a. Samuti saate paremas ülanurgas uued kihid uuesti määratleda.
Peate lülitama keskkonna, mis peaks toimima põrandana, vastavale kihile.
Kui tegelane langeb liiga aeglaselt, saate raskust suurendada.
Hüppamisel määratakse kiirus hüppekõrguse järgi:
Kiirus = ruutjuur (hüppe kõrgus * -2 * raskusaste)
Selleks vajate:
kui (Input.GetButtonDown ("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt ()
}
Nüüd lisate hüppekõrgusele avaliku muutuja:
avalik ujukhüpeKõrgus = 3f;
Siis jätad välja: jumpHeight * -2f * gravitatsioon tõmba juur.
velocity.y = Mathf.Sqrt (jumpHeight * -2f * gravitatsioon)
Valmis skript näeb välja selline:
Tööle hüppamiseks tuleks maapind määrata maapinnale. Vastasel juhul skript hüppamisega ei tööta.