Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

시작은 0부터

7. 프리팹 인스턴스시 부모 오브젝트 설정에서 에러가 날 때 본문

Unity 학습일지

7. 프리팹 인스턴스시 부모 오브젝트 설정에서 에러가 날 때

0base 2022. 8. 15. 01:50

플레이어가 총알을 발사할 때, 적이 생성될 때, 적이 총알을 발사할 때마다 프리팹이 씬에 계속 생성되어 프리팹의 구분이 어려워졌다. 이를 해소하기 위해 프리팹이 생성될 떄 생성되는 위치를 지정해줄 수 있다는 사실을 알게 되어, 사용방법을 구글링으로 찾아봤다.

Instantiate(Prefab, transform.position, transform.rotation)
Prefab.transform.parent = this.transform

생성후 생성한 오브젝트의 부모위치를 해당 위치로 지정한다는 원리인데 이걸 프리팹으로 할 경우 프리팹을 생성하기도 전에 부모 위치를 설정하려고해서 오류가 났었다. 이를 해결하기 위해서 프리팹의 경우에는 생성 후, 생성된 프리팹 안에서 부모 위치를 설정하는 것으로 해야 오류가 나지 않는다.

 

지금은 원하는 오브젝트를 부모로 설정하여 프리팹을 그 안에서 생성하도록 설정은 했는데, 이걸 풀(Pool)로 아직 구현하지 못했다. 생성을 하고 이후에는 SetActive true/false로 활성화/비활성화를 반복하면서 오브젝트를 재사용한다는 원리는 알겠는데 아직 원만하게 적용을 하지 못했다.

 

플레이어 총알 오브젝트가 적과 충돌시 파티클오브젝트가 켜지는 방법을 구현했다. 충돌할 때 충돌했던 총알 위치에 Instantiate 함수로 파티클오브젝트를 생성했는데 그렇게 하다보니 불필요하게 생성을 많이 하는 것 같아서 충돌 이펙트인 파티클오브젝트도 풀로 만들어서 SetActive로 관리해야할 것 같다. 기존에 모든 오브젝트들의 이벤트들은 다 생성/제거 함수로 구현해놨는데 아직은 큰 체감을 느끼진 못하겠지만 어쨋든 메모리에 좋지 않다고 하니 될수있는 만큼 최소화하고 바꿔야겠다.

 

그리고 오브젝트간의 컴포넌트 공유, 자식오브젝트와 부모오브젝트, 그리고 외부 오브젝트 등등 여러 가지 상황에 따른 오브젝트와 컴포넌트 호출 및 사용이 익숙해질 때까지 계속 다양한 방법으로 시도해봐야겠다.