방프리

20.03.17 List 자료구조 안에 Transform 정리하기 본문

GameEngine/UnityEngine

20.03.17 List 자료구조 안에 Transform 정리하기

방프리 2020. 3. 17. 23:13

배치 관련 기능을 추가할 때 가장 염두해야할 사항 중 하나가 바로 상태 되돌리기다.

기본적으로 제공해야하는 기능이며, 없으면 유저한테 가장 욕 먹기 쉬운 부분이라고 생각한다.

(실제로 이 기능이 없으면 한 번 수정할 때 너무 번거롭기 때문이다.)

이 부분을 제작하고 싶어서 각각의 오브젝트에 List<>를 넣어 이동 전 상태를 저장하고 오브젝트를 편집할 때마다

상태값인 Transform을 넣어보기로 했다.

관련 코드 1-1
관련코드 1-2

키를 누르면 오브젝트가 이동, 키를 누른 기점을 중심으로 List에 현재 위치값을 저장하도록 했다. 

(누르는 것이 수정을 진행하기 위한 준비동작이라 가정한다.)

List에 저장한 결과값....

하지만 충격적이게도 전부 다 같은 값이 나오게 된다. 회전값과 크기 값은 수정하지 않아서 똑같다 할지라도

위치값은 계속 움직여서 수정이 되어야 하는데 4개의 결과값 모두 같다.

개인적인 생각으로는 Transform에 있는 값을 대입했을 때 값이 복사가 되는 것이 아닌 원본의 것을 

그대로 가져다가 사용하는 것 같다. 

그러면 어쩔 수 없이 새로 생성해서 수정해줘야지

수정 2-1
수정 2-2

Transform과 같은 구조의 구조체를 생성하여 List<> 객체를 생성하였고,

Add를 할 때마다 새로이 위치값을 생성해주었다.

Transform.... 너란 녀석..... 

(참고로 해외 사이트 찾아보니 어떤 사람들은 새로 GameObject 생성한 후에 그곳에 있는 Transform을 가져오는

방식으로 구현한 샘플도 있었다. 하지만 그 방법은 쓸데없는 데이터 생성에 GetComponent까지 써가면서 접근해야 하기

때문에 최적화 관점에서 보기에는 그다지 좋은 방법은 아닌 듯 싶다.)

https://answers.unity.com/questions/823966/add-transform-to-array.html

Comments