유니티 게임 개발 일지

유니티 궁수의 전설 모작 - 5 (몬스터 - 패턴 Type에 따른 패턴 스타일)

더크 2021. 7. 28. 09:42

몬스터 데이터 테이블 패턴 Type

패턴 테이블에는 각 행동 패턴 타입을 int형으로 분류 해놓았다.

1 : 돌진형

2 : 투사체 발사형

3 : 투사체 난사

 

타입별로 살펴보기전에 모든 패턴 동일하게 공격준비 상태 드가기전에 목표 타겟을 정합니다

타겟지정
타겟 지정함수

현재 패턴의 목표 타겟이 플레이어면 플레이어의 위치값

랜덤이면 랜덤 좌표를 지정한다.

 

1.돌진형

 

돌진형 준비

현재 돌진형은 공격준비때 할게 없어서 바로 넘어가게 해놓았습니다.

다음은 패턴입니다.

돌진패턴

첫줄에 JUMP는 점프 패턴의 경우 해당하는데요 역탄도학으로 제작하였습니다. 역탄도학 코드는

https://robatokim.tistory.com/entry/%EA%B2%8C%EC%9E%84%EC%88%98%ED%95%99-%EC%97%AD%ED%83%84%EB%8F%84%EA%B3%84%EC%82%B0%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%91%90%EC%A0%90-%EC%82%AC%EC%9D%98-%ED%8F%AC%EB%AC%BC%EC%84%A0-%EA%B5%AC%ED%95%98%EA%B8%B0

 

[게임수학] 역탄도계산을 이용한 두점 사의 포물선 구하기

게임을 만들다보면 가장 큰벽으로 느껴지는것은 바로!! 이미지!! 나는 프로그래머니까 항상 이미지때문에 골치가 아프다. 하지만 이미지나 그래픽관련 문제가 아니라 단순히 내가 프로그래머로

robatokim.tistory.com

이분의 코드를 참고하였습니다,

역탄도학

다음은 일반 돌진일 경우에서 몬스터 타입이 돌진형이면 Power로 돌진하게 하였고 원거리형 몬스터의 돌진은

Speed를 사용했습니다 그 이유는 처음에는 모두 Power로 통일 하려고 하였는데 원거리형 몬스터들의 투사체

속도를 잊고있어서 원거리 몬스터의 Power는 투사체 속도에 사용하였습니다.

 

2.투사체 발사형

 

투사체 발사형 공격 준비

공격 준비단계에서 가이드라인이 있는경우 라인랜더러를 사용하였습니다.

인게임
가이드라인 코드

일단 쿨을 증가시키고 레이어를 지정하였습니다 레이어는 가이드라인이 반사각으로 여러번 반사될 경우 사용됩니다.

NewPostion에 처음에 몬스터의 포지션을 넣고 Dir은 방향을 지정해줍니다. 그런뒤 라인랜더러 크기를 1로지정하고

첫 포지션을 몬스터의 위치러ㅗ 잡아줍니다 핵심은 그 밑인데요

 

반복문에서 NewPeturn.Gcount는 여러번 반사되는 횟수입니다.

레이캐스트를 이용해서 레이를 쏘고 레이어에 닿으면 라인랜더러 크기를 증가, 다음 위치를  hit.point로 지정합니다

그러고 NewPosition에 힛포인트를 넣고 NewDir에 레이를 쏜 방향에서 반사각을 구해서 반복합니다

그러면 힛포인트마다 새로운위치가 들어가서 자연스럽게 반사각으로 튕기는 가이드라인을 볼 수 있습니다.

 

그 아래는 유저를 몇초동안 쳐다볼지 정하는 if와 패턴 상태로 넘어가는 쿨타임이 있습니다.

 

투사체 발사형 패턴

 

투사체 발사형의 경우 발사를 여러번 하는 몬스터는 일정 쿨타임마다 발사하도록 하였습니다.

그래서 발사할 때마다 num을 증가시키고 349줄에서 num과 현재 패턴의 공격횟수가 같으면 패턴이 끝이 납니다.

 

투사체는 각도로 발사하는데

데이터베이스

Angle,BallCount,Count가 있습니다. Angle은 투사체를 쏠 범위 각도 BallCount는 그 각도안에서 몇개의 공이 나가는지 Count는 BallCount가 몇번 나가는지 입니다 결국 한패턴에 공격하는 투사체 횟수는 BallCount * Count입니다.

그림으로 간단하게 설명드리자면

투사체 공격

angle을 90, BallCount를 5, Count3으로 적었을 경우 그림처럼 몬스터의 앞으로 90도를 펼치는데 범위 지정법은

-(각도나누기/2) 를 하면 몬스터의 바라보는 기준 -45가 될겁니다 그런다음 angle/ballcount를 합니다

그러면 18이 되고 -45도에서 한번 발사하고 + 18해서 +45도가 될 때까지 발사를 하면 총 90도안에서 5번 발사를 합니다. 발사 형식은 Instantiate를 이용하였고 

 

333 ~ 343줄은 현재 몬스터의 수치를 투사체 오브젝트에 넘겨주는 코드입니다. 이것이 필요한 이유는

몬스터가 투사체 속도와 데미지를 가지고 있기 때문입니다. 그리고337줄은 투사체가 역탄도일 경우 역탄도 정보를

넘겨주는 코드입니다. 투사체 역탄도 역시 돌진패턴의 점프와 코드는 동일하게 되어있습니다.

 

3.난사형

 

난사형 공격 준비상태

난사형은 가이드라인이 따로 존재하지 않습니다 유저를 쳐다보다가 다음 상태로 넘어가게 됩니다.

 

난사형 패턴

난사형은 Type2와 비슷하게 처음에는 각도를 지정해주고 그 각도안에서 랜덤 각도를 지정하여 공격하는 형식입니다.

여기서의 Cool도 Type2와 똑같이 한번 발사 후 다음 투사체 발사의 쿨타임 입니다. 이렇게 코드를 작성하였을 때

나오는 공격 방식입니다.

난사형 공격