오늘 학습 키워드
GameObject 찾기
오늘 학습 한 내용을 나만의 언어로 정리하기
다음 씬에서 GameObject 찾기
그러려면 씬이 로딩되었는지를 알아야 함. 씬이 로딩되었을 때 실행할 함수를 만들 수 있음.
// 씬이 로딩될때마다 불러질 함수를 추가
SceneManager.sceneLoaded += OnSceneLoaded;
...
public void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.name == "HorrorGameScene")
{
CursorFaster.instance.HorrorSceneAgain();
}
}
여기서 scene은 불러와진 씬 데이터를, mode는 불러온 방법을 의미함 기본값은 single임.
public enum LoadSceneMode
{
Single, // 씬 하나만 불러왔을 때
Additive // 현재 씬 위에 다른 씬을 또 불러온 형태일 때
}
학습하며 겪었던 문제점 & 에러
문제 1
- 문제&에러에 대한 정의
팀원분께서 이런 오류가 뜨셨음
The type or namespace name 'EditorApplication' does not exist in the namespace 'UnityEditor' (are you missing an assembly reference?)
- 내가 한 시도
Editor 폴더에 파일을 집어넣는 방법을 쓰셨는데… 문제는 이렇게하면 GameObject에 안올라감
- 해결 방법
- Edit → Preferences → External Tools → Regenerate Project Files로 패키지 다시 동기화.
- 실패!
- Window → Package Manager → Visual Studio Editor 재설치
- 실패!
- 전처리 구문 끼워넣기
- 성공!
- 새롭게 알게 된 점
// 전처리 구문
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#endif
Editor 폴더에 스크립트를 써야했던 이유는, Editor 안에 넣으면 자동으로 빌드 때 빠지니까 그럼.
- 이 문제&에러를 다시 만나게 되었다면?
전처리문을 확실하게 확인해봐야겠다!
문제 2
- 문제&에러에 대한 정의
마우스를 따라오는 객체가 마우스랑 부딪힌 뒤에 잠깐의 시간이 지난 후 게임을 강제종료 하려고 했으나, Destroy로 gameobject를 삭제하다보니 게임 종료 구문이 실행이 안됐음.
- 내가 한 시도
ienumerator 로 코루틴 만들어서 OnDestroy 때 invoke 했는데, 그게 사라지면서 애초에 안되나봄.
- 해결 방법
GameObject OnDestroy에서 GameManager한테 신호 주고, GameManager는 신호 받으면 일정 초 후에 게임 꺼지게 했음.
- 새롭게 알게 된 점
OnDestroy에 Invoke가 있어도 실행이 안된다. 이미 죽어버려서..
- 이 문제&에러를 다시 만나게 되었다면?
다른 살아있는 오브젝트한테 위임(?) 해야 할 듯
문제 3
- 문제&에러에 대한 정의
씬을 넘겨서 부르려는 함수가 너무 자주 불러졌음.
...
SceneManager.sceneLoaded += OnSceneLoaded;
...
public void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.name == "HorrorGameScene")
{
CursorFaster.instance.HorrorSceneAgain();
}
}
- 해결 방법
이벤트에 등록만 하고 삭제를 안해서 계속 등록만 되고 있었음.
그래서 삭제시켜줘야됨
public void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.name == "HorrorGameScene")
{
CursorFaster.instance.HorrorSceneAgain();
}
SceneManager.sceneLoaded -= OnSceneLoaded;
}
- 새롭게 알게 된 점
이벤트를 계속 등록만 하면 여러번 불린다
- 이 문제&에러를 다시 만나게 되었다면?
함수 부르고 삭제하는거 잊지않기
내일 학습 할 것은 무엇인지
유니티 내장 함수 실행 순서를 조금 더 공부해 봐야 할 것 같다.