Drošības informācijas portāls. Mēs rakstām arkanoid vietnē Unity

Pretdrudža līdzekļus bērniem izraksta pediatrs. Bet ir ārkārtas situācijas pret drudzi, kad bērnam nekavējoties jādod zāles. Tad vecāki uzņemas atbildību un lieto pretdrudža zāles. Ko atļauts dot zīdaiņiem? Kā pazemināt temperatūru vecākiem bērniem? Kādas zāles ir visdrošākās?

Vienotība- ļoti jaudīgs, progresīvs dzinējs ar lielu potenciālu. Tam ir daudz jau iebūvētu funkciju (tostarp fizikas dzinējs Nvidia PhysX), kas mums, lietotājiem, nav manuāli jāreģistrē. :)
Šajā īsajā rakstā es vēlētos apspriest dzinēja fiziskās iespējas. Tātad, sāksim:

Stingrs korpuss

Kas tas ir?

Aiz funkcijas Stingrs korpuss Paslēpt absolūti stingru ķermeni ( ATT). Ja jūs to izskaidrojat rupji un skaidri, tad ATT fizikā un mehānikā tas ir ideāls stingrs ķermenis, kas spēka ietekmē nevar mainīt savas īpašības, bet var (tā ietekmē) pārvietoties 3 dimensijās (uz leju, uz augšu, uz priekšu utt., t.i., pa mūsu X-Y-Z asīm). ), kā arī pagriezt 3 dimensijās (atkal pa X-Y-Z asīm).

AT Vienotība, tāpat kā citos spēļu dzinējos (es atkal tos saucu par "spēļu" dzinējiem), Stingrs korpuss izmanto dažādiem objektiem, ar kuriem varam mijiedarboties, stumjot, sperot utt. Šādi objekti, kas atrodas mūsu ietekmē, turpinās braukt, pārvietoties un sadurties ar citiem objektiem gravitācijas ietekmē.

Kādu lietojumprogrammu mēs varam atrast šai funkcijai?

Piemēram, lai izveidotu automašīnu, papildus Stingrs korpuss mums vajag 4 riteņu paātrinātājs"un un kods (skripts), kas atkarībā no nospiestajiem taustiņiem pieliek spēku uz riteņiem.

Konfigurējamas funkcijas

  • Masa- Mūsu objekta masa kilogramos. Masas vērtības nav ieteicams iestatīt 100 reizes lielākas vai mazākas par citu masu ATT.
  • Velciet- Cik daudz ķermenis ir pakļauts gaisa pretestībai, kad tas pārvietojas spēku ietekmē. Ar vērtību 0 nav pretestības, un bezgalīga vērtība acumirklī apturēs mūsu objektu.
  • Leņķiskā vilkšana- Cik ļoti ķermenis ir pakļauts gaisa pretestībai, kad tas griežas spēku ietekmē. Ar vērtību 0 nav pretestības, un bezgalīga vērtība acumirklī apturēs mūsu objekta rotāciju.
  • Gravitācija- Ieslēdzot objektu, to ietekmē gravitācija.
  • Ir kinemātisks- Ja ir iespējots, objektu neietekmē fizikas dzinējs, un to var mainīt tikai tā funkcija Pārveidot. Tas var būt noderīgi, piemēram, veidojot kustīgas platformas.
  • Interpolēt- Attiecas tikai tad, ja jūsu ATT kustības jums šķiet dīvainas vai neveiklas utt.:
    1. Nav: Interpolācija nav piemērota
    2. interpolēt: Salīdzinot ar iepriekšējā kadra transformāciju ( rāmis), nākamais tiks izlīdzināts.
    3. ekstrapolēt: Pašreizējā kadra transformācija ir izlīdzināta salīdzinājumā ar nākamā kadra aptuveno transformāciju.
  • Iesaldēšanas rotācija- Atspējo jebkuru rotāciju, gan skriptu, gan sadursmi. Tomēr rotāciju var veikt funkcija pārveidot. Rotate()
  • Sadursmes noteikšana- Izmanto, lai novērstu ātri kustīgu objektu izkļūšanu cauri citiem objektiem, neatrodot sadursme"ov" (īpašs "režģis" uz objektiem, ar kuriem tie saskaras savā starpā un ar atskaņotāju).
    1. diskrēts: Mūsu objekta noklusējuma vērtība, lai "pamanītu" visus citus objektus, ar kuriem tas var sadurties.
    2. Nepārtraukts: Izmantot Diskrēta sadursme ar dinamiskas sadursmes objektiem (kuriem ir ATT), a Nepārtraukta sadursme statiskam MeshCollider"ov (bez ATT). Režīms Nepārtraukta dinamiska lietojumiem Nepārtraukta sadursme vienam konkrētam ATT. Atpūta ATT izmantos režīmu Diskrēts. (Tas lielā mērā ietekmēs fizikas dzinēja slodzi, vienkārši atstājiet Diskrēts, ja nav problēmu ar ātru objektu sadursmi)
    3. Nepārtraukta dinamiska: Izmanto objektiem režīmā Nepārtraukta vai Nepārtraukta dinamiska sadursme. Nepārtraukta sadursme tiks izmantots arī statiskam MeshCollider"ov (bez ATT). Visiem pārējiem tiek izmantots režīms Diskrēts. Izmanto ātri kustīgiem objektiem.

Kā mēs varam izmantot šo funkciju?

Pamatzināšanas.

Izmantot ATT, mums ir nepieciešams jau izveidots spēles objekts ( GameObject), noklikšķinot uz tā, mēs pārejam uz izvēlni pa šādu ceļu: Sastāvdaļas – fizika – cietais korpuss . Visi, ATT pievienots! :)
Tagad objekts ir pakļauts gravitācijai, tam var pielikt spēkus, izmantojot skriptus, bet, lai objekts darbotos tieši tā, kā nepieciešams, jāpievieno Collider vai locītavu.

Kods valda pār pasauli.

Skriptā mēs tagad manipulēsim ar savu objektu, izmantojot funkcijas AddForce() un PievienotTorque() .
Kopš esmu iekšā Vienotība pieteikties JavaScript, mani piemēri būs kopā ar to, saites uz citiem skriptu piemēriem (at C# vai Boo) jūs atradīsiet zemāk, rindkopā Papildu informācija par ATT.

» Rigidbody.AddForce

// Rigidbody.AddForce izmanto 2 veidu formulas, tāpat kā daudzas citas funkcijas, kas saistītas ar kustībām telpā. // 1 tips: funkcija AddForce (spēks: Vector3, režīms: ForceMode = ForceMode.Force) : void // Spēks, kas spiež objektu uz augšu, attiecībā pret globālo koordinātu sistēmu. funkcija FixedUpdate () ( rigidbody.AddForce (Vector3.up * 10); ) // Izmantojot Vector3, iebūvētu Unity funkciju, kas būtībā ir tāda pati kā standarta koordinātu sistēma. // 2. veids: funkcija AddForce (x: peldēšana, y: peldēšana, z: peldēšana, režīms: ForceMode = ForceMode.Force) : void // Tas pats, bet izmantots šeit X-Y-Z sistēma koordinātas. funkcija FixedUpdate() ( rigidbody.AddForce(0, 10, 0); )

» Rigidbody.AddTorque

// Funkcija griež objektu ap doto asi. // 1 tips: funkcija AddTorque (griezes moments: Vector3, režīms: ForceMode = ForceMode.Force) : void // Pagriež ATT ap globālo Y asi. funkcija FixedUpdate () ( rigidbody.AddTorque (Vector3.up * 10); ) // 2. tips: funkcija AddTorque (x: float, y: float, z: float, mode: ForceMode = ForceMode.Force) : void // Izdara to pašu, bet atkal citā mērīšanas sistēmā. funkcija FixedUpdate() ( rigidbody.AddTorque(0, 10, 0); )

ATT mijiedarbojas ar objektiem.

Lai mūsu ATT tie ir jāpiegādā Collider"ami (vai sadursme"ami, kā vēlaties ^.^).
Lasiet vairāk par sadursmēm zemāk.

Izmēram ir nozīme!

Ievērojiet sava objekta izmērus, jo tie ir daudz nozīmīgāki vienmērīgā masā ATT. Ja jūsu objekts pārvietojas nepareizi, peld gaisā vai nesaduras, mēģiniet pielāgot tā lielumu (nevis ATT, bet pats objekts). Importējot modeli no 3D redaktora, tā izmēri tiek saglabāti, tāpēc esiet piesardzīgs modelēšanas posmā un ievērojiet visu modeļu izmērus.

Papildinformācija par ATT

Šajā sakarā aprakstiet ATT vai Stingrs korpuss Es droši vien pabeigšu. Tomēr ir pāris padomi, īpaši tiem, kas tik tālu izlasījuši :)

  1. standarta kuba izmērs Vienotība vienāds 1 metrs, tāpēc, izmantojot to, ir ļoti ērti pārbaudīt savu modeļu izmērus. Lai izveidotu kubu, atlasiet izvēlnē GameObject — izveidot citu — kubs
  2. Relatīvais rādītājs Masa nosaka, kā divi objekti mijiedarbosies viens ar otru.
  3. Masa neietekmē krišanas ātrumu no augstuma, izmantojiet šiem nolūkiem Velciet.
  4. Jo augstākas vērtības Velciet jo vairāk priekšmets sver. standarta vērtības atšķiras no 0,001(ciets metāla gabals) līdz 10(spalva).
  5. Ja jums ir nepieciešams modificēt objektu gan ar skriptiem, gan ar fiziku, pievienojiet to ATT ar parametru Kinemātiskais.

Colliders

Kas tas ir?

Iepriekšējā sadaļā mēs apspriedām, kā Stingrs korpuss un minēja t.s sadursmes. Collider mums - palīgobjekts vienkāršas primitīvas vai, otrādi, sarežģītas formas režģa formā, kas atrodas ap mūsu modeli vai modeļa daļu un mijiedarbojas ar citiem objektiem, ja tos ieskauj arī sadursmes.
Lai skaidri izskaidrotu *Warcraft 3* pasaules redaktora ekspertiem, iedomājieties mūsu importēto modeli, kuram dudad redaktorā nepiešķīrām ceļa faktūras - tas būs mūsu objekts; un kolideru lomu šeit spēlēs ceļa ap modeli bloķētāji. Protams, tas ir diezgan aptuvens salīdzinājums, jo in Vienotība tie ir daudz funkcionālāki. Nu, paskatīsimies tuvāk.

Kodinātāju veidi.

Colliders tiek pievienots, izmantojot izvēlni Komponents - fizika . Ir vairāki veidi:

  • Box Collider- kuba formā.
  • Sfēru paātrinātājs- sfēras formā.
  • Kapsulas paātrinātājs- kapsulas formā.
  • Tīkla paātrinātājs- automātiski izveido sadursmi atbilstoši objekta režģa formai, nevar sadurties ar citiem tāda paša tipa sadursmēm. Galvenokārt izmanto statiskiem objektiem, piemēram, sacīkšu trases videi.
  • Riteņu paātrinātājs- izmanto riteņiem, ļoti noderīga lieta.
  • Savienojumu paātrinātājs- primitīvu kombinācijas, kas kopā darbojas kā viens. Lai izveidotu tik sarežģītu sadursmi, jums jāpievieno pakārtotie objekti mūsu bāzes paātrinātājam un jau ar tiem jāsaista primitīvi. Tā, piemēram, ļoti ērti tiek izgatavoti vienkāršie sadursmeņi automašīnām.

Konfigurējamas funkcijas

Principā visi kolaideri ir līdzīgi viens otram, tie tikai tiek izmantoti dažādu formu objektiem, tomēr tiem ir vairāki atšķirīgi parametri.

  • Kubs
    • materiāls- Parāda, kā sadursmes iekārta mijiedarbojas ar citiem objektiem, vienlaikus piešķirot fizisku materiālu, piemēram, metālu, ledu utt.
    • Ir Trigger- Ja parametrs ir iespējots, tad objektu ietekmē skripts, nevis fizika.
    • Izmērs- Kodinātāja izmērs gar X-Y-Z asīm.
    • Centrs- Kodinātāja atrašanās vieta attiecībā pret objekta vietējām koordinātām.
  • Sfēra
    • Rādiuss- Sfēras rādiuss aizstāj parametru Izmērs.
    • Pārējie parametri ir nemainīgi.
  • Kapsula(parametri aizstāj izmēru)
    • Rādiuss- Kapsulas biezums.
    • Augstums- Kolidera cilindriskās daļas augstums (bez noapaļotām pamatnēm).
    • virziens- Kodinātāja virziens attiecībā pret objekta vietējām koordinātām.
  • Tīkla paātrinātājs(parametri aizstāj izmēru)
    • acs- Vēlamā sieta izvēle, lai izveidotu sadursmi.
    • Gludas sfēras sadursmes - Šīs funkcijas iespējošana izlīdzina paātrinātāja virsmu. To vajadzētu izmantot uz gludām virsmām, piemēram, slīpā reljefā bez pārāk liela leņķa, pa kuru sfērām jāripo.
    • Izliekta- Ja tas ir iespējots, ļauj mūsu sadursmītājam sadurties ar citiem sadursmēm. Izliekta sieta paātrinātājs"ir tikai 255 trijstūri.
  • Riteņu paātrinātājs(parametri aizstāj izmēru)
  • Rādiuss- Riteņa rādiuss.
  • Piekares attālums- Maksimālais attālums, lai palielinātu riteņu piekari. Piekare vienmēr palielinās pa vietējo asi Y.
  • Piekares atspere- Balstiekārta mēģina sasniegt norādīto punktu, izmantojot dažādus spēkus.
  1. Spring:// Mēģinājumi sasniegt norādīto punktu (pozīcija). Jo augstāks iestatījums, jo ātrāk tas tiek sasniegts.
  2. Amortizators:// Mīkstina, palēnina piekares ātrumu. Jo lielāka vērtība, jo lēnāk kustas amortizators.
  3. Mērķa pozīcija:// Pilns "ceļš", pa kuru balstiekārta var "pārvietoties". 0 nozīmē pilnībā izstieptu amortizatoru, un 1 - pilnībā saspiests. Noklusējuma vērtība ir 0, kas atbilst parastai automašīnas balstiekārtai.
  • Masa- Riteņa masa.
  • Uz priekšu/sānu berze - Berzes parametri vienkāršai riteņa ripināšanai un ripināšanai uz sāniem (tas notiek slīdēšanas vai dreifēšanas gadījumā).


man patīk +15 - 0

*Unity* ir ļoti jaudīgs, progresīvs dzinējs ar lielu potenciālu. Tam ir daudzas iebūvētas funkcijas (tostarp *NvidiaPhysX* fizikas dzinējs), kuras mums, lietotājiem, nav manuāli jāparaksta. :)
Šajā īsajā rakstā es vēlētos apspriest dzinēja fiziskās iespējas. Tātad, sāksim:

Stingrs korpuss
=
= Kas tas ir? =
Aiz *Rigidbody* funkcijas ir absolūti stingrs korpuss (*ATT*). Aptuveni un saprotami paskaidrojot, *ATT* fizikā un mehānikā ir ideāls stingrs ķermenis, kas spēka ietekmē nevar mainīt savas īpašības, bet var (tā ietekmē) pārvietoties 3 dimensijās (uz leju, uz augšu, uz priekšu utt. .) utt., t.i. mūsu X-Y-Z asīs), kā arī pagriezt 3 dimensijās (atkal pa X-Y-Z asīm).

Programmā *Unity*, kā arī citos spēļu dzinējos (atkal es tos rupji saucu par "spēļu" dzinējiem) *Rigidbody* tiek izmantots dažādiem objektiem, ar kuriem varam mijiedarboties, stumjot, sperot utt. Šādi objekti, kas atrodas mūsu ietekmē, turpinās braukt, pārvietoties un sadurties ar citiem objektiem gravitācijas ietekmē.

Kādu lietojumprogrammu mēs varam atrast šai funkcijai? =
Piemēram, lai izveidotu automašīnu, papildus *Rigidbody* mums ir nepieciešams 4 riteņu paātrinātājs"a un *kods* (*skripts*), kas pieliek spēku riteņiem atkarībā no nospiestajiem taustiņiem.

  • *Masa* — mūsu objekta masa kilogramos. Masas vērtības nav ieteicams iestatīt 100 reizes lielākas vai mazākas par citu *ATT* masu.
  • *Drag* — cik daudz ķermenis ir pakļauts gaisa pretestībai, kad tas pārvietojas spēku ietekmē. Ar vērtību *0* nav pretestības, un bezgalīga vērtība acumirklī apturēs mūsu objektu.
  • Leņķiskā vilkšana- Cik ļoti ķermenis ir pakļauts gaisa pretestībai, kad tas griežas spēku ietekmē. Ar vērtību *0* nav pretestības, un bezgalīga vērtība uzreiz apturēs mūsu objekta rotāciju.
  • Gravitācija- Ieslēdzot objektu, to ietekmē gravitācija.
  • Ir kinemātisks- Ja ir iespējots, objektu neietekmē fizikas dzinējs, un to var mainīt tikai ar tā funkciju *Transformēt*. Tas var būt noderīgi, piemēram, veidojot kustīgas platformas.
  • *Interpolēt* — attiecas tikai tad, ja jūsu ATT kustības jums šķiet dīvainas vai neveiklas utt.:
  1. Nav: Interpolācija nav piemērota
  2. interpolēt: Salīdzinot ar iepriekšējā kadra (*kadra*) transformāciju, nākamais tiks izlīdzināts.
  3. ekstrapolēt: Pašreizējā kadra transformācija ir izlīdzināta salīdzinājumā ar nākamā kadra aptuveno transformāciju.
  • Iesaldēšanas rotācija- Atspējo jebkuru rotāciju, gan skriptu, gan sadursmi. Tomēr rotāciju var veikt funkcija // pārveidot. Rotate()
  • Sadursmes noteikšana- Izmanto, lai novērstu ātri kustīgu objektu izkļūšanu cauri citiem objektiem, neatrodot sadursme"ov" (īpašs "režģis" uz objektiem, ar kuriem tie saskaras savā starpā un ar atskaņotāju).
  1. diskrēts: Mūsu objekta noklusējuma vērtība, lai "pamanītu" visus citus objektus, ar kuriem tas var sadurties.
  2. Nepārtraukts: Izmantot Diskrēta sadursme ar dinamiskas sadursmes objektiem (kuriem ir *ATT*) un Nepārtraukta sadursme statiskam MeshCollider"s (bez * ATT *). Režīms Nepārtraukta dinamiska lietojumiem Nepārtraukta sadursme vienam noteiktam *ATT*. Pārējais *ATT* izmantos _Diskrēto_ režīmu. (Tas ļoti ietekmēs fizikas dzinēja slodzi, vienkārši atstājiet _Diskrētu_, ja ​​nav problēmu ar ātru objektu sadursmi)
  3. Nepārtraukta dinamiska: Izmanto objektiem _Continuous_ režīmā vai Nepārtraukta dinamiska sadursme. Nepārtraukta sadursme tiks izmantots arī statiskam MeshCollider"s (bez * ATT *). Visiem pārējiem tiek izmantots _Diskrēts_ režīms. Izmanto ātri kustīgiem objektiem.

Kā mēs varam izmantot šo funkciju? =
= Pamatzināšanas.
Lai izmantotu *ATT*, mums ir nepieciešams jau izveidots spēles objekts (*GameObject*), noklikšķinot uz tā, mēs ejam uz izvēlni pa šādu ceļu: Sastāvdaļas – fizika – cietais korpuss . Tas arī viss, *ATT* piebilda! :)
Tagad objekts ir pakļauts gravitācijai, tam var pielikt spēkus, izmantojot skriptus, bet, lai objekts darbotos tieši tā, kā nepieciešams, jāpievieno *Collider* vai *Joint*.

Kods valda pār pasauli.
Skriptā mēs tagad manipulēsim ar savu objektu, izmantojot funkcijas AddForce() un PievienotTorque() .
Tā kā *Unity* izmantoju *JavaScript*, mani piemēri būs kopā ar to, saites uz citiem skriptu piemēriem (uz C# vai *Boo*), jūs atradīsit zemāk, rindkopā Papildu informācija par ATT.

Rigidbody.AddForce

// Rigidbody.AddForce izmanto 2 veidu formulas, tāpat kā daudzas citas funkcijas, kas saistītas ar kustībām telpā. // 1 tips: funkcija AddForce (spēks: Vector3, režīms: ForceMode = ForceMode.Force) : void // Spēks, kas spiež objektu uz augšu, attiecībā pret globālo koordinātu sistēmu. funkcija FixedUpdate () ( rigidbody.AddForce (Vector3.up * 10); ) // Izmantojot Vector3, iebūvētu Unity funkciju, kas būtībā ir tāda pati kā standarta koordinātu sistēma. // 2. tips: funkcija AddForce (x: float, y: float, z: float, mode: ForceMode = ForceMode.Force) : void // Tas pats, bet izmanto X-Y-Z koordinātu sistēmu. funkcija FixedUpdate() ( rigidbody.AddForce(0, 10, 0); )

Rigidbody.AddTorque

// Funkcija griež objektu ap doto asi. // 1 tips: funkcija AddTorque (griezes moments: Vector3, režīms: ForceMode = ForceMode.Force) : void // Pagriež ATT ap globālo Y asi. funkcija FixedUpdate () ( rigidbody.AddTorque (Vector3.up * 10); ) // 2. tips: funkcija AddTorque (x: float, y: float, z: float, mode: ForceMode = ForceMode.Force) : void // Izdara to pašu, bet atkal citā mērīšanas sistēmā. funkcija FixedUpdate() ( rigidbody.AddTorque(0, 10, 0); )

ATT mijiedarbojas ar objektiem.
Lai mūsu * ATT * darbotos pareizi, tie ir jāpiegādā Collider"ami (vai sadursme"ami, kā vēlaties ^.^).
Lasiet vairāk par sadursmēm zemāk.


Izmēram ir nozīme!
Ievērojiet sava objekta izmērus, jo tie ir daudz nozīmīgāki par pat *ATT* masām. Ja jūsu objekts pārvietojas nepareizi, peld gaisā vai nesaduras, mēģiniet pielāgot tā lielumu (nevis *ATT*, bet pats objekts). Importējot modeli no 3D redaktora, tā izmēri tiek saglabāti, tāpēc esiet piesardzīgs modelēšanas posmā un ievērojiet visu modeļu izmērus.

Papildu informācija par ATT =
Es, iespējams, pabeigšu, aprakstot *ATT* vai *Rigidbody*. Tomēr ir pāris padomi, īpaši tiem, kas tik tālu izlasījuši :)

  1. Standarta kuba izmērs *Unity* ir 1 metrs, tāpēc, izmantojot to, ir ļoti ērti pārbaudīt savu modeļu izmērus. Lai izveidotu kubu, atlasiet izvēlnē GameObject — izveidot citu — kubs
  2. *Masas* relatīvais eksponents nosaka, kā divi objekti mijiedarbosies viens ar otru.
  3. *Masa* neietekmē krišanas ātrumu no augstuma, šim nolūkam izmantojiet *Velciet*.
  4. Jo augstākas ir *Drag* vērtības, jo lielāks ir vienums. standarta vērtības atšķiras no 0,001(ciets metāla gabals) līdz 10(spalva).
  5. Ja jums ir jāmaina objekts, izmantojot gan skriptus, gan fiziku, pievienojiet tam *ATT* ar parametru *Kinematic*.

Varat skatīt skriptētus piemērus ārējo spēku ietekmei uz objektu, izmantojot funkciju *ATT*, izmantojot šādas saites:
*Pievienot spēku*
*Pievienot griezes momentu*

Lai mainītu skripta piemēru, noklikšķiniet uz teksta ar programmēšanas valodas nosaukumu!

Colliders
=
= Kas tas ir? =
Iepriekšējā sadaļā mēs apskatījām, kā darbojas *Rigidbody*, un pieminējām tā sauktos *colliders*. * Collider * mums ir palīgobjekts vienkāršas primitīvas vai, gluži otrādi, sarežģītas formas režģa formā, kas atrodas ap mūsu modeli vai modeļa daļu un mijiedarbojas ar citiem objektiem, ja tos ieskauj arī sadursmes. .
Lai skaidri izskaidrotu *Warcraft 3* pasaules redaktora ekspertiem, iedomājieties mūsu importēto modeli, kuram dudad redaktorā nepiešķīrām ceļa faktūras - tas būs mūsu objekts; un kolideru lomu šeit spēlēs ceļa ap modeli bloķētāji. Dabiski, ka tas ir diezgan aptuvens salīdzinājums, jo *Vienotībā* tie ir daudz funkcionālāki. Nu, paskatīsimies tuvāk.

Kodinātāju veidi. =
Colliders tiek pievienots, izmantojot izvēlni Komponents - fizika . Ir vairāki veidi:

  • Box Collider- kuba formā.
  • Sfēru paātrinātājs- sfēras formā.
  • Kapsulas paātrinātājs- kapsulas formā.
  • Tīkla paātrinātājs- automātiski izveido sadursmi atbilstoši objekta režģa formai, nevar sadurties ar citiem tāda paša tipa sadursmēm. Galvenokārt izmanto statiskiem objektiem, piemēram, sacīkšu trases videi.
  • Riteņu paātrinātājs- izmanto riteņiem, ļoti noderīga lieta.
  • Savienojumu paātrinātājs- primitīvu kombinācijas, kas kopā darbojas kā viens. Lai izveidotu tik sarežģītu sadursmi, jums jāpievieno pakārtotie objekti mūsu bāzes paātrinātājam un jau ar tiem jāsaista primitīvi. Tā, piemēram, ļoti ērti tiek izgatavoti vienkāršie sadursmeņi automašīnām.


Pielāgotas specifikācijas =
Principā visi kolaideri ir līdzīgi viens otram, tie tikai tiek izmantoti dažādu formu objektiem, tomēr tiem ir vairāki atšķirīgi parametri.

  • *Kubs*

* *Materiāls* — parāda, kā sadursme mijiedarbojas ar citiem objektiem, vienlaikus piešķirot fizisku materiālu, piemēram, metālu, ledu utt.
* Ir Trigger- Ja parametrs ir iespējots, tad objektu ietekmē skripts, nevis fizika.
* *Izmērs* — paātrinātāja izmērs gar X-Y-Z asīm.
* *Centrs* — paātrinātāja pozīcija attiecībā pret objekta vietējām koordinātām.

  • *Sfēra*

* *Rādiuss* — sfēras rādiuss, aizstāj parametru *Izmērs*.
* Pārējie parametri nemainīgi.

  • *Kapsula* (parametri aizstāj izmēru)

* *Rādiuss* - kapsulas biezums.
* *Augstums* — Collider cilindriskās daļas augstums (bez noapaļotām pamatnēm).
* *Virziens* — sadursmnieka virziens attiecībā pret objekta lokālajām koordinātām.


  • Tīkla paātrinātājs(parametri aizstāj izmēru)

* *Mesh* — atlasiet vajadzīgo sietu, lai izveidotu sadursmi.
* Gludas sfēras sadursmes - Šīs funkcijas iespējošana izlīdzina paātrinātāja virsmu. To vajadzētu izmantot uz gludām virsmām, piemēram, slīpā reljefā bez pārāk liela leņķa, pa kuru sfērām jāripo.
* *Izliekts* — ja ir iespējots, ļauj mūsu sadursmītājam sadurties ar citiem sadursmēm. Izliekta sieta paātrinātājs"ir tikai 255 trijstūri.

  • Riteņu paātrinātājs(parametri aizstāj izmēru)

* *Rādiuss* — riteņa rādiuss.
* Piekares attālums- Maksimālais attālums, lai palielinātu riteņu piekari. Apturēšana vienmēr palielinās pa vietējo *Y* asi.
* Piekares atspere- Balstiekārta mēģina sasniegt norādīto punktu, izmantojot dažādus spēkus.

  1. Pavasaris: Mēģinājumi sasniegt norādīto punktu (pozīcija). Jo augstāks iestatījums, jo ātrāk tas tiek sasniegts.
  2. Amortizators: Mīkstina, palēnina balstiekārtas ātrumu. Jo lielāka vērtība, jo lēnāk kustas amortizators.
  3. Mērķa pozīcija: kopējais "ceļš", pa kuru balstiekārta var "nobraukt". *0* nozīmē pilnībā izstieptu un *1* pilnībā saspiestu. Noklusējuma vērtība ir 0, kas atbilst parastai automašīnas balstiekārtai.

* *Masa* — riteņa masa.
* Uz priekšu/sānu berze - Berzes parametri vienkāršai riteņa ripināšanai un ripināšanai uz sāniem (tas notiek slīdēšanas vai dreifēšanas gadījumā).

Skatīts: 734


Mans dīvainais radošais ceļš mani ieveda spēļu izstrādē. Pateicoties lieliskajai studentu programmai no IT uzņēmuma, kura nosaukums sastāv no viena maza grieķu burta, sadarbojoties ar mūsu augstskolu, mums izdevās nokomplektēt komandu, radīt dokumentāciju un izveidot Agile spēļu izstrādi augstas klases uzraudzībā. Kvalitātes nodrošināšanas inženiere (sveicināta, Anna!)

Ilgi nedomājot, par dzinēju tika izvēlēta Vienotība. Tas ir brīnišķīgs dzinējs, ar kuru jūs varat patiešām ātri un viegli izgatavot ļoti slikta spēle ko, pie pilna prāta, neviens nekad nespēlēs. Radīt laba spēle, jums joprojām ir jāšķūrē dokumentācija, jāiedziļinās dažās funkcijās un jāiegūst izstrādes pieredze.

Mūsu spēlē tika izmantots fizikas dzinējs neparedzētā veidā, kas radīja daudz veiktspējas problēmu mobilajās platformās. Šajā rakstā, izmantojot mūsu spēles piemēru, ir aprakstīta mana cīņa ar fizikas dzinēju un visas tā darba iezīmes, kas tika pamanītas ceļā uz dzīvotspējīgu beta versiju.

Spēle

Daži vārdi par to, kā tas ir izgatavots.
Izgatavots ar Blender un pāris python skriptiem. Uzņemšanas brīdī ekrāna stūrī bija 16 kvadrāti, kuru krāsā bija kodēti 32 peldošā komata skaitļa biti - tālruņa griešanās noteiktā brīdī. R, G - dati, B - paritāte. 0 - 0, 255 - 1. Datorā uzņemtais video tika sadalīts kadros, izmantojot ffmpeg, katram renderēšanas kadram tika piešķirts dekodēts leņķis. Šis formāts ļāva pārdzīvot jebkuru saspiešanu uzņemšanas procesā un pārvarēja faktu, ka visām programmām ir nedaudz atšķirīgi priekšstati par laika ritējumu. Patiesībā spēle tiek spēlēta tāpat kā renderēšanā.


Lidmašīna lido cauri bezgalīgai un neparedzamai alai, kurā ir bonusi, visdažādākās monētas un ienaidnieki, kurus varat izšaut ar raķetēm. Ietriecās sienā - uzreiz zaudēja.
Spēles īpatnība ir tā, ka līmenis ir pienaglots pie horizonta un vadība tajā ir žiroskopiska, turklāt absolūta. Noliec telefonu par 45 grādiem – lidmašīna lidoja 45 grādu leņķī. Jāizveido beigta cilpa – jāpagriež planšete. Nav jūtīguma, ir tikai hardcore.
Izcelsim divas galvenās un acīmredzamās izstrādātāja problēmas:
1. problēma: bezgalība
Unity saglabā un apstrādā objektu koordinātas kā parastus 32 bitu pludiņus ar precizitāti līdz 6 zīmēm aiz komata. Problēma ir tā, ka mums ir bezgalīga spēle, un, ja mēs lidosim pietiekami ilgi, sāksies visādas ārprātīgas kļūdas, līdz pat teleportācijai caur sienām. Šīs problēmas risināšanai ir vairākas pieejas:
  • Ignorēšana. Piemēram, programmā Minecraft noapaļošanas kļūdas tikai padarīja spēli interesantāku, radot nārstu.

  • Teleportācija uz (0;0;0), kad lidmašīna atrodas pārāk tālu no sākuma.

  • Atskaites punkta maiņa. Kustas nevis lidmašīna, bet līmenis ap to.
  • Mūsu gadījumā vienīgais pieņemamais variants ir trešais, kas tika realizēts. Par ieviešanu - nedaudz vēlāk.
    Pirmā – ignorēšana – ir absolūti nepieņemama. Izveidot robotu, kas var spēlēt mūsu spēli mūžīgi, ir interesants (un diezgan vienkāršs) uzdevums, ko kāds atrisinās. Un parastos korejiešu spēlētājus nevajadzētu novērtēt par zemu - lidmašīna ir ātra, līmenis tiek ģenerēts neparedzami. Un, ja jūs lidojat un lidojat, pirms iziet cauri sienām, daudz precīzāka šaušana acīmredzami sāks kļūt pēc 5 minūšu lidojuma.
    Otrā – spēlētāja un visas pasaules teleportācija – noliek mobilās ierīces uz ceļiem, dažos gadījumos – uz aptuveni pussekundi. Tas ir ļoti pamanāmi, un tāpēc - nepieņemami. Bet šī ir pilnīgi pieņemama iespēja vienkāršām bezgalīgām datorspēlēm.

    2. problēma: līmeņa ģenerēšana

    Pastāv vairākas pamata pieejas bezgalīgu skrējēju veidošanai:
  • Izmantojot gatavus līmeņa segmentus, kas atbilst nejauši. Tas tiek darīts, piemēram, Subway Surfers. To ir viegli īstenot, taču spēlētājs ātri pierod un zina, kam gatavoties, kas ir garlaicīgi.

  • Līmenis ir tikai taisna līnija, uz kuras nejauši tiek novietoti šķēršļi. Šādi tas tiek darīts Joypack Joyride un Temple Run. Mūsu gadījumā tas ievērojami ierobežotu manevru skaitu.

  • Viss tiek ģenerēts nejauši. Spēlētājam visgrūtākais, neparedzamākais un interesantākais variants.
  • Protams, mēs izvēlējāmies grūtāko variantu. Tās pamatā ir ļoti sarežģīta stāvokļa mašīna, kas veic nejaušas pārejas uz tiem. Bet šī raksta ietvaros interesants ir nevis mehānisms, bet gan līmeņa ģenerēšanas process un tā organizācija, ņemot vērā izvēlēto sākumpunktu.

    Līmeņa struktūra

    Mēs lidojam alā, tai ir grīda un griesti - pāris bloki, elementāras ēkas vienības. Bloki tiek apvienoti segmentos, kas nemanāmi savienojas viens ar otru. Segmenti kopumā rotē ap lidmašīnu un pārvietojas pa tā ātruma vektoru, radot lidojuma ilūziju. Ja segments atstāj kameras redzes lauku, tas tiek attīrīts no blokiem, piestiprināts līdz pēdējam līmeņa segmentam un piepildīts ar jauniem blokiem saskaņā ar ģeneratora norādījumiem. Šādu segmentu kopums ir līmenis.
    Pieredzējušie Vienotības izstrādātāji varēja pamatoti raustīties, aplēsuši darba apjomu un visas iespējamās nepilnības. Bet vārdos viss ir vienkārši, bet man nebija attīstības pieredzes ...

    Fizikas pamatlikumi vienotībā

    Mēneša izstrādes, eksperimentēšanas un dokumentācijas lasīšanas laikā esmu identificējis trīs fizikas pamatlikumus Unity. Tos var pārkāpt, bet pārkāpuma cena ir produktivitāte. Dzinējs nekādā veidā nebrīdinās jūs par kļūdu, un bez profilētāja jūs par tām nekad neuzzināsit. Šo likumu neievērošana var palēnināt jūsu spēli desmitos vienreiz. Kā es saprotu, jebkura likuma pārkāpums noved pie tā, ka fizikas dzinējs atzīmē pārkāpuma paātrinātāju kā nepareizu un atjauno to uz objekta, kam seko fizikas pārrēķins:
    1. Colliders nedrīkst kustēties, griezties, ieslēgt/izslēgt un mainīt izmērus.
    Kad esat pievienojis objektam sadursmju, aizmirstiet par jebkādu ietekmi uz to vai tajā esošajiem objektiem. Parasts paātrinātājs ir tikai statisks objekts. Koks, piemēram, var būt ar vienu sadursmi. Ja koks var uzkrist spēlētājam - koks nokritīs līdz ar sniegumu. Ja šis koks izaug no maģiska barības vielu mākoņa, kuram nav sadursmes, bet kurš var kustēties, to pavadīs veiktspējas kritums.
    2. Ja objekts kustas vai griežas - tam jābūt cietam ķermenim t.i. ir cietā korpusa sastāvdaļa.
    Par to ir rakstīts dokumentācijā, jā. Kas nav obligāti jālasa pārdomāti, lai sāktu veidot spēli, jo Unity ir ļoti vienkārša un intuitīva.
    Rigidbody maina fizikas dzinēja attiecības ar objektu. Uz to sāk darboties ārējie spēki, tam var būt lineāri un leņķiskie ātrumi, un pats galvenais, stingrs ķermenis var kustēties un griezties ar fizikas dzinēja palīdzību, neizraisot pilnīgu fizikas pārrēķinu.
    Ir divu veidu cietās vielas - parastās un kinemātiskās. Parastie ķermeņi mijiedarbojas savā starpā un ar parastajiem sadursmēm – viens ķermenis nevar iziet cauri citam. Kinemātiskie ķermeņi ievēro vienkāršotus simulācijas noteikumus – tos neietekmē nekādi ārējie spēki, tostarp gravitācija. Viņi var brīvi iet cauri jebkam.
    Ja nav žēl nodot priekšmetus fiziskā dzinēja kontrolē - izmantojiet parastos cietos korpusus. Piemēram, ja vajag skaisti novelt akmeņus no klints. Ja jūsu skripti vai animatori kontrolē objektu tieši - izmantojiet kinemātiskos ķermeņus, lai jums nebūtu pastāvīgi jārisina dzinēja un nejaušu objektu sadursmes. Piemēram, ja jums ir animācijas varonis vai vadāma raķete, kas eksplodē, saskaroties ar kaut ko.
    3. Ja objekts ir stingrs ķermenis, tam jāpārvietojas un jāgriežas, izmantojot cietā ķermeņa metodes.
    Aizmirstiet par tiešu Transform izsaukšanu objektam tūlīt pēc tam, kad tam ir pievienots sadursmes līdzeklis. No šī brīža un uz visiem laikiem Transform ir jūsu ienaidnieks un veiktspējas slepkava. Pirms rakstāt transform.position = ... vai transform.eulerAngles = ..., sakiet frāzi "Es tagad pilnīgi skaidri saprotu, ko daru, esmu apmierināts ar bremzēm, ko radīs šī līnija." Neaizmirstiet par hierarhiskām attiecībām: ja pēkšņi pārvietojat objektu, kurā ir stingri ķermeņi, fizika tiks pārrēķināts.
    Ir trīs stingras ķermeņa kontroles līmeņi:
    – Augstākais un līdz ar to dabiskais līmenis ir caur spēkiem. Tās ir AddForce un AddTorque metodes. Fizikas dzinējs ņems vērā ķermeņa masu un pareizi aprēķinās iegūto ātrumu. Visas ķermeņu mijiedarbības notiek šajā līmenī.
    - Vidējais līmenis - ātrumu maiņa. Tās ir ātruma un leņķiskās ātruma īpašības. Pamatojoties uz tiem, tiek aprēķināti spēki, kas ietekmē ķermeņus to mijiedarbības laikā, kā arī, acīmredzot, to pozīcijas nākamajā laika brīdī. Ja stingrai virsbūvei ir ļoti mazs ātrums, tas “aizmieg”, lai taupītu resursus.
    - Zemākais līmenis - tieši objekta koordinātas un tā orientācija telpā. Šīs ir metodes MovePosition un MoveRotation. Nākamajā fizikas aprēķina atkārtojumā (tas ir svarīgi, jo katrs nākamais metodes izsaukums vienā kadrā aizstāj iepriekšējā izsaukumu), viņi teleportē objektu uz jaunu pozīciju, pēc kura tas dzīvo tāpat kā iepriekš. Mūsu spēlē tiek izmantots šis līmenis un tikai tas, jo tas nodrošina pilnīgu kontroli pār objektu.

    Kas paliek aiz muguras? Ieslēdziet/izslēdziet objektu un tuviniet. Es nezinu, vai ir veids, kā mainīt objekta izmēru, nesajaucot dzinēju. Pilnīgi iespējams, ka nē. Objekta izslēgšana ir nesāpīga, bet ieslēgšana... jā, izraisa fizikas pārrēķinu ieslēgtā objekta tuvumā. Tāpēc mēģiniet neiekļaut pārāk daudz objektu vienlaikus, izstiepiet šo procesu laikus, lai lietotājs to nepamana.

    Ir likums, kas neietekmē veiktspēju, bet ietekmē veiktspēju: stingrs ķermenis nevar būt daļa no stingra ķermeņa. Vecāku objekts dominēs, tāpēc bērns vai nu stāvēs uz vietas attiecībā pret vecāku, vai arī uzvedīsies neprognozējami un nepareizi.

    Ir vēl viena ar fiziku nesaistīta Unity funkcija, kuru ir vērts pieminēt: dinamiska objektu izveide un dzēšana, izmantojot Instantiate/Istroy metodes, ir TRAKTI lēna. Bail pat iedomāties, kas notiek zem pārsega objekta tapšanas laikā. Ja vajag kaut ko izveidot un dzēst dinamiski – izmantojiet rūpnīcas un spēles ielādes laikā piepildiet tās ar nepieciešamajiem objektiem. Instantiate būtu jāizsauc kā pēdējais līdzeklis – ja rūpnīcā pēkšņi pietrūkst brīvo objektu, un aizmirst par Destroy uz visiem laikiem – viss radītais ir jāizmanto atkārtoti.

    Likumu piemērošana praksē

    (šajā sadaļā ir ietverta spriešanas gaita, veidojot spēli un tās funkcijas)

    Līmenim acīmredzot ir jāgriežas un jāpārvietojas.
    Atvieglināsim savu dzīvi uz visiem laikiem, novietojot līmeņa – lidmašīnas – rotācijas asi koordinātu sākumpunktā. Tagad mēs varam aprēķināt attālumu no punkta līdz tam, aprēķinot punkta koordinātu vektora garumu. Sīkums, bet jauki.
    Objektu kooperatīvā kustība ir viegli īstenojama caur objektu hierarhiju Vienotībā, jo bērni ir daļa no vecākiem. Piemēram, aprakstītā līmeņa struktūra tiek loģiski realizēta šādi:
    - Rotācijas ass
    -- Līmenis
    --- 1. segments
    - - - - 1. bloks (sadursme)
    - - - - ...
    - - - - N bloks
    -- 2. segments...
    --- 3. segments...
    --- 4. segments...
    (Jūs pat varat iztikt bez līmeņa objekta)

    Skripts uz ass saņem datus no žiroskopa un nosaka tam atbilstošu leņķi... Un tas uzreiz pārkāpj daudzus noteikumus, jo rotācija pa hierarhiju tiks pārnesta uz sadursmēm, kas padarīs fizikas dzinēju traku. Jums būs jāpadara ass par stingru korpusu un jāpagriež, izmantojot atbilstošo metodi. Bet kā ar kustību līmeni? Acīmredzot rotācijas ass un līmeņa objekts nekustēsies, katrs segments ir jāpārvieto atsevišķi, pretējā gadījumā mēs saskaramies ar bezgalības problēmu. Tas nozīmē, ka segmentiem jābūt stingriem korpusiem. Bet mums jau ir stingrs ķermenis, kas atrodas augstāk hierarhijā, un stingrs ķermenis nevar būt daļa no stingra ķermeņa. Loģiska un eleganta hierarhija neder, viss būs jādara ar roku - gan rotācija, gan tulkošana, neizmantojot rotācijas asij objektu. Esiet tam gatavs, ja jums ir unikālas spēles funkcijas.

    Ja segmenti jebkurā gadījumā būtu jāpārvieto tieši, tie būs jāpagriež. Galvenā grūtība ir tā, ka Unity fizikas dzinējā nav metodes “pagriezt objektu ap patvaļīgu punktu” (transformācijai tā ir, taču neļaujieties kārdinājumam). Ir tikai "pagriezt ap tā centru". Tas ir loģiski, jo rotācija ap patvaļīgu asi vienlaikus ir gan rotācija, gan kustība, un tās ir divas dažādas darbības. Bet to var atdarināt. Vispirms mēs pagriežam segmentu ap savu asi, pēc tam ap lidmašīnu pagriežam “savas ass” koordinātas. Tā kā mums lidmašīna ir izcelsmē, nav pat jāatceras skolas ģeometrija un jāiet uz Vikipēdiju, Unity jau viss ir. Pietiek pārvērst griešanās leņķi ceturtdaļā un reizināt ar punkta koordinātām. Starp citu, es par to uzzināju tieši raksta tapšanas laikā, pirms tam tika izmantota rotācijas matrica.

    Mums ir ienaidnieki, kas iegrūž lidmašīnu sienā, cerot nogalināt. Ir vairogs, kas atgrūž lidmašīnu no sienām, palīdzot izdzīvot. Tas tiek realizēts triviāli – ir nobīdes vektors, kas katrā kadrā tiek pievienots katra segmenta koordinātām un pēc tam atiestatīts. Ikviens, kurš vēlas spert lidmašīnu, izmantojot īpašu metodi, var atstāt viņa sitiena vektoru, kas tiks pievienots šim pārvietojuma vektoram.

    Galu galā segmenta, katra kadra, reālās koordinātas aprēķina līmeņa kustības vadības centrs, apmēram šādi:
    Vector3 pozīcija = segment.CachedRigidbody.position; Vector3 deltaPos = Time.deltaTime * Vector3.left * iestatījumi. Ātrums; segment.truePosition = Quaternion.Euler(0, 0, deltaAngle) * (pozīcija + deltaPos + kustībaNobīde);
    Pēc visiem aprēķiniem un kruķiem, kas nepieciešami darbam ar precīzu segmentu dokošanu reģenerācijas laikā, segment.truePosition tiek nosūtīts uz segmenta cietā korpusa metodi MovePosition.

    secinājumus

    Cik ātri tas viss darbojas? Vecajos flagmaņos — Nexus 5 un LG G2 — spēle lido ar ātrumu 60 kadri sekundē ar tikko pamanāmu samazināšanos, kad segmenta ģenerēšanas laikā tiek iekļauti jauni kolīderi (tas ir neizbēgami, un no tā nekādā veidā nevar izvairīties) un izstumjot tārpus no zeme (var sakraut kaut kādu elli, lai to apietu, bet tagad ir apzināti pārkāpts trešais likums). 40 stabili FPS izdod jebkuru ierīci ar žiroskopu, ar kuru mēs sastapāmies. Nezinot un neņemot vērā visus likumus, sniegums bija, maigi izsakoties, neapmierinošs un telefoni pārkarsa. Tik daudz, ka es domāju uzrakstīt savu vienkāršo specializēto dzinēju 2D fizikas vajadzībām. Par laimi, fizika Vienotībā izrādījās pietiekami elastīga, lai visas problēmas varētu apiet un radīt unikāla spēle, pietika tikai ar pāris nedēļu eksperimentiem.

    Tagad, zinot visas galvenās Unity fizikas dzinēja nepilnības, jūs varat ātri klonēt mūsu spēli, iznīcinot trīs nabadzīgo studentu sapņus, dzīves un ticību cilvēcei. Es ceru, ka šis raksts ietaupīs jums daudz laika nākotnē un palīdzēs jūsu projektos atrast ne visai acīmredzamus produktīvās fizikas likumu pārkāpumus.

    Izlasiet dokumentāciju un eksperimentējiet, pat ja izmantojat vienkāršus un intuitīvus rīkus.



    Atbalsti projektu - dalies ar saiti, paldies!
    Izlasi arī
    gaiļu cīņas spēles noteikumi gaiļu cīņas spēles noteikumi Mod for minecraft 1.7 10 skatīties receptes.  Receptes priekšmetu izgatavošanai Minecraft.  Ieroči Minecraft Mod for minecraft 1.7 10 skatīties receptes. Receptes priekšmetu izgatavošanai Minecraft. Ieroči Minecraft Šiliņš un sterliņu mārciņa - vārdu izcelsme Šiliņš un sterliņu mārciņa - vārdu izcelsme