내일배움캠프 20일차 TIL - Instantiate 사용법 몇가지

권태하·2024년 5월 13일
0
post-thumbnail

Intantiate

개인 프로젝트를 하면서 오브젝트를 여러개 생성하고 싶었고, 이를 위해 반복문과 Instantiate를 통해 방법을 찾고 있었다.

접근법

기존에 썼던 방법 중에 기억이 났던 것은

Instantiate(gameObject);  // 오브젝트 생성

Instantiate(gameObject, transform); // 오브젝트를 해당 스크립트가 들어간 오브젝트의 자식 으로 생성

Instantiate(gameObject, position값, Quaternion.identity);
// 오브젝트를 position으로 정해진 위치에 생성

이렇게가 3개였다

생성할 오브젝트는 텍스트UI 오브젝트였기 때문에 Canvas라는 오브젝트의 자식으로 들어가야 했고, 반복문으로 생성하면서 이전에 생성됬던 것으로부터 일정 거리를 두고 생성하고 싶었다.

잘못된 것들

이를 위해

Instantiate(gameObject, transform); 

이렇게 처음엔 접근해 봤는데, 캔버스 내에서 위치 조정이 안되었다.

GetComponentInChildren<>();

으로 생성한 오브젝트의 RectTransform을 가져와서 포지션을 변경하는 것을 시도해 봤는데, 계속해서 생성한 오브젝트가 모두 같은 포지션을 가지는 결과를 가져왔다.

좀 더 검색을 해보니 GetComponentInChildren은 자식 오브젝트가 동일한 Component를 가지면 모두 가져와서 조정한다는 것 같다.

이것을 List로 관리해서 사용할 수 있다는 것 같은데, 몇 번 시도해 보다가 안되서 포기했다.

Instantiate(gameObject, position값, Quaternion.identity);

다음으로 이것을 시도했는데, 먼저 위치를 정해주고 gameObject.transform.parent를 이용해 캔버스 자식 오브젝트로 넣어주려고 했는데 이것 역시 동작을 안했다.

원인은 모르겠다...

해결법

방법은 생각보다 간단했는데, C#의 명령어 사용 도움말 부분을 통해 방법을 알아냈다.


이렇게 명령어를 사용했을 때, 용도와 사용법을 알려주는데, 화살표를 보면 .Instantiate는 10가지 방법으로 사용 가능하다고 써있다.

쭉 내리면,

이렇게 Vector3와 transform을 통해 위치와 부모 오브젝트를 모두 기입해 줄 수 있는 방법이 존재했다.

별거 아닌 사용법이지만, 기초적인 사용 방법을 잘 모르는 상황이다보니 이런 도움말이 꽤 유용한 것 같고 다음에도 기존에 쓰던 방법 외에도 어떻게 사용할 수 있는지 찾아볼 때 이렇게 접근해봐야할 것 같다.

profile
스터디 로그

0개의 댓글