Trāpījumu noteikšanas ieviešana, izmantojot mozaīkas kartes

Lapa atjaunota :
Lapas izveides datums :

Verifikācijas vide

Windows
  • Operētājsistēmā Windows 11
Vienotības redaktors
  • 2021.3.3f1
Ievades sistēmas pakete
  • 1.3.0

Priekšnoteikumi šim padomam

Tālāk norādītie iestatījumi ir veikti iepriekš kā priekšnoteikums šī padoma aprakstam.

Kādi ir šī padoma priekšnoteikumi?

Par aizņemšanos kartes materiāli

Mēs apstrādājam aizņemtos no šādām vietnēm.

Pastaigu rakstzīmju īstenošana

Pirmkārt, ieviesiet karti un rakstzīmi, kas veic trāpījumu noteikšanu. Šo rakstzīmi var pārvietot ar kursora taustiņiem uz tastatūras. Tomēr, ja jūs īstenosiet pareizu pastaigu, tas būs garš un tālu no grāmatas padomu būtības, tāpēc šoreiz es pārvietošu tikai vienkāršu vienu attēlu.

Ja vēlaties ieviest pastaigu animācijas, skatiet šādus padomus:

Kad esat izveidojis projektu, pievienojiet tā objekta sprite attēlu, kuru vēlaties pārvietot uz projektu.

Atlasiet attēlu un no inspektora iestatiet vienības pikseļus uz 32. Tas ir tāpēc, ka viena kartes mikroshēmas kvadrāta izmērs ir 32 pikseļi, tāpēc tas atbilst tam. Pēc konfigurēšanas noklikšķiniet uz zemāk esošās pogas "Lietot".

Novietojiet sprite skatā.

Izveidojiet skriptu, lai pārvietotu sprite. Tas ir līdzīgs šādiem padomiem:

Atstājiet skripta nosaukumu Player kā .

Kods šāds:

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
  // 一定時間ごとに呼ばれます
  void FixedUpdate()
  {
    // キーボードの情報を取得
    var keyboard = Keyboard.current;

    // スプライトの移動処理
    if (keyboard.leftArrowKey.isPressed)
    {
      transform.Translate(-0.1f, 0, 0, Space.World);
    }
    if (keyboard.rightArrowKey.isPressed)
    {
      transform.Translate(0.1f, 0, 0, Space.World);
    }
    if (keyboard.upArrowKey.isPressed)
    {
      transform.Translate(0, 0.1f, 0, Space.World);
    }
    if (keyboard.downArrowKey.isPressed)
    {
      transform.Translate(0, -0.1f, 0, Space.World);
    }
  }
}

Pievienojiet spritei, kuru vēlaties pārvietot.

Palaidiet spēli un pārbaudiet, vai vēlaties to pārvietot ar tastatūru.

Kartes padomu sagatavošana

Pirmkārt, mēs sagatavosim karti un izveidosim karti. Šī procedūra ir līdzīga šādiem padomiem: Kartes padomi ar 2D Tilemap Extras spēj arī noteikt sadursmes, taču tie netiks izmantoti šajā rakstā, jo procedūra būs ilga.

Sagatavojiet kartes padoma sākotnējo attēlu un pievienojiet to savam projektam. Lai padarītu darbību vieglāk saprotamu, lūdzu, sagatavojiet kartes mikroshēmas materiālam "staigājamu vietu" un "neizstaigājamu vietu".

Inspektorā iestatiet to MapChips un noklikšķiniet uz pogas Lietot. Pēc konfigurēšanas atveriet Sprite redaktoru.

Tas ir 32 pikseļu kartes tips, tāpēc es to sadalīšu 32.

Atlasiet cilni Mozaīkas elementu palete. Ja nē, izvēlnē parādiet to ar "Window > 2D -> Flīžu palete". Izveidojiet jaunu paleti. Nosaukums ir patvaļīgs, bet tagad mēs to sauksim par "MapChipPalette".

Izveidojiet mapi MapChipPalette ainās un norādiet to.

Pievienojiet kartes padomu, velkot to uz paleti. Saglabājiet to iepriekš izveidotajā mapē MapChipPalette.

Kartes izveide

Šoreiz kartes trāpījums tiks veikts "Tilemap" vienībās. Tāpēc mēs izveidosim divas Tilemaps, "Tilemap bez trāpījumu noteikšanas" un "Tilemap ar trāpījumu noteikšanu".

Vispirms hierarhijā izveidojiet divas mozaīkas kartes. Režģī varat izveidot divus. Skaidrības labad nosaukumi ir "TilemapObeject" un "TilemapGround".

Vispirms izveidojiet "TilemapGround". Tā kā tas ir pārvietojams diapazons, jūs varat vienkārši novietot zemi. Ja tas atrodas uz zemes, varat mainīt modeli.

Starp citu, ja rakstzīme ir paslēpta, atlasiet rakstzīmju objektu un iestatiet inspektora slāņu Sprite Renderer secību uz 2. Slāņu secība pēc noklusējuma ir 0, un flīžu karte ir 0, tādēļ, ja to palielināsit virs šīs vērtības, tā tiks parādīta priekšplānā.

Pēc tam atlasiet TilemapObject un novietojiet kartes padomu, kuru vēlaties padarīt nekustīgu. Vispirms iestatiet slāņu secību uz 1. Tas ir, lai tas parādītos zemes priekšā.

Tas izskatās tā, kā tas izskatās, ja jūs slēpjat zemi.

Protams, šajā brīdī nav iestatījumu, kas saistīti ar sadursmes noteikšanu, tāpēc jūs varat normāli braukt pa augstu zemi. Pēc tam mēs iestatīsim sadursmes noteikšanu.

Sadursmes noteikšanas iestatījumi

Vispirms iestatīsim rakstzīmi. Šis iestatījums ir gandrīz tāds pats kā tālāk sniegtie padomi, tāpēc es izlaidīšu detaļas un īsi izskaidrošu procedūru.

Hierarhijā atlasiet rakstzīmju objektu un sadaļā Pievienot komponentu atlasiet Fizika 2D -> Circle Collider 2D. Ja objekta forma ir taisnstūrveida, "Box Collider 2D" ir labi.

Līdzīgi pievienojiet "Fizika 2D -> Rigidbody 2D".

Iestatiet gravitācijas skalu uz 0, lai novērstu Rigidbody 2D automātisku krišanu.

Pārbaudiet Z sadaļā Ierobežojumi, lai novērstu sprite rotāciju, saduroties.

Pēc tam atlasiet "TilemapObject", kuru vēlaties nospiest, un sadaļā "Pievienot komponentu" atlasiet "Tilemap -> Tilemap Collider 2D".

Tas ir viss, kas tam ir. Jums pat nav nepieciešama nekāda programmēšana. Palaidiet spēli un mēģiniet trāpīt objektā, kas kļūst par sienu. Es domāju, ka jūs varat pārliecināties, ka tas apstājas pareizi.

Tomēr, kad jūs to reāli trāpīsiet, es domāju, ka uzvedībā būs bažas. Šeit ir daži risinājumi:

Neērta trāpījumu noteikšanas uzvedība ar karti un risinājumiem

Kad jūs atsitaties pret sienu, jūs varat atrast dažas lietas, kas jūs uztrauc.

Ja jūs pārvietojaties pret sienu, jūs nokļūsiet vidū

Box Collider 2D Es domāju, ka tas notiks, ja jūs izmantojat objektu.

Piemēram, no zemāk redzamās ainas, nospiežot taustiņu apakšējā kreisajā stūrī, vēlaties, lai tas pārvietotos pa kreisi gar sienu. Tomēr pēc zināma progresa, es domāju, ka tas kaut ko iestrēgs un apstāsies.

Atpazīstiet iespiedumus sienās pēc stāvokļa

Circle Collider 2D Es domāju, ka tas ir viegli saprotams, ja jūs pievienojat . Sienai jābūt plakanai, bet, ja jūs to pārvietojat pret sienu, jūs redzēsiet, ka siena pārvietojas tā, it kā tā būtu nevienmērīga.

Cēloņi un risinājumi snags un izciļņiem

Iemesls, kāpēc tie notiek, šķiet, ir tas, ka "trāpījuma noteikšana tiek veikta, pamatojoties uz mapchip". Faktiski, izvēloties TilemapObject, vietā, kur atrodas trāpījumu noteikšana, parādās zaļa līnija, un jūs varat redzēt, ka šī ir līnija, kas novilkta MapTip vienībās.

Tātad, ja kustīgais objekts atrodas uz līnijas, kas ir līdzvērtīga tieši vienai kartes mikroshēmai, tas tiks vērtēts kā trāpījums ar vienu kartes mikroshēmu. Ja jūs saduraties ar kartes mikroshēmu robežu, divas kartes mikroshēmas tiks trāpītas un vērtētas, tāpēc atlēciena stiprums palielināsies.

Es domāju, ka labākais veids, kā atrisināt šo problēmu, ir apvienot trāpījumu noteikšanu ar pievienotajām kartēm. Lūk, kā to izdarīt:

IzvēlietiesTilemap Collider 2D "TilemapObject" ar trāpījumu noteikšanu no inspektora un pārbaudiet "Lietot kompozītmateriālā" no .

Kā norādīts brīdinājumā, tam vien nav nekādas ietekmes, tāpēc sadaļā "Pievienot komponentu" atlasiet "Physics 2D -> Composite Collider 2D".

Rigidbody 2D tiek pievienots kopā ar Composite Collider 2D.

Tas ir nedaudz mulsinoši, bet es domāju, ka jūs varat apstiprināt, ka zaļā līnija uz robežas starp mapchips ar trāpījumu noteikšanu ir pazudusi.

Es nevēlos, lai flīžu karte pārvietotos, tāpēc es atstāšu Rigidbody 2D komponentu korpusa tipu kā "statisku".

Tagad palaidiet spēli un mēģiniet to pārvietot. Es domāju, ka pat tad, ja jūs pārvietojaties pa diagonāli gar sienu, tas netiks noķerts, un jūs varat vienmērīgi pārvietoties bez bedrainas kustības.

Novērst rakstzīmju atgrūšanu no sienām

Jūs varat redzēt, ka, ja jūs pārvietojat varoni, lai virzītu sienu un pēc tam pārtrauktu kustību, tas uzvedīsies nedaudz kā atlēkts no sienas.

Lai to atrisinātu,Rigidbody 2D atlasiet rakstzīmju objektu un no komponenta mainiet "Sadursmes noteikšana" uz "Nepārtraukts".

Atšķirība starp "nepārtrauktu" un "nepārtrauktu" ir šāda.

Pārtrauktu

Sadursmes noteikšana ir mehānisms, kas domā pēc pārvietošanās. Tā ir forma, kas veic sadursmes noteikšanu no stāvokļa, kurā tā tiek pārvietota un iestrādāta sienā. Ir viegli saprast, ja jūs to saistāt ar batutiem un gumiju, bet jo vairāk tas ir iestrādāts, jo atbaidošāks spēks palielināsies, un atlēciens būs spēcīgāks. Tā vietā aprēķins tiek veikts pēc pārvietošanas, tāpēc apstrādes izmaksas ir zemas.

Nepārtrauktu

Tas tiek apstrādāts, nosakot, kas ir ceļā. Nosakiet, vai starp pozīciju pirms un pēc kustības ir siena, Ja ir siena, tā spriedīs par sadursmi un apstāsies, tāpēc atgrūšanas praktiski nav. Tā vietā apstrādes izmaksas nedaudz palielinās, jo aprēķins ir iekļauts kustības vidū.

Noķerts kartes objekta stūrī

Atkarībā no programmas un atrašanās vietas daži tiek nozvejoti un daži nav, un cēlonis nav daudz mainījies. Starp citu, tas notiek ar leņķiskiem stūriem, piemēram, Box Collider 2D, nevis ar noapaļotiem apļiem.

Pat ja notiek šāda noslēpumaina parādība, ir labi, ja ir noapaļoti sadursmes stūri, lai izvairītos no aizķeršanās. Tas attiecas tikai uz Box Collider 2D, bet, lai to padarītu apaļu, rakstzīmju objekta Box Collider 2D komponentam ir "malas rādiuss", un jūs tur ievietojat vērtību. Ja ievadāt 1 kā skaitlisku vienību, objekta lielumam tiks veikta noapaļošana. Tas ir atkarīgs no izmēra, bet ir labi ievietot apmēram 0,1.

Starp citu, trāpījuma spriedums palielinās tikai par apaļuma lielumu, tāpēc, lūdzu, pielāgojiet to, ja tas ir liels. Box Collider 2D ir Collider Edit poga, kas ļauj mainīt tā izmērus tieši skatā, noklikšķinot uz pogas. Tā kā ārējā zaļā līnija ir faktiskā trāpījuma noteikšana, iestatiet izmēru tā, lai tas nebūtu nedabisks.

Pēc tam palaidiet spēli, lai pārliecinātos, ka tā netiek saskrāpēta, un veiciet korekcijas.