유니티

유니티 3D 쿼터뷰 액션게임 만들기 - 돌격형, 원거리형 몬스터 / 공격 데미지

nock_ji 2022. 4. 25. 22:36

유니티 3D 쿼터뷰 액션게임 만들기

 

 

👾  다양한 몬스터 만들기   👾

 

 

 


 

1.  플레이어 피격

 

 

🔻 OnTriggerEnter()에 EnemyBullet 경우 로직 추가

Player logic.

 

 

 

✏️   무적 타임    

 

🔻 무적타임을 위해 bool 변수 추가 

bool Damaging;

 

🔻데미지를 받고 있지 않을 때만 실행, 데미지 받고 1초 동안 무적타임

Player logic.

 


 

✏️ 데미지 입을 때마다 Player가 노란색으로 바뀌기 

 

- meshRenderer 배열 변수 추가 (meshs)

- Player는 머리 , 몸통 , 팔 , 다리 등 여러 메시를 가지고 있어서 배열 필요 

 

📣 주의 

GetComponentInChildren<>();

: 컴포넌트의 자식 첫 번째 것을 가지고옴

GetComponentsInChildren<>();

: 컴포넌트의 모든 자식을 가지고 옴 

 

MeshRenderer[] meshs;

void Awake()
    {
        meshs = GetComponentsInChildren<MeshRenderer>(); 
    }

 

 

- Player가 데미지를 받았을 때 노란색으로 표시됨 

- foreach 반복문을 사용하여 모든 재질의 색상을 변경함 

- WaitForSeconds()로 무적타임 조정하고, 끝나면 Player 색이 다시 돌아오도록 함

Player logic.

 

 

🔻 데미지를 입히는 오브젝트 생성 후 Collider 추가, 태그, 레이어 지정 (EnemyBullet)

 

🔻 EnemyBullet이 닿으면 Health가 10씩 감소됨 

 


 

3. 일반형 몬스터 

 

- 만들어둔 EnemyBullet 공격 콜리더를 Enemy A 몬스터의 자식으로 등록

- 근접공격 범위로 사용되기 때문에 앞으로 배치

 

 

🔻 콜라이더를 담을 변수 추가

public BoxCollider melleArea;

 

🔻 공격 중임을 알리는 플래그 추가

public bool Attacking; //공격하고 있다는 플래그 추가

 

 

 

✏️  공격 범위를 정하는 로직 

 

- Targeting 타겟팅을 위한 함수 생성

- SphereCast()의 Radius 반지름, Range 길이를 조정하는 변수 선언

- rayHits 변수에 데이터(하나 이상)가 들어오고, 공격중이 아닐 때 Attack() 공격 코루틴 실행

Enemy logic.

 

 

- Attack() 공격 코루틴 

- 정지 / 공격O / 애니메이션 ➡️ 공격범위 활성화 ➡️ 쫓음 / 공격X / 애니메이션X 

- 애니메이션 딜레이 때문에 시간차를 둡니다 

Enemy logic.

 

🔻 FixedUpdate()에서 타겟팅 반복적으로 불러오기 

Enemy logic.

 

 

 

📣 EnemyBullet의 BoxCollider비활성화 할 것 ! 

 

 


 

4. 돌격형 몬스터 

 

- Enemy B 프리팹을 Scene에 올리기 

- 기본적인 물리, 스크립트 컴포넌트 적용하기

- NavAgent에서 속도와 회전속도, 가속도 조정 (Enemy A와 다르게

 

 

 

🔻애니메이터도 복사해서 Mesh Object에 붙여주기

 

 

 

🔻 enum으로 타입을 나누고 그것을 지정할 변수를 생성

public enum Type { A, B, C };
public Type enemyType;

 

 

 

🔻 Enemy 타입에 따라 switch 문으로 각 타겟팅 수치 정하기 

Enemy logic.

 

 

🔻 공격할 때 Enemy 타입에 따라 switch 문으로 공격 시간과 강도 정하기 

Enemy logic.

 

 

 

 


 

5. 원거리형 몬스터 

 

🔻 근접공격 범위 대신 총알이 필요 (EnemyBullet 필요없음 X)

 

 

-미사일 Misslie 프리팹 가져오기

-미사일 MeshObject 위치와 각도를 조정 

 

 

 

🔻MeshObject에 미사일 회전을 위한 새로운 스크립트 생성

Missile logic.

 

 

-미사일 연출을 위한 파티클 시스템 추가

-물리효과를 위한 Box Collider(IsTrigger활성화) 와 데미지를 위한 Bullet스크립트 추가

 

 

 

-Asset창으로 드래그하여 Prefab으로 등록

 

- EnemyC 모델의 애니메이션으로 모두 교체

- Enemy 로직에 미사일 Prefab을 담아둘 변수 생성     

public GameObject bullet;

 

- Instantiate() 함수로 미사일 인스턴스화

- Enemy 위치에 bullet을 넣음 

Enemy logic.
Enemy logic.

 

 

- 모든 Enemy에 태그와 레이어Enemy로 설정 

- EnemyEnemyBullet충돌하지 않도록 물리 레이어 설정

 

 

 

🔻 미사일 Prefab을 Bullet변수에 할당하고 Enemy Type도 설정하기 

 

 

 

📣 Missile 미사일의 Rigidbody - UseGravity 해제 비활성화 (중력때문에 내려감) 

 


 

✏️ 미사일이 Player과 충돌하면 사라지는 로직

 

Player logic.

 

 

✏️ 근접공격 범위가 파괴되지 않도록 조건 추가 

 

 

 

🔻 Enemy A,B는 IsMelee 체크 !