[Unity]27.RPG 튜토리얼 #6 - 스킬 퀵 슬롯과 피격 이벤트

안녕하세요 유랑입니다.



실력향상을 위해서 오늘도 유튜브 강의를 따라하면서 공부하겠습니다.

궁금하신점 있으시면 댓글로 남겨주세요^^




1. RPG 만들기



이번 강의는 Patreon.com에서 외국인이 만든 강좌이며,

매달 $5의 후원을 통해야 리소스 다운을 받을 수 있습니다.

저는 돈을 지불하였고, 스킬업을 위해서 복습겸 글을 올리겠습니다.


리소스 사이트 => https://www.patreon.com/inScopeStudios/posts

유튜브 사이트 => https://goo.gl/o5VcTv







2. 스킬 퀵 슬롯



파이어볼 말고도 아이스와 라이트닝 스킬을 사용할겁니다.

그러기 위해서 스킬 버튼들을 만들어 보겠습니다.



2-1) UI 배치하기



우선 ice, lightning 스프라이트의 크기를 조정하겠습니다.

300에서 400으로 바꿔주세요.








Actionbar라는 오브젝트를 만들어 주세요.

여기에는 세 개의 스킬 버튼을 자식으로 추가해줄겁니다.




Image 오브젝트를 만든 후 ActionButton1로 이름을 바꿔주세요.

그리고 epmtyFrame이라는 스프라이트 이미지로 바꿔주겠습니다.





틀안에는 해당 스킬의 이미지가 보여야겠죠?

이미지를 자식으로 추가한 후 fireball을 넣어주세요.

크기는 fireball스프라이트 크기에 맞게 82 x 82로 변경하겠습니다.







2-2) Grid Layout Group



Grid Layout Group은 자식 오브젝트를 정렬할 때 사용합니다.

ActionButton1을 복사 붙여넣기를 이용해 두 개의 버튼을 더 만들겠습니다.

그리고 해당 이미지로 바꿔주세요.


- Child Alignment => 자식 오브젝트의 정렬 기준 설정

- spacing => 자식 오브젝트 간의 정렬 간격 설정








Button 기능을 추가하여 해당 이미지를 클릭할 수 있도록 만들어 주세요^^





2-3) 스펠 프리팹 만들기



fire말고도 ice와 lighning 프리팹을 만들어야겠죠?

해당 프리팹은 다음과 같이 만들어 주세요.

설정은 fire 프리팹과 똑같습니다.








프리팹을 다 만드셨으면 Player오브젝트 컴포넌트에 추가하겠습니다.

드래그앤 드랍을 이용해서 넣어주세요.






2-4) 스크립트 작성



Player 스크립트에 기존의 Space 버튼을 이용한 스킬 발사 부분을 삭제한 후 다음과 같이 작성해 주세요.


- CastSpell => 어떤 스킬이 눌러졌는지 매개변수를 통해 전달

- Instantiate => 전달받은 매개변수를 기준으로 생성될 스펠을 결정












GameManager 스크립트의 내용도 바꿔주겠습니다.

마우스를 이용해 스킬 퀵슬롯을 눌렀을 때 target이 null이 되는걸 방지하기 위한 코드입니다.


- EventSystem.current.IsPointerOverGameObject() => 현재 마우스의 위치가 UI 위에 있는지 체크함





각 버튼마다 Player오브젝트를 드래그앤 드랍하여 스크립트를 적용후 파라미터 값을 변경해 주세요.

- ActionButton1 => 0

- ActionButton2 => 1

- ActionButton3 => 2





마우스로 타겟을 클릭해 지정한 후 스킬버튼을 누르면 해당 스킬이 나가게 됩니다!!






2-5) 키보드를 이용한 스펠 발사



해당 버튼을 클릭하지 않고 키보드를 이용해서 스펠 발사를 해보겠습니다.

UIManager 스크립트를 생성 후 해당 내용을 작성해 주세요.

키보드를 입력하면 버튼을 대신 눌러주는 코드입니다.








빈 오브젝트를 생성한 후 스크립트를 추가한 후 버튼 3개를 넣어주세요.





키보드 상단에 있는 숫자버튼을 이용하면 해당 스킬이 나갑니다.

- FireBall : 1, Ice : 2, lightning : 3






3. 피격 이벤트



3-1) 타겟 지정 변경하기



타겟이 하나가 아닌 복수일 경우 지정이 제대로 안되는 문제가 발생합니다.

그 문제를 해결해 보겠습니다.

Spell 스크립트에서 MyTarget이라는 변수명으로 변경한 후 public으로 설정하겠습니다.






Player 스크립트에는 해당 내용을 추가해 주세요.

Spell을 참조해서 타겟을 지정해 주게됩니다.





해당 타겟을 마우스로 클릭후 스펠을 발사하면 짜잔 원하는 타겟으로 발사가 되네요.






3-2) 피격 이펙트 추가하기



스펠이 타겟에 부딪쳤을 때 생기는 이펙트를 만들어 보겠습니다.

Puff01 ~ Puff09 이미지를 선택해서  하이라키뷰에 드래그앤 드랍으로 옮겨주세요.

그러면 해당 이미지를 이용한 애니메이션 생성이 가능하답니다.








애니메이션과 더불어 애니메이터도 생기게 되는데 이름을 SpellController로 변경해 주세요.

firePrefab을 하이라키뷰에 가져와 애니메이터 컴포넌트 추가와 SpellController를 추가하겠습니다.





SpellController 애니메이터창에 들어가셔서 impact라는 트리거형 파라미터를 추가해 주세요.

그리고 마우스 우클릭을 이용해 Empty 애니메이션 상태를 만들어 준다음 이름을 Default로 변경한 후 

애니메이션 상태를 다음과 같이 맞춰주겠습니다.





Dafult -> Puff : 컨디션을 다음과 같이 추가후 Has Exit를 언체크하겠습니다.





Puff -> Default : HasExit를 체크 Duration값을 0으로 변경해 주세요.






3-3) StateMachineBehaviour 만들기



애니메이션 상태창에 스크립트를 추가하면 StateMachineBehaviour를 상속받을 수 있습니다.

해당 스크립트는 애니메이션 상태를 이용한 코드적용이 편리해집니다.

Puff에다가 Spell Behaviour를 추가하고 코드를 작성해 주세요.

애니메이션 상태가 끝나면 애니메이션을 하고있는 오브젝트가 삭제됩니다.








3-4) 적과 충돌시 피격처리



이제 스펠이 적과 충돌했을 경우 피격처리 효과를 적용해 보겠습니다.

Spell스크립트에서 트리거처리하는 내용을 추가해 주세요.

적과 충돌시 속도를 0, 더는 타겟으로 이동하지 않게하는 코드입니다.






GameManager 스크립트에는 myTarget의 좌표를 자식으로 설정해 줍니다.

타겟에는 박스콜라이더를 가지고 있는 자식을 만들어 줄 예정입니다.

해당 자식과 부딪치면 트리거 처리가 되는거죠^^





fire, ice, lightning 프리팹 모두 애니메이터와 BoxCollider 2D 컴포넌트를 추가후 Aplly시켜주세요.





target에는 자식으로 빈오브젝트를 생성후 이름을 HitBox, 태그를 HitBox, BoxCollider도 추가하겠습니다.





게임을 실행시켜보면 스펠에 부딪쳤을 경우 피격효과를 확인하실 수 있습니다.






4. 마무리



오늘 강의는 여기까지입니다.

RPG 튜토리얼을 따라하면서 스킬 퀵 슬롯 추가와 피격처리까지 설정하였습니다.

다음 시간에는 캐스팅바에 대해서 알아보겠습니다.

감사합니다.




수업자료: https://github.com/YouRang12/-Tistory-Unity---Extra-2D-





댓글

Designed by JB FACTORY