Notice
Recent Posts
Recent Comments
Link
250x250
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

피너클의 it공부방

의뢰받는 사람 [제목 미정] 게임 개발 일지 4 본문

인디게임개발일지

의뢰받는 사람 [제목 미정] 게임 개발 일지 4

피너클 2024. 11. 1. 12:00
728x90
반응형

이제 적이 총을 쏘게 만들것이다.

고려 해야 할 사항들이있다.

1. 적과 플레이어 사이의 거리

2. 플레이어가 적의 시야 안에 들어와야함

 

적과 플레이어 사이의 거리는 간단하게 구할수 있다.

Vector2.Distance로 간단하게 구해 사이 거리가 4f 보다 작으면 총을 쏘게 만들것이다.

이제 2번 고려 사항을 해결해야 했다.

2. 플레이어가 적의 시야 안에 들어와야함

이를 위해 circle collider 2D를 붙이고 Trigger를 체크했다.

플레이어가 이 트리거 안에 들어오면 적은 플레이어 방향으로 레이캐스트를 쏠것이다.

트리거 안에 들어온 오브젝트의 태그가 Player라면 아래 코드를 실행시킨다.

적의 오른쪽을 기준으로 플레이어와의 각도를 구해주고 그 각도가 적의 시야각 안에 들어와있다면

레이캐스트를 쏘게 했는데 layerMask를 통해 오로지 layer가 Player인 오브젝트만 체크하게 했다.

Wall 타일맵에도 Layer를 Player로 적용 시켜줬다. 이렇게 되면 

플레이어 쪽으로 레이캐스트를 쏴도 중간에 벽이 있는지 확인 할수 있다.

중간에 디버그 하나 추가 했다. 레이캐스트에 들어온 오브젝트의 태그를 출력할것이다.

 

 

console을 보면 Wall과 Player가 반복되며 나오는걸 볼 수 있다.

이제 만약 ray의 태그 플레이어면 isSeen을 true로 하고 아니면 false로 했다.

Shoot함수다. 만약 지금 총을 쏘는 상황이 아니고 플레이어가 보이는 상황이라면

라인 렌더러를 플레이어 방향으로 쏘게했다.

간단하게 플레이어 위치에 0.1초 뒤에 라인 렌더러 쏘고 0.5초 뒤에 지우는 함수다.

이제 와서 드는 생각이지만 Invoke쓰지말고 WaitForSeconds를 두번 쓸걸 그랬다.

 

 

이제 거리 안에 들어오고 플레이어가 보이면 라인 렌더러를 쏘지만

거리안에 안들어왔거나 플레이어 사이에 벽이 있다면 라인 렌더러를 쏘지 않는다.

728x90
반응형
Comments