본문 바로가기

Unity/Unity3D_Quater

Unity3D_Quater - 플레이어의 피격, 몬스터A 공격 구현

1. 플레이어 피격

 - 플레이어가 enemyBullet 오브젝트와 OnTriggerEnter가 되면 OnDamged() 함수 실행(+실행조건 : isDamaged = false)
   OnDamaged(){
 - 노란색으로 바뀌고(GetComponentsInChildern<meshRenderer>();)
 - isDamaged = true
 - 총알 스크립트의 데미지를 가져와서 플레이어의 체력을 깍음
 - 1초 후(코루틴으로 함수 구현)
 - 다시 원래색으로 돌아옴 + isDamaged = false
  }

2.몬스터 공격

 - 몬스터 공격 범위가 될 BoxCollider 생성 - > Tag, Layer = EnemyBullet
 - 몬스터 오브젝트 안에 자식으로 넣어주고 위치 조정
 - 몬스터가 플레이어를 추적하다가 플레이어와 일정 거리가 되면 - > physics.ShpereCastAll사용 
 - ShpereCastAll에 플에이어가 적중되고 + 현재 몬스터가 공격중이 아니면 -> 몬스터공격 코루틴 실행
   
    {
     -  몬스터가 멈추고 -> isTrack = false;

     -  몬스터 공격중활성화, 애니메이션 실행 - > isAttack = true; , anim.setBool("isAttack", true);
     -  0.3초 후

        BoxCollider가 활성화 됨 - > BoxCollider.enabled = true; 
     -  0.8초 후

        BoxCollider가 비활성화 됨  ->  BoxCollider.enabled= false;
     -  1초 후

        다시 플레이어를 따라가거나 범위안에 그대로 있다면 다시 공격 코루틴 시작 ->  isTrack = true;

  isAttack = false; , anim.setBool("isAttack", false);
    }

 

 

1. 플레이어 피격 

 - OntriggerEnter에서 EnemyBullet과 트리거 되었을 경우 추가

*GetComponentsInChildern 와 GetComponentInChildern 차이를 숙지하자 s가 붙으면 자식오브젝트 모두를 가져옴

 s가 없으면 첫번째 자식오브젝트만 가져옴

 

 

*요 네모난 콜라이더를 가진 오브젝트가 EnemyBullet

 

2. Bullet 스크립트 수정

   - Bullet 스크립트에서 enum Tpye 을 추가하여 플레이어총알과, 적총알 2개로 나뉘게 만듬

   기존 로직은 플레이어 총알인 경우에만 해당하도록 로직조건 추가

 

 

 

 

3. Enemy 공격 스크립트 구현

 

 

*SphereCastAll 참조 - > wergia.tistory.com/102

 

[Unity3D] BoxCast, SphereCast, CapsuleCast 제대로 사용하기

BoxCast, SphereCast, CapsuleCast 제대로 사용하기 지난 Physics 섹션에서는 매 프레임 콜라이더 충돌을 검출하지 않고 원하는 순간에만 콜라이더를 검출해낼 수 있는 Cast 계열의 함수들에 대해서 알아보

wergia.tistory.com