해결된 질문
작성
·
148
0
6버전이 뭐가 많이 다른가 봅니다.
코드상에도 Init 당시에
Pool 에서 SetActive True로 바꿔지면
invoke > Init으로 연결되면서
이미 화면에 나타난 상태라서 Update돌기전에
1프레임정도 사라지기전 위치가 표시에서 떠있다가
이후 Update문을 타면서 원래자리로 찾아가는 현상이 발생했습니다.
아무리봐도 무조건 발생할것 같은 상황같았는데, 강사님 화면에서 아무리 느리게봐도 그렇게 안보이더라구요 ㅜㅜ
그래서 Init에다가 Update문에 있는 위치동기화를 1회해주었는데 Cam이 Null인상태였습니다 Start가 먹지 않는것 같아 로그를 찍어보니
Init이후에 Start가 호출이 되더라구요 그래서 Start를 Awake로 변경했더니 해결했습니다.
그리고 tr.parent 도 자꾸 warning떠서
tr.SetParent(tr~)로 변경해서 해결했습니다.
버전이 달라서 그런가 이슈가 좀 있네요ㅜㅜ
답변 1
0
Unity 6에서는 기존과 동일하게 SetActive(true) 시점에 Awake → OnEnable → Start가 호출되긴 하지만,
오브젝트 풀링이나 사용자 정의 Init 흐름에서의 동기화 타이밍 차이로 인해
Unity 5에선 문제가 없던 구조가 Unity 6에선 타이밍 이슈를 유발할 수 있는 상황이 발생하는 것 같습니다.
특히 Init에서 Start보다 먼저 접근할 경우 참조가 null인 문제가 생길 수 있어서,
Start를 Awake로 옮기는 식의 대응이 필요해질 수 있습니다.
또한 Transform.parent 사용에 있어 Unity 6에서 경고가 발생하는 건,
해당 API가 더 명시적인 방식(SetParent)을 권장하도록 바뀌었기 때문으로 보입니다.
Unity는 버전이 올라갈 때마다 내부적으로 일부 동작 방식이나 권장 흐름이 변경되기 마련이고,
Unity 6 역시 초기에는 이런 적응이 필요하지만, 전반적으로 성능 최적화나 구조적 안정성 면에서 긍정적인 개선들이 이루어진 버전으로 확신하니 참고 부탁드리겠습니다 🙂