팀 프로젝트 발표가 끝나고, 개인프로젝트 피드백 내용을 확인하는데 버프 시스템에 오류가 발생한다는 피드백을 받았습니다.
해당 버그를 확인하고, 수정하고자 프로젝트를 켜자마자 문제가 보였습니다.
프리팹으로 빼두었던 버프시간 UI가 UI에 남아있던것을 확인하고 왜 오류가 발생하는지 알 수 있었습니다.
이 상태 그대로 실행하여 버프 아이템을 사용할경우, 이미 파괴된 게임오브젝트에 접근을 시도하였다는 내용의 오류가 발생합니다.
제가 작성한 버프 UI는 플레이어의 버프가 추가될경우 변수로 등록한 게임오브젝트를 생성하고, 시간이 지나면 UI는 자체 스크립트로 인해 파괴되는방식이였습니다.
public class BuffListUI : MonoBehaviour
{
public GameObject buffInfoUI;
private Dictionary<int, GameObject> buffInfos = new Dictionary<int, GameObject>();
private void Start()
{
CharacterManager.Instance.Player.buffs.onAddBuff += AddBuffInfo;
}
public void AddBuffInfo(BuffData buff)
{
if (buffInfos.ContainsKey(buff.buffId))
{
Destroy(buffInfos[buff.buffId]);
RemoveKey(buff.buffId);
}
buffInfos.Add(buff.buffId, Instantiate(buffInfoUI, transform));
buffInfos[buff.buffId].GetComponent<BuffInfoUI>().SetUp(buff);
buffInfos[buff.buffId].GetComponent<BuffInfoUI>().onDestroy += RemoveKey;
}
private void RemoveKey(int buffId)
{
buffInfos.Remove(buffId);
}
}
여기서, public GameObject buffInfoUI 를 따로 빼둔 프리팹으로 지정한것이 아닌, 게임 씬에 올라가있던 테스트용 UI가 지정한 상태였습니다.
이러면 등록한 오브젝트는 씬에서 파괴되었는데, 파괴된 오브젝트를 사용하려고 하면서 버그가 발생하던것이였습니다.
해당 내용을 확인후, 씬에서 테스트용 UI를 삭제하고 프리팹을 등록해두었습니다.
수정 후, 문제없이 버프 아이템이 사용되는것을 볼 수 있었습니다.
버프 관련 내용을 과제 제출 후, 남은시간동안 급하게 만들었었습니다.
이때, 버프가 정상적으로 작동하는것을 확인하고 깃에 커밋을 했었는데 유니티를 저장하지 않고 커밋을 해서 씬의 프리팹 관련 내용이 저장되지 않아 발생한 버그로 보입니다.
'내일배움캠프 > TIL' 카테고리의 다른 글
특강 정리 - 직렬화 2차특강 (1) | 2024.11.11 |
---|---|
특강 정리 - 객체지향, UGS (0) | 2024.11.08 |
유니티 팀프로젝트 숙련주차 - 발표 시연영상 (0) | 2024.11.06 |
유니티 숙련주차 팀프로젝트 - 병합 완료 (0) | 2024.11.05 |
직렬화 특강 정리 - CSV, XML, Json 등 (0) | 2024.11.04 |