프로그래밍 농장

유데미 스타터스 유니티 1기 취업 부트캠프 - 12주차 학습 일지 본문

STARTERS

유데미 스타터스 유니티 1기 취업 부트캠프 - 12주차 학습 일지

Tennessee201 2022. 9. 11.
728x90

이번주는 저번주에 이어서 직접 제작한 MagicaVoxel을 활용하여 구현한 다양한 오브젝트들을 기반으로 한 미니프로젝트를 직접 구현하는 과정을 학습하였다.

추가적으로 저번주에 이어서 진행중인 Death Parkour 개인프로젝트를 진행하여서, 이를 같이 포스팅하도록 하겠다!


- MagicaVoxel Project

강사님의 MagicaVoel 프로젝트

 

수업과정에서 참고한 복셀프로젝트이다. 위와 같이 기본적으로 다양한 복셀 오브젝트들을 기반으로 한 Map을 생성하고, 이들과의 상호작용 기능을 구현하였다.

특정 건물에 들어가게되면, Scene전환과 함께 플레이어의 속성이 그대로 넘어가서 활용이 가능한 기능도 구현하였다.

건물 내에서는 특정퀘스트를 수행할수있도록 간단한 NPC상호작용과 팝업시스템을 구현하였다.

 

+ 복셀을 export하여 유니티 오브젝트로서 사용하려할때, 아래와 같이 피벗이 맞지않는 현상이 발생하였다.

해결방안은 MagicaVoxel에서 굵은 실선 0,0을 기준으로 오브젝트를 잡고 export해 주어야 해당점을 기준으로 오브젝트의 중심피벗이 잡힌다는것을 깨달았다. 


 

아래는 magicavoxel로 구현한 다양한 오브젝트들이다.  (다음주에 최종본과 함께 공개하겠다..)

 

 


- Death Parkour

1주일째 간간히 진행중인 개인 프로젝트이다. 기존 수업간의 학습내용을 반영하여 작업하고 있으며, 작업일지와 현황은 아래와 같다. 

이번주는 프로젝트 전반의 데미지 처리에 대한 수정이 필요하다고 느끼게 되어, 인터페이스를 통한 피격 및 회복 기능으로 개편하도록하였다. 아직 진행중인 상황이라 다음주쯤 완성되면 다시 코드와 함께 포스팅할수있을것 같다.


개발 노트 ( 진행사항 ) 

08/30 (화)   개발시작   


 Map / Turret / Player Asset 다운 

 플레이어 이동구현

 터렛 범위 내 접근시 조준 및 발사 기능구현 ( Raycast )


->error :최초 RayCast 발사시 플레이어 위치 일정반경을 잡고 두번째 Raycast 발사시 해당 범위내에 있을시 피격처리로 수정 要  (해결) Turret 레이캐스트 피격 방식 개편 ( Position targeting -> raycast Aim / Fire 찍힌 distance 로 판단 ) -> 이 방식도 일직선에서는 피격안되는 문제있음. -> 최종적으로는 최초 Aim 레이캐스트의 위치반경 Radius를 잡고, Fire 레이캐스트에 잡힌 위치가 해당 Radius 반경에 있을시 피격처리하는 방식으로 구현 해야함. 
08/31 (수) 플레이어 파쿠르 구현 더블점프 


-> error : 더블점프후 착지후 1회 점프 추가로 수행하는 문제  :(해결) Input.Jump(space).false로 Input 입력을 초기화 해주어야했음. 

-> error:  더블점프이상을 금지한후, (JumpCnt = 0~1) 벽이나 경사에 제대로 플레이어가 못올라간 경우 계속 InAir 애니메이션을 수행하는 문제  (해결) 플레이어의 CharacterController의 Radius (=Collider) 사이즈를 피격가능한 최소치로 줄여서 미세한 벽이나 경사에도 상호작용할수있도록 하였다. 
09/01 (목) 플레이어 파쿠르 구현 - 백플립 / 매달리기

-> error : IsHanging boolean 체크로 매달리려고 할시, CharactorController 트리거 체크는 되지만, 매달리는 애니메이션으로 가지않는 문제  : (해결) 애니메이션 조건처리에서 조건이 Grounded가 우선이어서 바로 착지함.
09/02 (금) UI Canvas 개편

플레이어 HP / MP 추가  & 파쿠르별 소모 MP Table 구체화

플레이어 피격시 카메라 진동 추가 : 
현재 프로젝트의 Camera 구조는 Cinematic + Cinematic Virtual이 PlayerFollowCam에 붙어있음으로, 진동을 수행할 함수에서 Player의 자식오브젝트인 PlayerFollowCam의 localposition으로 접근하여 잡아주어야한다. 

 터렛 범위 내 접근시 조준 및 발사 기능 보완 ( Raycast )
: 
기존 Aim <-> 현재의 Position을 비교하는 방식에서 처음 Aim후 해당 Position반경을 잡은후, 발사시 잡힌 Raycast가 그 안에 있을시 피격 처리하도록 구현

-> error: Hanging 수행시 매달릴 위치보다 위 (공중)에 매달리는 현상  : (해결) Hanging 파쿠르 가능한 위치의 localposition을 기반으로 하여 플레이어의 position을 잡고 애니메이션 수행해야함.

09/03 (토) PlayerFaceCam 추가  : 플레이어의 실시간 FaceCam 및 상태별 표정모션 노출 
->error : PlayerFaceCam 의 ViewPort Rect를 조절하여 UI 원하는 UI위치상에 출력되긴 하나, Sprite안에 원하는대로 맞추어 넣고자 함.  :   UI Mask를 사용하여 PlayerFaceCam을 잘라 넣어보려하였으나 잘안됌.. UI 오브젝트에만 잘리는것같음 -> 일단 HealthBar창을 뚫고 Cam의 Rect를 잡아서 넣어준 상태. 튀어나오고, Screen Size에 대응안돼는 상태임.  : (해결) Raw Image에 다시 PlayerCam을 넣어준후 다시 마스킹으로 잘라주니 원하는대로 동그랗게 Cam화면이 잘려 들어간것을 확인할수있었다.


피격UI 추가 : 
1. UI Canvas에 피격 Sprite 하나 추가후 코루틴으로 피격시마다 알파값 조절.   /  2. Vignette.Intensity에 접근하여 코루틴으로 빨개졋다 서서히 원상태로 돌아오는 방식.   총 두가지 방식을 생각하였으며, 조사결과 상황에 맞는 다양한 피격 UI를 사용하고자 한다면 Sprite로 조절하는것이 맞고 그런것이 아니라면 Vignette로 접근하여도 괜찮다고 하여 UI를 사용.


파쿠르 Animator 추가 및 수정 


Turret 레이캐스트 피격 방식 개편 ( Position targeting -> raycast Aim / Fire 찍힌 distance 로 판단 )
09/05
(월)
 PlayerFaceCam 수정 및 보완 완료  : RawImage 마스킹으로 잘라서 넣어줌 

 피격시 UI Canvas 상 피격화면 표시 추가 : 피격 UI Canvas에 발라주고 코루틴으로 알파값 서서히 감소하도록 구현 

09/06
(화)
 플레이어 HP 에 따른 애니메이션 및 효과 적용

 애니메이션 구조 개편 (+추가)

 IDamageble 인터페이스 구현을 통한 Damage 처리방식 개편 


JumpAttack 애니메이션 안됌
-> error :  !Grounded 이며 R을 누를시 onAir 에서 JumpAttack 애니메이션을 수행해야하는데 넘어가지않음 -> 우선순위의 문제같기도 .. 혹은 Input초기화 

* 위 게임과 같은 Damageble 게임 구현시, 가장 1차원적인 방법이 해당 오브젝트의 tag를 확인하여 Damage 처리하는 방식이다. 그렇기에 금일작업에 IDamageble 인터페이스를 통한 구현을 진행하였다. 

* Enemy의 스캔 및 접근에 대한 구현방식은 유니티에서 제공하는 간단한 AI 방식인 Navigation을 사용하여 구현할 예정이다. 

Navigation

유니티는 한위치에서 다른위치로서의 거리를 자동으로 계산하고, 실시간으로 장애물을 피하며 이동하는 위의 네가지 네비게이션을 제공한다. 

 

유니티 애니메이션 우선순위 관련 문제 해결 : 아래의 Animator상의 OnAir에서 플레이어 오브젝트가 수행할 애니메이션은 기본적으로 JumpLand 이지만, R이 입력되면 JumpAttack이 수행되어야한다. 하지만 R을 점프할때 눌러도 JumpAttack을 수행하지 않는 문제가 발생하였다. 이는 아래와 같이 애니메이션을 수행할 우선순위를 잡아주니 정상적으로 해결되었다.

Enemy가 이동가능한 반경을 Bake한 모습

 

 

 

개인프로젝트를 진행하면서 느끼는 점은,단순히 기능구현도 좋지만 구조적으로 유지보수가 편하고 에러가 발생할 확률을 줄여주며 누구나 쉽게 이해할수있고 간략한 코드가 제일 잘 짜여진 코드라고 생각하였다.

앞으로도 위와 같은 코드를 짜서 프로젝트에 직접 대입해 좋은 결과물을 최종적으로 얻었으면 좋겠다.

 


유데미코리아 바로가기 : https://bit.ly/3b8JGeD

 

Udemy Korea - 실용적인 온라인 강의, 글로벌 전문가에게 배워보세요. | Udemy Korea

유데미코리아 AI, 파이썬, 리엑트, 자바, 노션, 디자인, UI, UIX, 기획 등 전문가의 온라인 강의를 제공하고 있습니다.

www.udemykorea.com

본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.

 

#유데미, #유데미부트캠프, #취업부트캠프, #개발자부트캠프, #IT부트캠프, #부트캠프후기

 

 

 

728x90