유니티에서 아래의 코드로 List를 활용해서 게임오브젝트를 생성, 삭제하고 초기화 하는데, 오류가 발생함.
- 주로 Q랑 R을 광클했을때 오류 발생. 천천히 하면 오류 안나타남
using System.Collections.Generic;
using UnityEngine;
public class ListTest : MonoBehaviour
{
public List<GameObject> gameObjectslist = new List<GameObject>();
void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
GameObject test = new GameObject();
gameObjectslist.Add(test);
}
if (Input.GetKeyDown(KeyCode.R))
{
for(int i = 0; i < gameObjectslist.Count; i++)
{
Destroy(gameObjectslist[i]);
gameObjectslist[i] = null;
}
gameObjectslist.Clear();
}
}
}
- 원인과 해결방법을 ChatGPT에 물어봄.
Unity에서 발생한 오류는 주로 리스트 내 객체를 삭제할 때 SerializedProperty와 관련된 문제가 발생할 수 있습니다. 특히 객체를 파괴한 후 에디터에서 그 객체를 여전히 참조하려 할 때 문제가 생길 수 있습니다.
해결 방안 코드 :
for (int i = 0; i < gameObjectslist.Count; i++)
{
if (gameObjectslist[i] != null)
{
Destroy(gameObjectslist[i]);
gameObjectslist[i] = null;
}
}
이 문제는 주로 Unity 에디터에서 발생하는 오류이지만, 완성된 빌드에서도 유사한 문제가 발생할 수 있습니다. 그러나 빌드에서는 오류가 발생하지 않을 가능성이 높습니다. 그 이유는 Unity 에디터에서는 객체와 메모리 관리, 특히 SerializedProperty 시스템이 더 복잡하게 동작하기 때문입니다.
에디터에서는 오브젝트의 참조를 추적하고, 에디터 UI에서 객체의 상태를 실시간으로 업데이트하려고 시도하면서 SerializedProperty 관련 오류가 발생할 수 있습니다. 반면, 빌드된 게임에서는 이런 에디터 관련 프로세스가 실행되지 않으므로 같은 상황에서도 문제가 발생하지 않을 수 있습니다.
이 오류는 대부분 에디터에서 발생하는 문제일 가능성이 높지만, 완성된 빌드에서도 안정적인 동작을 보장하려면 코드를 수정하는 것이 좋습니다.
유니티 적 몬스터 이동, 공격, 사망 설정하기 (1) | 2024.09.16 |
---|---|
유니티 아이템,총알 습득하기 (0) | 2024.09.16 |
유니티 총 타입 별로 총알 구분하기 (0) | 2024.09.16 |
유니티 플레이어 무기 교체(키입력, 마우스휠), 오류 해결 (1) | 2024.09.14 |
유니티 총 줌인, 줌아웃, 확대, 축소 만들기 (0) | 2024.09.12 |