본문 바로가기

Unity/Unity3D_Quater

Unity3D_Quater - 보스몬스터 레이져공격 만들기

1.보스F 프리팹 만들기

 

 - 기존의 보스 프리팹의 텍스쳐만 바꿔주어 보스F프리팹을 생성

 

 

2.Enemy 스크립트 수정 


 - 보스F 인경우 Enemy 스크립트에서 기존의 보스인경우만 제외했던 로직들에 보스F인 경우도 추가하기 위해
   일반 몬스터 타입과 보스타입 2개로 나눔(이 과정에서 NONE 타입을 추가 해야했던 이유)
 - 기존에 보스타입인 경우를 제외하고 실행되어야 했던 함수(return)는 ||를 써서 보스F타입을 추가해주면 되었고
  기존에 보스탑입인 경우에만 발동시켜야 했던 함수는 &&를 써서 보스F타입을 추가해주어야 했다

 

 

 

3. Boss스크립트 수정


 - 보스패턴을 생각하는 Think()함수에 기존의 돌굴리기 공격에 보스F타입인 경우 레이져 공격을 하도록 하였고

 

 

 

4. 레이저오브젝트 생성 


 - 레이저오브젝트의 자식으로 여러 레이저 관련 라인렌더러 및 파티클이펙트를 활용, 애니메이션을 활용하여
   레이저오브젝트를 보스F프리팹의 하위 자식오브젝트로 넣어줬다

 

 

 

 

5.RazerSc스크립트 생성

 

 -  레이져 오브젝트를 활성화 시키는 것만으로 레이져가 나가도록 4의 레이저 오브젝트에
   RazerSc라는 스크립트 까지 넣어줬다
 - 자식오브젝트들의 애니메이션을 컴포넌트 창으로 드래그 앤 드랍할 수 있도록 Animator 를 public 해주는
   과정에서 경고선과 달리 실제 레이져 이펙트를 담당하는 애니메이션을 가진 여러 레이저 관련 자식 오브젝트
   들을 배열로 묶어 주었다
 - 애니메이션에 trigger를 주어 해당 애니메이션이 비활성화에서 활성화 될 경우 1회만 정상적으로 실행되도록 
   코드를 만져주었다

 

*Animator.GetCurrentAnimatorStateInfo(0).IsName("애니메이터 레이어 이름. 애니메이션State이름")

 현재 진행중인 애니메이션 상태를 확인할때 사용한다

*더불어 현재 애니메이션 종료를 체크하는 것까지

=> Animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 0~1   :  0~1의 의미는 애니메이션 진행률(0%~100%)

참고: blog.naver.com/showmeii1201/221188307687

 

[Unity]00.애니메이터(Animator)& 애니메이션 클립 종료 체크하기

이번에는 애니메이터에있는 애니메이션클립 이라고 해야할까요? 애니메이터에서 사용하는 애니메이션종료시...

blog.naver.com

 

 

 

6.Boss스크립트 수정

 

 - 위에서 만든 레이져 오브젝트를 활성화 하는 것만으로 이펙트가 발생하도록 RazerAtc 코루틴을 구현해주고

 - 보스가 레이져를 발사하면서 천천히 플레이어를 바라보도록 Quaternion.Slerp()를 활용하여 구현해준다

*회전에 관하여 => 참고 yooncoding.tistory.com/281

 

Unity- 회전

acecome.tistory.com/entry/01-Unity3D-%ED%9A%8C%EC%A0%84-%EC%A0%95%EB%A6%AC-transformLootAt?category=601710 01. Unity3D 회전 정리 [transform.LookAt] 오브젝트의 회전을 담당하는 euler , Quaternion 개념..

yooncoding.tistory.com

 

 

 

 

7.레이져 피격 구현


 - 기존 4의 레이저 오브젝트의 자식오브젝트중 실제 레이져를 맡고 있는 RazerEdge오브젝트에
    새롭게 BossRazer라는 Tag를 추가해주고, 기존의 Bullet 스크립트를 추가해주었으며
    Bullet 스크립트의 bulletType에 BossRazer를 추가해주고 해당 Tpye으로 설정 및 damage를 1로 설정,
   콜라이더 컴포넌트를 추가해주고 istrigger 체크, 기본 비활성화설정, 애니메이션으로 RazerEdge오브젝트의
   라인렌더러 컴포넌트와 함께 Enable, disable되도록 애니메이션을 수정해주었다

 


 - Player 스크립트의 OnTriggerStay()에서 만약 플레아어가 위에서 만든 레이저오브젝트의 RazerEdge
   오브젝트에 맞아서 트리거상태이면 isdamaged를 true로 하고 HP를 레이저데미지인1만큼 계속 깍아내고 
   캐릭터를 노란색으로 만든다 , 플레이어 뒷방향으로 지속넉백을 준다

- Player 스크립트의 OnTriggerExit()에서는 위 레이저오브젝트에서 벗어나면 is damaged를 false로 하고 
  다시 플레이어를  하얗게 만든다

 

 

 

 

 

완)