Search AI

CJB_ny·2022년 5월 28일
1

2D_Project

목록 보기
16/23
post-thumbnail

1. Astar 추가 -> 길찾기

클라 기반이라면은 너무나 당연하게도 클라에서 길찾기를 해야되는데

멀티 게임을 경우 서버에서 길찾기를 해야하는게 아니라

클라에서도 길찾기를 클라에서도 해야되나??

이것은 컨텐츠 마다 조금씩 다르긴하다.

우리가 만드는 게임처럼 셀 단위로 움직이는게 아니라면

"서버"에서 아무리 길을 열심히 찾아준다고 해도

점단위로 정확하게 어디로 움직여야 할지는 찾아주질 못한다.

그래서

목표하는 목표지점만 찍어주고(서버에서)

그 중간에 길을 찾는 과정에서 Astar같은 것은 각자 클라에서 해줘서 싱크를 맞춰 주면 될 것이다.

따라서
클라에서도 길찾기를 해야하나 아니냐는 경우에 따라 조금씩 다르다.


루키스는 클라에서 작업을 한다음에

쪼개고 쪼개서 서버에 주는? 그런 방식을 선호를 한다.


Astar 크게 달라진점

ignoreDestCollision

최종 목적지는 충돌을 할지 말지 결정하는데

이렇게한 이유는

어떤 몬스터가 플레이어를 추적하기 위해서 추가한 것인데

Astar돌릴때

startCellPos = 시작위치, destCellPos = 플레이어가 있는 목표지점인데

목표지점에 플레이어가 있어서 막혀있으면

목적지를 못찾게 되니까

맨 마지막 좌표는 충돌을 무시하고 무조건 갈 수 있다고 간주를 하라라는 의미에서 추가를 함.

몬스터 컨트롤러

에서

Idle일 경우

_coPatrol == null일 경우

코루틴 돌려서 이상하게 이리저리 움직이게 했었음.

그래서 패트롤만! 하는게 아니라

패트롤 하면서 움직이는 도중에 Player를 찾았다면은

플레이어를 향해서 이동을 하게끔 추가를 하도록 하겠다.

패트롤 같은 경우

이렇게 간단하게 랜덤 시간 이후 이루어져있는데

Search AI의 경우 어떻게 해야할까..??

플레이어가 가만히 있으면 노상관인데
플레이어가 막 이동을 하면 우짜지??

한번 Search를 했다고 해서 근방에 없다는 보장이 없음.

그래서 1초마다 Search로직을 실행시켜주는게 합당할 거같다.

코루틴

while문을 무조건 계속 돌지말고 1초마다 돌게 끔 만들어주고

현재 Object의 Find함수가 Vector3Int를 받고있는데

상하좌우 다 보면서 찾지말고

조금더 효율적인 Find를 만들어 보도록 하자.

Find Overriding

Find 함수 오버라이딩을 해주도록 하는데

조건을 실시간으로 전달을 해주는 방식으로 만들어 보도록 하자.

https://docs.microsoft.com/en-us/dotnet/api/system.func-2?view=net-6.0

public delegate TResult Func<in T,out TResult>(T arg); 

말이 좀 어려운데 인자 in T를 받아서 TResult를 내뱉는다는 것이다.

https://velog.io/write?id=b7235e06-3c4b-4e37-bca3-60c094693f01

이거 정리한건데 참조 ㄱㄱ

(이렇게하면 Func<GameObject, bool> condition = 어쩌구 해줘야 하지 않나..??)

47번째 줄에서 44번 if문을 통과 했으니까 cc가 존재하는 상황이고

obj가 있다는 말임(41번쨰 foreach돌고있으니까)

그러면 condition이라는 Func에다가 Invoke로 obj가 있다고 알려줌

(이게 return obj가 되는 것인가?)

profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글