Käytä tätä tekniikkaa parantaaksesi vihollisen liikettä ja käyttäytymistä jäljittelemällä perusnäkemystä.

Näköetäisyyden tunnistus lisää peliisi monimutkaisuutta mekanismilla, jonka avulla hahmot tai esineet havaitsevat ympäristönsä. Voit käyttää tätä ominaisuutta vihollisen tekoälykäyttäytymiseen, pelaajien näkyvyysmekaniikkaan, salakavalaan pelaamiseen ja muuhun.

Godotissa RayCast2D-solmu tarjoaa yksinkertaisen ja tehokkaan tavan saavuttaa näköetäisyyden havaitseminen.

Godot-pelin perustaminen

Ennen kuin sukellat RayCast2D-solmuihin, määritä perus 2D-peliympäristö Godot 4:ssä. Luo pelaaja merkki, joka voi liikkua näppäimistön avulla ja olla vuorovaikutuksessa alustojen kanssa.

Luo ensin kohtaus pelaajahahmolle. Lisää CharacterBody2D solmu kohtauksen juurena. Sisällä CharacterBody2D, lisää CollisionShape2D suorakaiteen muotoinen ja a Sprite2D hahmon visuaalista esitystä varten.

Tässä artikkelissa käytetty koodi on saatavilla tässä GitHub-arkisto ja sen käyttö on ilmaista MIT-lisenssin alaisena.

Tässä on GDScript-koodi pelaajaliikkeelle:

extends CharacterBody2D

var speed = 300

func _physics_process(delta):
var input_dir = Vector2.ZERO

if Input.is_action_pressed("ui_left"):
input_dir.x -= 1

if Input.is_action_pressed("ui_right"):
input_dir.x += 1

if Input.is_action_pressed("ui_up"):
input_dir.y -= 1

if Input.is_action_pressed("ui_down"):
input_dir.y += 1

velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)

Luo nyt joitain alustoja, joiden kanssa pelaaja voi olla vuorovaikutuksessa. Voit käyttää StaticBody2D solmut sopivalla törmäysmuodolla edustamaan alustoja. Järjestä ne kohtaukseen luodaksesi tasohyppelyympäristön.

RayCast2D: n määrittäminen

Voit luoda näkökentän tunnistuksen käyttämällä RayCast2D solmu. Näin voit lisätä a RayCast2D solmu GDScriptillä:

var raycast: RayCast2D

func _ready():
raycast = RayCast2D.new()
add_child(raycast)

Varmista, että liität tämän skriptin CharacterBody2D solmu. Tämä koodinpätkä luo uuden RayCast2D solmu ja liittää sen lapsena pelaajahahmoon.

Visuaalisen palautteen antaminen näköyhteysvuorovaikutuksesta

Nyt voit tulostaa viestin aina, kun pelaajan näkökenttä leikkaa alustan. Heitä säde pelaajan asennosta liikkeen suuntaan. Jos säde törmää johonkin esineeseen, pelaajalla on näköyhteys tasolle.

Lisää seuraava koodi samaan skriptiin:

func _physics_process(delta):
#... (previous movement code)

raycast.target_position = Vector2(100, 0)

if raycast.is_colliding():
print("Collided with platform!")

Tässä tulos:

RayCast2D: n toiminnallisuuden laajentaminen

On monia edistyneitä ominaisuuksia, joiden avulla voit parantaa pelisi interaktiivisuutta ja monimutkaisuutta merkittävästi.

get_collider()

Käyttämällä get_collider() -menetelmällä voit käyttää ensimmäistä objektia, jonka säteen leikkaa. Metodi palauttaa nollan, jos mikään objekti ei ole säteen polulla. Tämä on erityisen hyödyllistä tunnistaaksesi tietyn kohteen, johon soittimellasi on näköyhteys.

if raycast.is_colliding():
var collided_object = raycast.get_collider()

if collided_object:
print("You can see:", collided_object.name)

get_collider_rid()

The get_collider_rid() menetelmä voi kertoa sinulle ensimmäisen leikatun objektin resurssitunnuksen (RID):

if raycast.is_colliding():
var collider_rid = raycast.get_collider_rid()

if !collider_rid.is_valid():
print("No valid object RID")
else:
print("Object RID:", collider_rid)

get_collider_shape()

The get_collider_shape() funktio palauttaa ensimmäisen leikatun objektin muototunnuksen tai 0:n, jos törmäystä ei tapahdu.

if raycast.is_colliding():
var collider_shape = raycast.get_collider_shape()

if collider_shape == 0:
print("No valid shape ID")
else:
print("Shape ID:", collider_shape)

get_collision_normal()

Ymmärtääksesi vuorovaikutusta paremmin, get_collision_normal() antaa sinulle muodon normaalin törmäyspisteessä. Tapauksissa, joissa säde alkaa muodon ja osuma_sisältä on totta, normaali palautus on Vektori2(0, 0).

if raycast.is_colliding():
var collision_normal = raycast.get_collision_normal()
print("Collision Normal:", collision_normal)

get_collision_point()

Kun säde leikkaa kohteen, get_collision_point() palauttaa tarkan törmäyspisteen globaaleina koordinaatteina.

if raycast.is_colliding():
var collision_point = raycast.get_collision_point()
print("Collision Point:", collision_point)

Käyttämällä näitä edistyneitä ominaisuuksia RayCast2D solmu, voit saada kriittisiä näkemyksiä säteen ja törmäävien objektien välisistä vuorovaikutuksista.

Nämä menetelmät antavat sinulle mahdollisuuden kerätä olennaisia ​​tietoja, jotka voivat vaikuttaa merkittävästi pelimekaniikkaan, objektien vuorovaikutukseen ja pelaajien palautteeseen.

Sisältää lisäominaisuuksia

Ydinnäkyvyyden tunnistustoiminnon lisäksi voit parantaa pelisi dynamiikkaa ottamalla käyttöön joitain edistyneitä ominaisuuksia.

Tapahtuman triggerit

Pelkän viestin tulostamisen sijaan voit käynnistää tiettyjä pelin sisäisiä tapahtumia. Esimerkiksi piilotettujen polkujen paljastaminen, mekanismien aktivoiminen tai vihollisten varoittaminen pelaajan läsnäolosta voivat lisätä peliisi syvyyttä.

Dynaaminen esteiden käsittely

Harkitse skenaarioita, joissa esteet voivat estää näköyhteyden. Dynaamisen esteentunnistuksen käyttöönotto varmistaa, että näkökenttä päivittyy reaaliajassa, kun esineet liikkuvat sisään ja ulos pelaajan näkyvistä.

Mukautetut visuaaliset ilmaisimet

Sen sijaan, että luottaisit pelkästään tekstiin, voit luoda mukautettuja visuaalisia osoittimia korostaaksesi näköyhteyttä. Tämä voi sisältää soittimen tai objektin värin muuttamisen, kuvakkeen näyttämisen tai olennaisten elementtien animointi.

Sotamekaniikan sumu

Strategia- tai tutkimuspainotteisissa peleissä voit esitellä sotamekaniikan sumua. Tämä rajoittaa pelaajan näkemystä, kunnes hän muodostaa näkökentän, paljastaen pelimaailman asteittain ja rohkaisee strategiseen päätöksentekoon.

Parhaat käytännöt näkölinjan havaitsemiseen

Näkyvyyden havaitsemisen optimointi on ratkaisevan tärkeää sujuvan pelikokemuksen ylläpitämiseksi. Tässä on joitain parhaita käytäntöjä, jotka kannattaa pitää mielessä.

Raycast-taajuus

Vältä raycastien suorittamista jokaisessa ruudussa, jos se ei ole välttämätöntä. Harkitse näkökentän tarkistamista vain silloin, kun pelaajan asema tai ympäristö muuttuu merkittävästi. Tämä auttaa vähentämään tarpeettomia laskelmia.

Säteen pituus

Tasaa raycastin pituus. Erittäin pitkät säteet voivat vaikuttaa suorituskykyyn, joten valitse pituus, joka kattaa tarvittavan alueen pitäen samalla laskennallisen kuormituksen kurissa.

Törmäyskerrokset

Käytä törmäyskerroksia ja maskeja hienosäätämään, mitkä kohteet näkölinjan tunnistus ottaa huomioon. Tämä estää tarpeettomat raycastit epäolennaisiin objekteihin.

Välimuistin tulokset

Jos suoritat saman näkölinjan tunnistusta useille kohteille tai kehyksille, harkitse tulosten tallentamista välimuistiin tarpeettomien laskelmien välttämiseksi.

Tasohyppelytason integrointi

Kohdista näkökentän tunnistusmekaniikkasi tasosuunnittelun kanssa tasohyppelypelisi. Ota huomioon ympäristön pystysuuntaisuus, erilaiset laiturikorkeudet ja mahdolliset esteet, jotka voivat haitata näköyhteyttä.

Varmista, että tunnistusjärjestelmäsi ottaa huomioon nämä vivahteet luodaksesi saumattoman ja intuitiivisen pelaajakokemuksen.

Tee Godot-peleistä kiinnostavampia näköetäisyyden havaitsemisen avulla

Näkyvyyden tunnistus lisää pelimaailmaasi syvyyttä ja realistisuutta. Pelaajat voivat strategoida, piilottaa tai lähestyä haasteita eri tavalla näkölinjansa perusteella. Tämä mekaniikka voi muuttaa yksinkertaisen tasohyppelyn mukaansatempaavammaksi kokemukseksi, mikä tekee pelaamisesta kiinnostavamman ja mieleenpainuvamman.