Ota osumien tunnistus käyttöön ruutukarttojen avulla

Sivu päivitetty :
Sivun luontipäivämäärä :

Varmennusympäristö

Windows
  • Windows 11
Unity-editori
  • 2021.3.3F1
Syöttöjärjestelmän paketti
  • 1.3.0

Tämän vinkin edellytykset

Seuraavat asetukset on tehty etukäteen tämän vinkin kuvauksen lähtökohtana.

Mitkä ovat tämän vinkin edellytykset?

Kartta-aineistojen lainaamisesta

Käsittelemme lainattuja seuraavilta sivustoilta.

Kävelymerkkien toteutus

Ota ensin käyttöön kartta ja merkki, joka suorittaa osumien havaitsemisen. Tätä merkkiä voidaan siirtää näppäimistön nuolinäppäimillä. Jos kuitenkin toteutat oikean kävelyn, se on pitkä ja kaukana kirjavinkkien ytimestä, joten tällä kertaa siirrän vain yksinkertaisen yhden kuvan.

Jos haluat toteuttaa kävelyanimaatioita, katso seuraavat vinkit:

Kun olet luonut projektin, lisää sprite-kuva objektista, jonka haluat siirtää projektiin.

Valitse kuva ja aseta inspektorin Pikseliä yksikköä kohti -asetukseksi 32. Tämä johtuu siitä, että karttasirun yhden neliön koko on 32 pikseliä, joten se sopii siihen. Kun olet määrittänyt, napsauta alla olevaa Käytä-painiketta.

Aseta hahmo näkymään.

Luo skripti spriten siirtämistä varten. Tämä on samanlainen kuin seuraavat vinkit:

Jätä komentosarjan nimeksi Player .

Koodi seuraavasti:

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

Kiinnitä spriteen, jonka haluat siirtää.

Suorita peli ja tarkista, haluatko siirtää sitä näppäimistöllä.

Karttavihjeiden valmistelu

Ensinnäkin valmistelemme karttasirun ja luomme kartan. Tämä menettely on samanlainen kuin seuraavat vinkit: Karttavihjeet, joissa on 2D Tilemap Extras, pystyvät myös havaitsemaan törmäykset, mutta niitä ei käytetä tässä artikkelissa, koska menettely on pitkä.

Valmistele karttavihjeen alkuperäinen kuva ja lisää se projektiisi. Jotta toiminta olisi helpompi ymmärtää, valmistele karttasirumateriaalille "kävelykelpoinen paikka" ja "ei-käveltävä paikka".

Aseta se MapChipsille inspektorissa ja napsauta Käytä-painiketta. Kun määritys on tehty, avaa Sprite-editori.

Se on 32 pikselin karttavihje, joten jaan sen 32: een.

Valitse Ruutupaletti-välilehti. Jos ei, näytä se valikosta "Ikkuna > 2D -> laattapaletti". Luo uusi paletti. Nimi on mielivaltainen, mutta toistaiseksi kutsumme sitä "MapChipPalette".

Luo MapChipPalette-kansio Scenesissä ja määritä se.

Lisää karttavihje vetämällä se palettiin. Tallenna se aiemmin luomaasi MapChipPalette-kansioon.

Luo kartta

Tällä kertaa karttaosumatuomio suoritetaan "Tilemapin" yksiköissä. Siksi luomme kaksi laattakarttaa, "Tilemap ilman osumien havaitsemista" ja "Tilemap osuman tunnistuksella".

Luo ensin hierarkiaan kaksi ruutukarttaa. Voit luoda kaksi ruudukkoon. Nimet ovat selkeyden vuoksi "TilemapObeject" ja "TilemapGround".

Luo ensin "TilemapGround". Koska se on liikkuva alue, voit yksinkertaisesti asettaa maan. Jos se on maassa, voit muuttaa kuviota.

Muuten, jos merkki on piilotettu, valitse merkkiobjekti ja aseta tarkastajan Sprite Renderer kerrosjärjestys arvoon 2. Tasojen järjestys on oletusarvoisesti 0 ja Tilemap on 0, joten jos nostat sitä tämän arvon yläpuolelle, se näkyy etualalla.

Valitse sitten TilemapObject ja aseta karttavihje, jonka haluat tehdä liikkumattomaksi. Aseta ensin tasojärjestykseksi 1. Tämän tarkoituksena on saada se näkymään maan edessä.

Tältä se näyttää, jos piilotat maan.

Tässä vaiheessa ei tietenkään ole törmäystunnistukseen liittyviä asetuksia, joten voit ajaa korkealla maalla normaalisti. Tämän jälkeen asetamme törmäystunnistuksen.

Törmäystunnistuksen asetukset

Ensin määritetään merkki. Tämä asetus on melkein sama kuin alla olevat vinkit, joten ohitan yksityiskohdat ja selitän lyhyesti menettelyn.

Valitse merkkiobjekti hierarkiasta ja valitse Lisää komponentti -kohdasta Physics 2D -> Circle Collider 2D. Jos objektin muoto on suorakaiteen muotoinen, "Box Collider 2D" on hieno.

Lisää vastaavasti "Physics 2D -> Rigidbody 2D".

Aseta painovoima-asteikko arvoon 0 automaattisen putoamisen estämiseksi Rigidbody 2D .

Valitse Rajoitukset -kohdasta Z, jotta sprite ei pyöri törmäyksen aikana.

Valitse seuraavaksi "TilemapObject", jonka haluat lyödä, ja valitse "Lisää komponentti" -kohdasta "Tilemap -> Tilemap Collider 2D".

Siinä kaikki. Et tarvitse edes ohjelmointia. Suorita peli ja yritä osua esineeseen, josta tulee seinä. Mielestäni voit varmistaa, että se pysähtyy kunnolla.

Kuitenkin, kun todella osut siihen, luulen, että käyttäytymisessä on huolenaiheita. Tässä muutamia ratkaisuja:

Osuman havaitsemisen hankala käyttäytyminen kartalla ja ratkaisuilla

Kun törmäät seinään, saatat löytää muutamia asioita, jotka häiritsevät sinua.

Jos liikut seinää vasten, jäät keskelle

Box Collider 2D Uskon, että se tapahtuu, jos käytät esinettä.

Esimerkiksi alla olevasta näkymästä, kun painat vasemmassa alakulmassa olevaa näppäintä, haluat sen liikkuvan vasemmalle seinää pitkin. Jonkin edistymisen jälkeen luulen kuitenkin, että se juuttuu johonkin ja pysähtyy.

Tunnista seinien kolhut sijainnin mukaan

Circle Collider 2D Mielestäni se on helppo ymmärtää, jos liität . Seinän tulee olla tasainen, mutta jos siirrät sitä seinää vasten, huomaat, että seinä liikkuu ikään kuin se olisi epätasainen.

Syyt ja ratkaisut hankaluuksiin ja kolhuihin

Syy siihen, miksi näitä tapahtuu, näyttää olevan se, että "osumien määritys suoritetaan mapchip-pohjalta". Itse asiassa, kun valitset TilemapObject, osuman tunnistuksen sijaintipaikkaan ilmestyy vihreä viiva, ja näet, että tämä on MapTip-yksiköissä piirretty viiva.

Joten jos liikkuva kohde on täsmälleen yhtä karttasirua vastaavalla viivalla, se arvioidaan osumaksi yhdellä karttasirulla. Jos törmäät karttasirujen rajalla, kaksi karttamerkkiä osuu ja arvioidaan, joten pompun voimakkuus kasvaa.

Mielestäni paras tapa ratkaista tämä ongelma on yhdistää osuman tunnistus liitteenä oleviin karttasiruihin. Voit tehdä sen seuraavasti:

ValitseTilemap Collider 2D "TilemapObject" osuman tunnistuksella tarkastajalta ja tarkista "Käytä komposiitissa" kohdasta .

Kuten varoituksessa todetaan, tällä ei yksinään ole vaikutusta, joten valitse "Lisää komponentti" -kohdasta "Physics 2D -> Composite Collider 2D".

Rigidbody 2D lisätään yhdessä Composite Collider 2D: n kanssa.

Se on hieman hämmentävää, mutta mielestäni voit vahvistaa, että vihreä viiva osuman tunnistuksen sisältävien karttasirujen rajalla on kadonnut.

En halua ruutukartan liikkuvan, joten jätän Rigidbody 2D komponentin runkotyypin "staattiseksi".

Suorita nyt peli ja yritä saada se liikkeelle. Uskon, että vaikka liikkuisit vinosti seinää pitkin, se ei jää kiinni ja voit liikkua sujuvasti ilman kuoppaista liikettä.

Poista merkkien työntäminen takaisin seinistä

Voit nähdä, että jos siirrät hahmoa työntääksesi seinää ja lopetat sitten liikkumisen, se käyttäytyy vähän kuin pomppasi takaisin seinältä.

Voit ratkaista tämänRigidbody 2D valitsemalla merkkiobjektin ja muuttamalla komponentista "Törmäystunnistus" -asetukseksi "Jatkuva".

Ero "epäjatkuvan" ja "jatkuvan" välillä on seuraava.

Epäjatkuva

Törmäystunnistus on mekanismi, joka ajattelee liikkumisen jälkeen. Se on muoto, joka suorittaa törmäystunnistuksen tilasta, jossa sitä siirretään ja upotetaan seinään. Se on helppo ymmärtää, jos yhdistät sen trampoliineihin ja kumiin, mutta mitä enemmän se on upotettu, sitä vastenmielisempi voima kasvaa ja pomppiminen on voimakkaampaa. Sen sijaan laskenta suoritetaan muuton jälkeen, joten käsittelykustannukset ovat alhaiset.

Jatkuva

Se käsitellään määritettäessä, mikä on matkalla. Selvitä, onko sijainnin välillä seinä ennen muuttoa ja sen jälkeen, Jos seinä on, se arvioi törmäyksen siellä ja pysähtyy, joten käytännössä ei ole hylkimistä. Sen sijaan käsittelykustannukset kasvavat hieman, koska laskelma sisältyy liikkeen keskelle.

Kiinni karttakohteen kulmassa

Ohjelmasta ja sijainnista riippuen jotkut jäävät kiinni ja jotkut eivät, eikä syy ole muuttunut paljon. Muuten, se tapahtuu kulmikkailla kulmilla, kuten Box Collider 2D, eikä pyöristetyillä ympyröillä.

Vaikka tällainen salaperäinen ilmiö tapahtuisi, on hyvä, että törmäyttimen kulmat ovat pyöristetyt naarmujen välttämiseksi. Se on rajoitettu Box Collider 2D:hen, mutta jotta se olisi pyöreä, hahmo-objektin Box Collider 2D -komponentilla on "reunasäde" ja laitat arvon sinne. Jos kirjoitat numeroyksikkönä 1, objektin koko pyöristetään. Se riippuu koosta, mutta on hyvä laittaa noin 0,1.

Muuten, osumatuomio kasvaa vain pyöreyden koon mukaan, joten säädä sitä, jos se on suuri. Box Collider 2D:ssä on Collider Edit -painike, jonka avulla voit muuttaa sen kokoa suoraan näkymässä napsauttamalla painiketta. Koska ulompi vihreä viiva on todellinen osuman tunnistus, aseta koko niin, että se ei ole luonnoton.

Suorita sen jälkeen peli varmistaaksesi, että se ei naarmuunnu, ja tee säätöjä.