유니티 3D 쿼터뷰 액션게임 만들기
👾 다양한 몬스터 만들기 👾
1. 플레이어 피격
🔻 OnTriggerEnter()에 EnemyBullet 경우 로직 추가
✏️ 무적 타임
🔻 무적타임을 위해 bool 변수 추가
bool Damaging;
🔻데미지를 받고 있지 않을 때만 실행, 데미지 받고 1초 동안 무적타임
✏️ 데미지 입을 때마다 Player가 노란색으로 바뀌기
- meshRenderer 배열 변수 추가 (meshs)
- Player는 머리 , 몸통 , 팔 , 다리 등 여러 메시를 가지고 있어서 배열 필요
📣 주의
GetComponentInChildren<>();
: 컴포넌트의 자식 첫 번째 것을 가지고옴
GetComponentsInChildren<>();
: 컴포넌트의 모든 자식을 가지고 옴
MeshRenderer[] meshs;
void Awake()
{
meshs = GetComponentsInChildren<MeshRenderer>();
}
- Player가 데미지를 받았을 때 노란색으로 표시됨
- foreach 반복문을 사용하여 모든 재질의 색상을 변경함
- WaitForSeconds()로 무적타임 조정하고, 끝나면 Player 색이 다시 돌아오도록 함
🔻 데미지를 입히는 오브젝트 생성 후 Collider 추가, 태그, 레이어 지정 (EnemyBullet)
🔻 EnemyBullet이 닿으면 Health가 10씩 감소됨
3. 일반형 몬스터
- 만들어둔 EnemyBullet 공격 콜리더를 Enemy A 몬스터의 자식으로 등록
- 근접공격 범위로 사용되기 때문에 앞으로 배치
🔻 콜라이더를 담을 변수 추가
public BoxCollider melleArea;
🔻 공격 중임을 알리는 플래그 추가
public bool Attacking; //공격하고 있다는 플래그 추가
✏️ 공격 범위를 정하는 로직
- Targeting 타겟팅을 위한 함수 생성
- SphereCast()의 Radius 반지름, Range 길이를 조정하는 변수 선언
- rayHits 변수에 데이터(하나 이상)가 들어오고, 공격중이 아닐 때 Attack() 공격 코루틴 실행
- Attack() 공격 코루틴
- 정지 / 공격O / 애니메이션 ➡️ 공격범위 활성화 ➡️ 쫓음 / 공격X / 애니메이션X
- 애니메이션 딜레이 때문에 시간차를 둡니다
🔻 FixedUpdate()에서 타겟팅 반복적으로 불러오기
📣 EnemyBullet의 BoxCollider는 비활성화 할 것 !
4. 돌격형 몬스터
- Enemy B 프리팹을 Scene에 올리기
- 기본적인 물리, 스크립트 컴포넌트 적용하기
- NavAgent에서 속도와 회전속도, 가속도 조정 (Enemy A와 다르게)
🔻애니메이터도 복사해서 Mesh Object에 붙여주기
🔻 enum으로 타입을 나누고 그것을 지정할 변수를 생성
public enum Type { A, B, C };
public Type enemyType;
🔻 Enemy 타입에 따라 switch 문으로 각 타겟팅 수치 정하기
🔻 공격할 때 Enemy 타입에 따라 switch 문으로 공격 시간과 강도 정하기
5. 원거리형 몬스터
🔻 근접공격 범위 대신 총알이 필요 (EnemyBullet 필요없음 X)
-미사일 Misslie 프리팹 가져오기
-미사일 MeshObject 위치와 각도를 조정
🔻MeshObject에 미사일 회전을 위한 새로운 스크립트 생성
-미사일 연출을 위한 파티클 시스템 추가
-물리효과를 위한 Box Collider(IsTrigger활성화) 와 데미지를 위한 Bullet스크립트 추가
-Asset창으로 드래그하여 Prefab으로 등록
- EnemyC 모델의 애니메이션으로 모두 교체
- Enemy 로직에 미사일 Prefab을 담아둘 변수 생성
public GameObject bullet;
- Instantiate() 함수로 미사일 인스턴스화
- Enemy 위치에 bullet을 넣음
- 모든 Enemy에 태그와 레이어를 Enemy로 설정
- Enemy와 EnemyBullet이 충돌하지 않도록 물리 레이어 설정
🔻 미사일 Prefab을 Bullet변수에 할당하고 Enemy Type도 설정하기
📣 Missile 미사일의 Rigidbody - UseGravity 해제 비활성화 (중력때문에 내려감)
✏️ 미사일이 Player과 충돌하면 사라지는 로직
✏️ 근접공격 범위가 파괴되지 않도록 조건 추가
🔻 Enemy A,B는 IsMelee 체크 !
'유니티' 카테고리의 다른 글
C# 기본 (0) | 2022.05.06 |
---|---|
Terrain 지형 만들기 (0) | 2022.05.04 |
유니티 3D 쿼터뷰 액션게임 - 목표를 추적하는 내비게이션 AI / NavMeshAgent (0) | 2022.04.25 |
유니티 3D 쿼터뷰 액션게임 - 수류탄 구현하기 / 투척, 던지기 / 폭발 (0) | 2022.04.24 |
유니티 3D 쿼터뷰 액션게임 - 피격 테스터 만들기 (0) | 2022.04.24 |