Tabamuse tuvastamise rakendamine paanikaartidega

Lehekülg uuendatud :
Lehe loomise kuupäev :

Kontrollimise keskkond

Windows
  • Windows 11
Ühtsuse toimetaja
  • 2021.3.3f1
Sisendsüsteemi pakett
  • 1.3.0

Selle näpunäite eeltingimused

Selle vihje kirjeldamise eelduseks on eelnevalt tehtud järgmised sätted.

Millised on selle näpunäite eeldused?

Kaardimaterjalide laenamisest

Töötleme laenatud järgmistelt saitidelt.

Kõndimismärkide rakendamine

Esiteks rakendage kaart ja märk, mis teostab tabamuse tuvastamist. Seda märki saab liigutada klaviatuuri kursoriklahvidega. Kui aga rakendate korralikku jalutuskäiku, on see pikk ja kaugel raamatu näpunäidete olemusest, nii et seekord liigutan ainult lihtsat ühte pilti.

Kui soovite rakendada kõndimisanimatsioone, vaadake järgmisi näpunäiteid:

Pärast projekti loomist lisage spraitpilt objektist, mida soovite projekti teisaldada.

Valige pilt ja seadke inspektorilt pikslid ühiku kohta väärtuseks 32. Seda seetõttu, et kaardikiibi ühe ruudu suurus on 32 pikslit, nii et see sobib sellega. Kui see on konfigureeritud, klõpsake allpool olevat nuppu "Rakenda".

Asetage sprait vaatesse.

Looge spraidi teisaldamiseks skript. See on sarnane järgmiste nõuandetega:

Jätke skripti nimeks Player .

Kood järgmine:

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);
    }
  }
}

Kinnitage sprait, mida soovite liigutada.

Käivitage mäng ja kontrollige, kas soovite seda klaviatuuriga liigutada.

MapTipsi ettevalmistamine

Kõigepealt valmistame ette kaardikiibi ja loome kaardi. See protseduur sarnaneb järgmiste nõuandetega: 2D Tilemap Extrasiga maptips on samuti võimeline kokkupõrget tuvastama, kuid neid selles artiklis ei kasutata, kuna protseduur on pikk.

Valmistage ette MapTipi originaalpilt ja lisage see oma projekti. Toimingu arusaadavamaks muutmiseks valmistage kaardikiibi materjali jaoks ette "kõnditav koht" ja "mittekäidav koht".

Seadistage see inspektoris MapChipsi jaoks ja klõpsake nuppu Rakenda. Pärast konfigureerimist avage Sprite'i redaktor.

See on 32-piksline kaardispikker, nii et jagan selle 32-ga.

Valige vahekaart Paanipalett. Kui ei, siis kuvage see menüüst "Window > 2D -> Tile Palette". Looge uus palett. Nimi on meelevaldne, kuid praegu nimetame seda "MapChipPalette".

Looge stseenides kaust MapChipPalette ja määrake see.

Lisage kohtspikker, lohistades selle paletti. Salvestage see varem loodud kausta MapChipPalette.

Kaardi loomine

Seekord sooritatakse kaardi tabamuse otsus "Tilemap" ühikutes. Seetõttu loome kaks Tilemapsi: "Tilemap ilma tabamuse tuvastamiseta" ja "Tilemap koos tabamuse tuvastamisega".

Esmalt looge hierarhias kaks paanikaarti. Saate ruudustikus luua kaks. Nimed on selguse huvides "TilemapObeject" ja "TilemapGround".

Esmalt looge "TilemapGround". Kuna see on liikuv vahemik, saate lihtsalt maapinda panna. Kui see on maapinnal, saate mustrit muuta.

Muide, kui märk on peidetud, valige märgiobjekt ja seadke inspektori kihiline järjekord Sprite Renderer väärtuseks 2. Kihtide järjekord on vaikimisi 0 ja Tilemap on 0, nii et kui suurendate seda üle selle väärtuse, kuvatakse see esiplaanil.

Seejärel valige TilemapObject ja asetage kaardispikker, mille soovite liikumatuks muuta. Seadke kihi järjestus kõigepealt väärtusele 1. Seda selleks, et see ilmuks maapinna ette.

See näeb välja, kui peidate maapinda.

Loomulikult pole sel hetkel kokkupõrke tuvastamisega seotud seadeid, nii et saate normaalselt kõrgel maapinnal sõita. Pärast seda määrame kokkupõrke tuvastamise.

Kokkupõrke tuvastamise seaded

Esiteks seadistame tegelase. See säte on peaaegu sama, mis allpool toodud näpunäited, nii et ma jätan üksikasjad vahele ja selgitan lühidalt protseduuri.

Valige hierarhiast märgiobjekt ja valige jaotisest Lisa komponent väärtus Physics 2D -> Circle Collider 2D. Kui objekti kuju on ristkülikukujuline, on "Box Collider 2D" hea.

Samamoodi lisage "Physics 2D -> Rigidbody 2D".

Automaatse kukkumise vältimiseks Rigidbody 2D seadke gravitatsiooniskaala väärtusele 0.

Kontrollige piirangutest punkti Z, et vältida spraidi pöörlemist kokkupõrkel.

Järgmisena valige "TilemapObject", mida soovite lüüa, ja valige "Lisa komponent" hulgast "Tilemap -> Tilemap Collider 2D".

See on kõik, mis seal on. Te ei vaja isegi programmeerimist. Käivitage mäng ja proovige tabada objekti, mis muutub seinaks. Ma arvan, et saate veenduda, et see peatub korralikult.

Kuid kui te seda tegelikult tabate, arvan, et käitumises on murekohti. Siin on mõned lahendused:

Tabamuse tuvastamise ebamugav käitumine kaardi ja lahendustega

Kui lööte seina, võite leida mõned asjad, mis teid häirivad.

Kui liigute vastu seina, jääte keskele kinni

Box Collider 2D Ma arvan, et see juhtub, kui kasutate objekti.

Näiteks allolevast stseenist, kui vajutate vasakus alanurgas olevat klahvi, soovite, et see liiguks mööda seina vasakule. Kuid pärast mõningaid edusamme arvan, et see takerdub millessegi ja peatub.

Tuvastage seintes olevad mõlgid positsiooni järgi

Circle Collider 2D Ma arvan, et seda on lihtne mõista, kui lisate . Sein peaks olema tasane, kuid kui liigutate seda seina vastu, näete, et sein liigub nii, nagu oleks see ebaühtlane.

Põhjused ja lahendused nuudlitele ja muhke

Põhjus, miks need juhtuvad, näib olevat see, et "tabamuse määramine toimub kaardikiibi alusel". Tegelikult, kui valite TilemapObjecti, ilmub tabamuse tuvastamise kohale roheline joon ja näete, et see on joon, mis on joonistatud MapTipi ühikutes.

Seega, kui liikuv objekt asub joonel, mis on võrdne täpselt ühe kaardikiibiga, hinnatakse seda ühe kaardikiibiga tabamusena. Kui põrkate kokku kaardikiipide piiril, lüüakse ja hinnatakse kahte kaardikiipi, nii et põrke tugevus suureneb.

Ma arvan, et parim viis selle probleemi lahendamiseks on kombineerida tabamuse tuvastamine lisatud kaardikiipidega. Siin on, kuidas seda teha:

ValigeTilemap Collider 2D inspektorilt tabamuse tuvastamisega "TilemapObject" ja kontrollige nuppu "Kasuta komposiidis" alates .

Nagu hoiatuses öeldud, pole sellel üksi mingit mõju, seega valige "Lisa komponent" hulgast "Physics 2D -> Composite Collider 2D".

Rigidbody 2D lisatakse koos Composite Collider 2D-ga.

See on veidi segane, kuid ma arvan, et võite kinnitada, et roheline joon tabamuse tuvastamisega kaardikiipide vahelisel piiril on kadunud.

Ma ei taha, et paanikaart liiguks, seega jätan Rigidbody 2D komponendi kehatüübi "staatiliseks".

Nüüd käivitage mäng ja proovige see liikuma saada. Ma arvan, et isegi kui liigute diagonaalselt mööda seina, ei jää see kinni ja saate sujuvalt liikuda ilma konarliku liikumiseta.

Kõrvalda iseloom surub seintelt tagasi

Näete, et kui liigutate tegelast seina lükkamiseks ja seejärel lõpetate liikumise, käitub see veidi nagu seinast tagasi põrganud.

SelleRigidbody 2D lahendamiseks valige märgiobjekt ja muutke komponendist "Kokkupõrke tuvastamine" väärtuseks "Pidev".

Erinevus "katkendliku" ja "pideva" vahel on järgmine.

Katkendlik

Kokkupõrke tuvastamine on mehhanism, mis mõtleb pärast liikumist. See on vorm, mis teostab kokkupõrke tuvastamist olekust, kus seda liigutatakse ja seina sisse pannakse. Seda on lihtne mõista, kui seostate seda batuutide ja kummiga, kuid mida rohkem see on kinnitatud, seda tõrjuvam jõud suureneb ja põrge on tugevam. Selle asemel tehakse arvutus pärast kolimist, nii et töötlemiskulud on madalad.

Pidev

Seda töödeldakse, määrates kindlaks, mis on teel. Tehke kindlaks, kas positsiooni vahel on sein enne ja pärast liikumist, Kui on olemas sein, hindab see seal kokkupõrget ja peatub, nii et tõrjumist praktiliselt ei toimu. Selle asemel suurenevad töötlemiskulud veidi, kuna arvutus sisaldub liikumise keskel.

Püütud kaardiobjekti nurka

Sõltuvalt programmist ja asukohast on mõned püütud ja mõned mitte ning põhjus pole palju muutunud. Muide, see juhtub nurkadega nagu Box Collider 2D, mitte ümarate ringidega.

Isegi kui selline salapärane nähtus ilmneb, on hea, kui kollektoril on ümarad nurgad, et vältida lööke. See on piiratud Box Collider 2D-ga, kuid selle ümardamiseks on märgiobjekti Box Collider 2D komponendil "serva raadius" ja panete sinna väärtuse. Kui sisestate numbrilise ühikuna 1, toimub objekti suuruse ümardamine. See sõltub suurusest, kuid on hea panna umbes 0,1.

Muide, tabamusotsus suureneb ainult ümmarguse suuruse võrra, nii et palun kohandage seda, kui see on suur. Box Collider 2D-l on Collider Edit nupp, mis võimaldab teil selle suurust otse vaates muuta, klõpsates nuppu. Kuna välimine roheline joon on tegelik tabamuse tuvastamine, määrake suurus nii, et see ei oleks ebaloomulik.

Pärast seda käivitage mäng, et veenduda, et see ei kriimustaks, ja tehke muudatusi.