Zombiegame/Assets/Scripts/Zombie.cs
2026-02-05 18:41:18 +09:00

84 lines
2.7 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.AI; // AI, 내비게이션 시스템 관련 코드 가져오기
// 좀비 AI 구현
public class Zombie : LivingEntity
{
public LayerMask whatIsTarget; // 추적 대상 레이어
private LivingEntity targetEntity; // 추적 대상
private NavMeshAgent navMeshAgent; // 경로 계산 AI 에이전트
public ParticleSystem hitEffect; // 피격 시 재생할 파티클 효과
public AudioClip deathSound; // 사망 시 재생할 소리
public AudioClip hitSound; // 피격 시 재생할 소리
private Animator zombieAnimator; // 애니메이터 컴포넌트
private AudioSource zombieAudioPlayer; // 오디오 소스 컴포넌트
private Renderer zombieRenderer; // 렌더러 컴포넌트
public float damage = 20f; // 공격력
public float timeBetAttack = 0.5f; // 공격 간격
private float lastAttackTime; // 마지막 공격 시점
// 추적할 대상이 존재하는지 알려주는 프로퍼티
private bool hasTarget {
get
{
// 추적할 대상이 존재하고, 대상이 사망하지 않았다면 true
if (targetEntity != null && !targetEntity.dead)
{
return true;
}
// 그렇지 않다면 false
return false;
}
}
private void Awake() {
// 초기화
}
// 좀비 AI의 초기 스펙을 결정하는 셋업 메서드
public void Setup(ZombieData zombieData) {
}
private void Start() {
// 게임 오브젝트 활성화와 동시에 AI의 추적 루틴 시작
StartCoroutine(UpdatePath());
}
private void Update() {
// 추적 대상의 존재 여부에 따라 다른 애니메이션 재생
zombieAnimator.SetBool("HasTarget", hasTarget);
}
// 주기적으로 추적할 대상의 위치를 찾아 경로 갱신
private IEnumerator UpdatePath() {
// 살아 있는 동안 무한 루프
while (!dead)
{
// 0.25초 주기로 처리 반복
yield return new WaitForSeconds(0.25f);
}
}
// 데미지를 입었을 때 실행할 처리
public override void OnDamage(float damage, Vector3 hitPoint, Vector3 hitNormal) {
// LivingEntity의 OnDamage()를 실행하여 데미지 적용
base.OnDamage(damage, hitPoint, hitNormal);
}
// 사망 처리
public override void Die() {
// LivingEntity의 Die()를 실행하여 기본 사망 처리 실행
base.Die();
}
private void OnTriggerStay(Collider other) {
// 트리거 충돌한 상대방 게임 오브젝트가 추적 대상이라면 공격 실행
}
}