728x90
오늘은 몬스터 ai 를 구현해보려한다.
IEnumerator Roaming()
{
pos = new Vector3(); //목적지 생성
pos.x = Random.Range(-3f, 3f); //목적지 x 값은 -3~3 사이 랜덤값
pos.z = Random.Range(-3f, 3f); // 목적지 z 값은 -3~3 사이 랜덤값
myanim.SetBool("IsWalking", true); // 처음에 움직이니까 트루
while (true)
{
var dir = (pos - this.transform.position).normalized; // pos 포지션 - 몬스터포지션 normalized 한후
this.transform.LookAt(pos); // 몬스터가 이동할때 이동하는곳 바라보게하기위해
this.transform.position += dir * speed * Time.deltaTime; // 현재포지션에 normalize * 설정한 speed * Time.deltaTime 더해주기
float distance = Vector3.Distance(transform.position, pos); // 몬스터와 목적지 사이 거리 구하기
if (distance <=0.1f) // 0.1 이하라면
{
myanim.SetBool("IsWalking", false); // 걷는 모션 false 후 Idle 들어갈예정
yield return new WaitForSeconds(Random.Range(1f, 3f)); // 랜덤으로 1~3 초기다린후
myanim.SetBool("IsWalking", true); // 다시 걷게하고
pos.x = Random.Range(-3f, 3f);// 위치설정
pos.z = Random.Range(-3f, 3f);//위치설정
}
yield return null;
}
}
코드를 작성해준후
void ChangeState(State s) // State 변경
{
if (myState == s) return; // 지금 내 state 가 입력받은 state 와 같다면 return
myState = s; // 아니라면 내 state 에 입력받은 s 대입
switch(myState)
{
case State.CREATE:
break;
case State.IDLE:
ChangeState(State.ROAMING);
break;
case State.ROAMING:
StartCoroutine(Roaming());
break;
case State.BATTLE:
break;
case State.DIE: // die 상태로돌입하면
myanim.SetTrigger("Dead"); // Dead 트리거 작동으로 Dead 애니메이션 나오고
StartCoroutine(Disapearing()); // Disapearing 코루틴 시작
CharacterManger characterManger = GameObject.Find("Archer").GetComponent<CharacterManger>();
characterManger.fixTarget = false;// 만약 맞았는데 현재 hp 가 0보다작거나 같다면 타겟 세팅을 위해 스타트 코루틴 켜줄 bool 조정
break;
}
}
ChangeState 에서 로밍 상태일때 start 코루틴 해준다 .
이런식으로 몬스터가 돌아다니게된다 .
이제 몬스터가 피격시 피격대상을 타겟으로 설정하고 달려오게 만들려고한다 .
그 부분을 구현하다가 저녁약속이 생겨서 오늘은 여기까지만 구현하고 내일 아침일찍부터 구현하려한다.
반응형
'개인프로젝트 3D RPG 개발일지' 카테고리의 다른 글
14.(유니티포폴) 맵구현 (0) | 2022.07.01 |
---|---|
14.(유니티포폴)몬스터 ai 구현 (0) | 2022.06.30 |
12.(유니티포폴) 몬스터 피격 구현 (0) | 2022.06.28 |
11.(유니티포폴)캐릭터구현 (1) | 2022.06.27 |
10(유니티포폴) 캐릭터구현 (0) | 2022.06.26 |