Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준 11726번 C++
- 백준
- 백준 2193번 c++
- 풀이
- bfs
- rigidbody.position
- TOPCIT 문제 유형
- 유니티 Rigidbody 이동
- 배열 stack overflow
- c++
- UML Diagram 정리
- long int 의 차이
- 백준 10844번 c++
- 유니티
- 프로그래머스 단체사진 찍기 C++
- 2644번
- 백준 10799번 c++
- 코드
- 백준 17299번 c++
- 차이
- 1699번
- rigidbody.Moveposition
- 유니티 LTS
- 백준 2225번 c++
- 프로그래머스 가장 큰 수 C++
- 로블록스 script local script 차이
- 플레이어 이동
- TOPCIT 후기
- 유니티 꿀팁
- transform.position
Archives
- Today
- Total
Kiki Devlog
씬 이동 시 오브젝트에 할당한 다른 오브젝트들을 잃어버리는 에러 본문
728x90
Awake() 는 씬이 처음 시작될때 호출됨.
한 script에서 캐싱으로 가져와서 사용하는 다른 오브젝트들은 보통 Awake() 에서 캐싱을 해오는데. (아래 코드처럼)
private void Awake()
{
anim = GetComponentInChildren<Animator>();
rigid = GetComponent<Rigidbody>();
}
이 스크립트가 오브젝트에 붙어있는게 아닌, 아래 코드처럼 다른 script에서 instantiate 로 생성되는 script라면,
manager = GameManager.Instance;
// GameManager는 특정 object에 할당된 script가 아님
// 다른 script 내부에서 생성된 script임.
씬 이동시 Awake()가 불리지 않음.
그래서 awake()내부에서 캐싱된 모든 변수들은 새로운 씬의 새 값으로 초기화가 안됨.
해결법
: 오브젝트 형태로 존재하지 않는 script는 다른 오브젝트를 캐싱해와 사용할 시 awake()에서 가져오지 말고 그떄그때 필요한 함수 내에서 Instance 로 불러오자.
예시
public void Talk(int currentQuestNum, ObjectData obj)
{
//Player,TalkUI 가 필요하면 awake()에서 받아오지 말고 그때그때 받아오기
Player Player = GameManager.Instance.Player;
TalkUI TalkUI = TalkUI.Instance;
string dialogue = TalkData.Instance.GetTalkData(currentQuestNum, obj.npcNum, talkIndex);
TalkUI.SetTalkText(dialogue);
TalkUI.ShowPanel();
}
Comments