-
unity Unity / C# - 스터디 정리카테고리 없음 2022. 2. 12. 00:47
원하는 기능의 제작은 끝났고, 손으로 그리는 동작도에도 실행에 문제는 없어 보였다.그러나 연결된 객체의 크기가 바뀌면서 필요한 기능을 구현하기 위해서는 틀을 다시 뒤집어 놓아야 할 것이 분명해졌다.스케일 설정 중 주의가 필요할 것.우선 스케일 설정에 주의해야 할 사항이다.
위와 같은 구조를 가진 오브젝트가 있고, Water Tank가 Game Area에 붙거나 제외된다고 가정하자. 붙거나 떼어졌을 때 계층 구조로 복귀해야 한다는 조건도 추가하자.
문제는 여기서 발생한다. 붙였다 하는 과정은 앞의 스터디 정리문을 보면 알 수 있듯이 단순히 parent 설정만 잘 하면 구현 가능하다.
Game Area와 Water Tank Prefab의 스케일 크기가 다르다면, 오브젝트가 제거되었으나 붙는 과정에서 Water Tank가 Water Tank Prefab과 Game Area 각각의 스케일에 따라 크기가 바뀌게 된다.여기서 객체를 떼어내어 붙여넣기 내부 함수가 실행되기 전에 다음 프레임으로 넘어가 크기가 이상하게 변하는 현상이 발생한다.
따라서 가장 이상적인 방법은 특정 객체가 붙었다 뗄 수 있는 객체는 붙었다 하는 객체의 크기가 변하지 않도록 스케일을 설정해야 한다는 것이다.
예) GameArea Scale:Vector3.oneWaterTankPrefab:Vector3.oneprefab 구상의 중요성 다음으로 prefab이다.사실 실현 자체에는 큰 문제가 없어 일반적인 게임 제작 과정에서 문제가 될 것 같지는 않다.
그러나 특정 기능을 하는 객체 전체를 묶어서 생성하거나 파괴할 때는 이 prefab의 범위를 잘 정해야 한다.
대표적인 예로 player가 있다.1인 플레이 게임에서는 큰 문제가 되지 않지만, 멀티 플레이로 고려할 경우에는 prefab의 범위를 변경시켜야 한다.1인 플레이에서는 UI의 위치가 계층의 가장 상위에 있어도 되지만, 멀티플레이 혹은 다중 사용자가 존재하는 환경에서는 prefab 내부에 있는 것이 실장하기 쉽다.
따라서 위와 같이 p layer 내부에 UI 및 여러 효과와 같은 것을 함께 넣음으로써 초기에 구상을 하는 것이 중요하다(Player라는 프리패브로 모든 것이 움직이는 것이 아니라 사용자가 조작하는 오브젝트와 Mini MapCamera에만 따라 움직이도록 설정하였다.)
prefab을 이용하는 것에 대한 장점은 아래 문장을 통해 확인할 수 있다.
https://docs.unity3d.com/kr/2018.4/Manual/Prefabs.htmlUnity의 프리패브 시스템은 게임 오브젝트를 생성, 설정, 저장할 수 있으며, 게임 오브젝트의 모든 컴포넌트, 속성 값, 자 게임 오브젝트를 재사용 가능한 어셋으로 만들 수 있습니다. 프리패브 어셋은 장면에 새로운 프리패브 인스턴스를 작성하기 위한 템플릿 역할을 합니다.docs.unity3d.com