NullReferenceException을 기대했는데....
326
投稿した質問数 81
쓰신 코드 보니까 Destroy 관련해서 NullReferenceException을 유도해낼 수 있을거라 생각을 했는데 그렇지가 않아서 질문을 드립니다
public List<GameObject> objs;
void Start()
{
objs = new List<GameObject>();
GameObject go1 = new GameObject();
GameObject go2 = new GameObject();
objs.Add(go1);
//objs.Add(go2);
//Destroy(objs[0]);
Destroy(go1);
//objs.RemoveAt(0);
print(go1.name);
}
이게 제가 테스트 해본 내용입니다
제 생각에는 objs에 go1을 추가하고,
Destroy(go1); 실제 go1을 없애고
objs.RemoveAt(0)을 하지 않았기에 해당 리스트의 참조변수는 남아있으나 참조 대상이 없어져버려서(go1) nullReferenceException이 일어날거라고 생각을 했습니다
결과는 일어나지 않았고 그래서 그 앞에 Destroy(objs[0]);을 추가 해봤지만 print(go1.name);는 앞선 경우와 마찬가지로 작동을 하더군요
제 생각에 이러는 이유는 계층뷰에서 해당 게임 오브젝트가 존재해서 같은데 이유가 뭔가요?
回答 1
1
안녕하세요. 요즘 바빠서 답변이 늦었습니다. 죄송합니다.
Destroy 가 되었어도 현재 Start 에서 Destroy 를 실행했기에 현재 프레임이 끝나고 나서 다음 프레임에서 print(go1.name); 을 실행해야 오류가 발생합니다.
업데이트에서 실행해보면 오류를 발생시킬수 있는데 이 경우 go1 과 go2 를 멤버로 잡아야하겠죠.
아래와 같이 하면 오류가 발생합니다. 삭제 하고 나서 다시 접근하니까요.
public class TestScript : MonoBehaviour
{
public List<GameObject> objs;
GameObject go1;
GameObject go2;
void Start()
{
objs = new List<GameObject>();
GameObject go1 = new GameObject();
go1.name = "go1";
GameObject go2 = new GameObject();
go2.name = "go2";
objs.Add(go1);
Destroy(go1);
print(go1.name);
}
// Update is called once per frame
void Update()
{
print(go1.name);
}
}
0
이게 라이프 사이클이랑 관련 있을거라고는 생각을 못했네요
어쨋거나 한 프레임에서 일어나는 거니까 Start()함수가 실행된 바로 그 프레임에서 만들고, 추가하고 지우고 그리고 다시 접근하는 이 모든게 다 일어나는 거라 생각했습니다
그렇다면, 메모리 인스턴스의 새로고침(?)은 프레임 단위로 일어난다고 봐도 될 까요?
0
네 현재 프레임이 끝나고 나서 일어납니다. 다음프레임에서는 적용되니까요.
어디서 일어나는지는 현재 프레임이 끝나고 나서 적용된다고 예상할수 있죠.
다음프레임에 적용된다고 생각하셔도 무리 없을 것 같습니다.
Part4 유니티로 세가지의 게임만들기 강의도 들을 수 있는건가요?
0
263
1
플레이 버튼이 없어요
0
758
1
전체 연습문제 다운방법, 현재 연습문제 파일이 깨져서 열립니다.
0
377
2
연습문제파일
0
262
1
중단점을 찾을수가 없습니다
0
470
1
10분 24초에 만약 b를 0으로 둘시, "나눗셈이 불가능"대신 attempt to divide by zero 오류가 뜹니다.
0
313
1
if문의 비교(10분56초~59초사이)
0
219
1
C#에서의 메모리 관리
0
273
1
Heap 과 Stack
0
303
1
앞선 강의에서 Instance와 연관 지어서
0
271
3
Instance와 variable
0
243
1
구조체 6번째 강의
0
190
1
제공 함수는 실제 구현하는 몸체가 없다
1
343
1
인자와 매개변수
1
215
1
코드에서 new GameObject를 실행했을 때 유니티 화면상의 상태 문의
2
624
1
유니티 콘솔화면에 나타난 내용 문의
1
353
1
멤버변수를 전역변수라고 생각해도 되는지요?
1
1227
1
출력만 있는 함수 관련 질문
1
422
2
문제 파일은 어디에 있나요?
0
235
1
제 윈도우용 visual studio에서는 코드행 앞에 아무것도 안찍힙니다.
0
321
2
혹 강의내용을 캡쳐해서 블로그에 공개해도 되나요?
0
365
1
비쥬얼 스튜디오에서 강의대로 입력했는데 콘솔창에 아무것도 안나타나네요.
0
264
1
저는 윈도우즈에서 모니터를 두개로 나눠 강의영상과 Unity작업창으로 나눠서 하고 있는데 무슨 얘긴지 하나도 모르겠어요
0
231
2
갑자기 파일을 추가하려면 과정을 설명해 주셔야 하는데 그냥 파일부터 추가하네요.
0
172
1

