Користите ову технику да побољшате кретање и понашање непријатеља опонашањем основне визије.

Детекција линије видљивости додаје слој сложености вашој игри помоћу механизма који омогућава ликовима или објектима да перципирају своју околину. Ову функцију можете да користите за понашање непријатељске вештачке интелигенције, механику видљивости играча, прикривену игру и још много тога.

У Годоту, РаиЦаст2Д чвор нуди једноставан и ефикасан начин да се постигне детекција линије вида.

Подешавање игре Годо

Пре него што уђете у РаиЦаст2Д чворове, подесите основно окружење 2Д игре у Годот 4. Направите играча знак који се може кретати помоћу уноса са тастатуре и интеракцију са платформама.

Прво направите сцену за лик играча. Додајте а ЦхарацтерБоди2Д чвор као корен сцене. Унутар ЦхарацтерБоди2Д, додати а ЦоллисионСхапе2Д са обликом правоугаоника и а Сприте2Д за визуелну представу лика.

Код који се користи у овом чланку доступан је у овом ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

Ево ГДСцрипт кода за кретање играча:

instagram viewer
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)

Сада направите неке платформе са којима ће играч комуницирати. Можете користити СтатицБоди2Д чворови са одговарајућим облицима колизије који представљају платформе. Распоредите их у сцени да бисте створили платформско окружење.

Подешавање РаиЦаст2Д

Да бисте креирали детекцију линије видљивости, користите РаиЦаст2Д чвор. Ево како можете да додате а РаиЦаст2Д чвор који користи ГДСцрипт:

var raycast: RayCast2D

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

Обавезно приложите ову скрипту ЦхарацтерБоди2Д чвор. Овај исечак кода креира нови РаиЦаст2Д чвор и причвршћује га као дете за лик играча.

Пружање визуелних повратних информација о интеракцији са видном линијом

Сада можете да одштампате поруку кад год се линија вида играча укрсти са платформом. Баците зрак са позиције играча у правцу кретања. Ако се зрак судари са објектом, то значи да играч има линију вида до платформе.

Додајте следећи код у исту скрипту:

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

raycast.target_position = Vector2(100, 0)

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

Ево излаза:

Проширивање РаиЦаст2Д функционалности

Постоји много напредних функција које можете користити да значајно побољшате интерактивност и сложеност ваше игре.

гет_цоллидер()

Помоћу гет_цоллидер() методом, можете приступити првом објекту пресеченом зраком. Метод враћа нулл ако ниједан објекат није на путањи зрака. Ово је посебно корисно за идентификацију одређеног објекта на који ваш играч има видну линију.

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

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

гет_цоллидер_рид()

Тхе гет_цоллидер_рид() метода може да вам каже ИД ресурса (РИД) првог пресеченог објекта:

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)

гет_цоллидер_схапе()

Тхе гет_цоллидер_схапе() функција враћа ИД облика првог пресеченог објекта, или 0 ако не дође до колизије.

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)

гет_цоллисион_нормал()

Да бисте боље разумели интеракцију, гет_цоллисион_нормал() даје вам нормалу облика у тачки судара. У случајевима када зрак почиње унутар облика и хит_фром_инсиде је истина, нормална враћена ће бити Вецтор2(0, 0).

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

гет_цоллисион_поинт()

Када зрак пресече објекат, гет_цоллисион_поинт() враћа тачну тачку судара у глобалним координатама.

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

Користећи ове напредне могућности РаиЦаст2Д чвор, можете стећи критичан увид у интеракције између зрака и сударајућих објеката.

Ове методе вам омогућавају да прикупите битне информације које могу значајно утицати на механику играња, интеракције објеката и повратне информације играча.

Укључујући додатне функције

Поред основне функције детекције линије вида, можете додатно побољшати динамику своје игре имплементацијом неких напредних функција.

Покретачи догађаја

Уместо да само штампате поруку, можете покренути одређене догађаје у игри. На пример, откривање скривених стаза, активирање механизама или упозорење непријатеља на присуство играча може додати дубину вашем игрању.

Динамичко руковање препрекама

Размотрите сценарије у којима препреке могу ометати линију вида. Примена динамичке детекције препрека обезбеђује да се линија вида ажурира у реалном времену како се објекти померају и излазе из видокруга играча.

Прилагођени визуелни индикатори

Уместо да се ослањате само на текст, можете креирати прилагођене визуелне индикаторе да бисте истакли присуство интеракција у видном пољу. Ово може укључивати промену боје играча или сприте-а, приказивање иконе или анимирање релевантних елемената.

Магла ратне механике

За стратегије или игре фокусиране на истраживање, можете увести маглу ратне механике. Ово ограничава визију играча све док не успоставе линију вида, постепено откривајући свет игре и подстичући стратешко доношење одлука.

Најбоље праксе за детекцију линије видљивости

Оптимизација детекције линије вида је кључна за одржавање глатког искуства играња. Ево неколико најбољих пракси које треба имати на уму.

Раицаст фреквенција

Избегавајте извођење раицаст-а сваког кадра ако није неопходно. Размислите о провери линије вида само када се положај играча или окружење значајно промени. Ово помаже у смањењу непотребних прорачуна.

Дужина зрака

Уравнотежите дужину вашег раицаст-а. Екстремно дуги зраци могу утицати на перформансе, па изаберите дужину која покрива неопходну област, а истовремено држите рачунарско оптерећење под контролом.

Цоллисион Лаиерс

Користите слојеве колизије и маске да бисте фино подесили које објекте разматра детекција линије вида. Ово спречава непотребно слање зрака ка небитним објектима.

Кеширање резултата

Ако вршите исту детекцију видног поља за неколико објеката или оквира, размислите о кеширању резултата да бисте избегли сувишне прорачуне.

Интеграција на нивоу платформе

Поравнајте своју механику детекције линије вида са дизајном нивоа ваша платформска игра. Узмите у обзир вертикалност окружења, различите висине платформе и потенцијалне препреке које би могле да ометају линију видљивости.

Уверите се да ваш систем детекције прихвата ове нијансе како бисте створили беспрекорно и интуитивно искуство играча.

Учините Годот игре привлачнијим помоћу детекције линије видљивости

Детекција линије видљивости додаје дубину и реализам вашем свету игре. Играчи могу другачије да стратегију, сакрију или приступе изазовима на основу своје линије вида. Ова механика може претворити једноставну платформеру у искуство које ће импресивније, чинећи играње занимљивијим и незаборавним.