<오브젝트 풀 구현>
오브젝트 풀에 들어가는 개체는 (나중에 새롭게 추가될 여지가 다분한 ) 게임 리소스의 일종이라 생각하기 때문에
리소스 관리에서의 편리성을 도모하였습니다. (에디터 상에서 쉽게 프리펩 샘플을 할당 시키고 동일한 방식으로 접근이 가능하도록 함)
즉 모든 GameObject 타입에 대해 enumType으로 세부 분류가 정해지면 동일한 방식으로 모든 오브젝트에 대한 PoolList가 만들어 집니다.
유니티 에디터 상에서 오브젝트풀 매니저 클래스에 컨테이너 (scriptableObject)의 형태로 순서에 상관없이 컨테이너 리스트에 끼워 넣기만 하면 ->
컨테이너의 스펙(enumType과 그에 해당하는 분류 index, size , size에 따른 컨테이너 저장소)에 따라 초기화 구간에서 희망하는 PoolSize에 맞게
게임 오브젝트가 컨테이너 안 저장소(List)에 적재됩니다.
BodyMover 전용의 poolController 에서 pool에 적재된 오브젝트를 꺼내오는 명령어를 실행하여 해당 게임 오브젝트를 언제든 사용할 수 있습니다.
ObjectPool. 관련 클래스
toggle code
PoolItem
toggle code
PoolContainer
toggle code
SpawnPoolList
toggle code
ObjectPoolManager
Mover. 오브젝트 스폰 컨트롤러 / 스폰 오브젝트 대상
toggle code
SpawnController - 오브젝트는 게임 시작 시점 또는 게임 중간에 스폰하게 되는데 부드러운 움직임의 등장 효과를 주기 위해 포물선 회전 등 다양한 코루틴 메서드 구현
toggle code
BodyMover - 매카님 애니메이션 전환 처리와 주로 enable과 disable 사이에 초기값 설정에 대한 변수할당을 다룬다.
Title. 스폰 이후 움직이기 직전까지의 과정
Spawn 컨트롤러는 초기화 과정에서 모서리에 해당하는 부분 -> rotatorBlock의 Transform을 배열로 참조합니다.
(이들 transform의 자식객체로 면의 ClockWise 방향과 CounterClockWise를 가리키는 방향 벡터가 포함되어 있습니다.)
어느 쪽이든 물체 스폰 이후, random으로 위치하여야 할 포지션이 정해지면 스폰(Vector3.zero) 지점에서 해당 포지션으로
포지션 이동과 로테이션 회전을 다루는 코루틴이 실행됩니다.
Quaternion.Lerp() 메서드에서 사용되는 파라미터 값인 time은 미리 정의해둔 int 형 확장 메서드에 의해 계산 되어 리턴됩니다.
(SmoorherStep과 Exponential 그리고 PalabolaMethod 등을 적절히 혼용하여 자연스러운 움직임을 구사하도록 하였습니다.)
스폰 직후에는 충돌을 감지하는 센서가 반응하면 안되기에 센서인 본체 active 직후 자식객체가 활성화 되기 까지 약간의 시간딜레이를 두었습니다.
애니메이션을 다루는 메카님 전환 상태는 enumType Propoerty를 사용해 타입 값을 입력했을 때 SetTrigger하여 해당 전이가 손쉽고
코드상에서는 가독성있게 보여지도록 구현했습니다. 최적화를 위해 애니메이터 파라미터 접근은 string이 아닌 Animator.StringToHash("")로 하였고
mover 객체의 이동속도에 대한 애니메이션 전이를 (walk-run)블렌드 트리로 구성하여 속도 변화에 따른 모션 또한 부드럽게 연결되도록 하였습니다.
'MyProjects > PuzzleGame' 카테고리의 다른 글
6. 관리매니저 - UI Canvas 와 Scene 관리 (0) | 2018.08.04 |
---|---|
5. 동작 메커니즘 - 스테이지 설계와 게임 플레이 (0) | 2018.08.02 |
3. 동작 메커니즘 - HoleBlock - Queue 조작 (0) | 2018.08.02 |
2. 레벨 디자인 - Block 요소의 방향성과 물체의 회전 (0) | 2018.08.02 |
1. 레벨 디자인 - 블락 요소 배열 배치 (0) | 2018.08.02 |