2022. 5. 14. 15:08ㆍDIY/[완료][Unity] Tilt Ball
아래 Stack Fall 이란 게임에서는
장애물을 부술 때 장애물이 파괴되어 날라가는 효과를 주었다.
이를 Tilt Ball 프로젝트에 적용시켜보자.
https://docs.unity3d.com/kr/2020.3/Manual/InstantiatingPrefabs.html
런타임 시점에 프리팹 인스턴스화 - Unity 매뉴얼
프리팹은 복잡한 게임 오브젝트나 게임 오브젝트 컬렉션을 런타임 시점에 인스턴스화하려는 경우에 매우 유용합니다. 코드를 사용하여 처음부터 게임 오브젝트를 만드는 것보다는 코드를 사용
docs.unity3d.com
종종 게임에서 캐릭터, 차량, 건물 또는 기타 에셋을
“온전한” 상태에서 “파괴된” 상태로 전환해야 할 때가 있습니다.
이 경우 게임 오브젝트의 온전한 버전을 수정
(예: 스크립트 제거, Rigidbody 컴포넌트 추가 등)하는 것보다는
온전한 게임 오브젝트를 삭제한 후
인스턴스화된 파괴된 프리팹으로 교체하는 것이
훨씬 더 효율적이고 효과적입니다.
Tilt ball 프로젝트에서는
조각난 벽 오브젝트와
OnEnable 이벤트 함수를 사용하여 벽이 부서지는 효과를 연출할 것이다.
또한 조각 오브젝트의 생성이 매우 많이 일어날 것이므로,
가비지 컬렉션의 잦은 호출을 방지하기 위해
오브젝트 풀링을 할 것이다.
유니티 오브젝트 풀링(Object pooling)
1. 오브젝트 풀링(Object pooling) 오브젝트 풀링은 개체를 할당하고 파괴하는 대신, 미리 오브젝트 집합(Object Pool)을 생성하고, 필요할 때에 불러와 사용하고, 사용한 개체를 다시 개체 집합에 반환
notyu.tistory.com
벽 색깔별로 잔해 오브젝트 풀장을 가지고 있다가,
벽이 부서질 때 해당 풀장에서 꺼내다 쓴다.
꺼내다 쓸 때 잔해 오브젝트그룹의 회전 값을 꺼내다 쓰는 벽의 회전값과 맞춘다.
(잔해 오브젝트를 불러오는 원본 오브젝트와 잔해 오브젝트와의 회전값은 동기화해두었음.)
활성화된 잔해 오브젝트는 OnEnable 함수의 코드를 실행하고,
몇초 뒤 풀장에 다시 Release된다.
블렌더에서 잔해 오브젝트의 각도를 올바르게 설정해야
벽이 조각나서 날아가는 효과를 온전히 연출할 수 있다.
+ 8월 7일
색마다 다른 조각 오브젝트가 아니라, 동일한 조각 오브젝트들을 준비한다.
그리고 어떤 색의 잔해인지만 식별할 수 있도록 0, 1, 2같은 정수형 매개변수를 받고,
그 정수형 값을 도넛의 어느 각도에서 생성할 것인지 결정하는 공식에 대입한다.
공식 : 생성 각도 = 기본 각도 + (도넛 사이의 각도 차이 * (param))
그리고 부모 오브젝트의 색과 같은 색의 조각 오브젝트를 생성시키려면,
Pool 객체를 할당할 때 actionOnGet에서 정수형 값에 따라 색 머티리얼을 변경시키거나,
OnEnable 함수에서 변경시킬 수 있겠다.
+ 다른 방법도 생각났다.
이 방법은 부모 오브젝트로부터 일일이 이벤트를 받지 않아도 된다.
조각 오브젝트를 자식 오브젝트로 포함시켜 넣는 것이다.
이러면 각도 계산을 생략해도 되고,
색 변경도 OnEnable에서 하면 된다.
조각이 생성되어 날아가고,
다시 원상태의 도넛으로 돌릴 때는
도넛의 Reset 함수에서 각 색 조각들을 SetActive할 때
그 색조각들의 OnEnable에서 잔해 조각 오브젝트들을 비활성화시킨다.
그리고 색조각이 비활성화될 때 잔해 조각 오브젝트를 다시 활성화시키고
위치를 초기화시킨다.
'DIY > [완료][Unity] Tilt Ball' 카테고리의 다른 글
[출시 완료][Unity] Tilt Ball 완성시키기 (0) | 2023.01.05 |
---|---|
[Tilt Ball] 프로파일러 사용하기 (0) | 2022.06.05 |
Tilt Ball - 5 (0) | 2022.03.16 |
Tilt Ball - 4 (0) | 2022.03.14 |
Tilt Ball - 2 (0) | 2022.01.19 |