오늘은 또 소원의 섬을 약간 작업해봤다.
저번에 상점에 관한 시스템을 다 만들어서 뭘 할까 하다가 상점에서 나오는 버튼을 만들었는데
상점의 문쪽에서 나오는 것이 아니라 마을의 원점으로 돌아오길래 이걸 고쳐보기로 했다.
private void OnEnable() {
SceneManager.sceneLoaded += OnSceneLoaded;
}
private void OnDisable() {
SceneManager.sceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if(scene.buildIndex == 5) {
OnSceneChangeInVillage();
}
}
public void OnSceneChangeInVillage() {
Vector3 offset = new Vector3();
switch (QuitPlace) { //나가는 장소. 상점에서 마을로 나가자 하면 QuitPlace는 상점.
case "Shop":
offset = new Vector3(-9, 10.5f, 0);
QuitPlace = "";
break;
case "":
offset = new Vector3(0, -5, 0);
QuitPlace = "";
break;
}
villageManager.player.transform.position = offset;
}
오늘의 메인 코드이다.
유니티의 주기함수를 오랜만에 써봐서 조금 어려웠다.
아무튼 씬이 바뀌면 OnSceneChangeInVillage를 실행하는데,
offset을 바꿔서 여러 장소에 대응할 수 있도록 코드를 구성했다.
마지막으로 offset으로 이동하는 코드로 마무리.
private void OnEnable() {
GameManager.Instance.villageManager = this;
}
이렇게 보면 엄청 쉬워보이는데 순서를 맞추는 데 고생했다.
버튼을 누르면 OnSceneChange...가 실행되는데 마지막 줄에서 villageManager를 사용한다.
하지만 위 코드처럼 villageManager는 OnEnable에서 실행되기에 순서가 안맞아 오류가 났다.
(씬이 수시로 바뀌어서 매니져가 살아남지 못함)
아무튼 그래서 OnEnable과 OnDisable을 최대한 활용한 것이다.
주기함수도 잘 다룰 줄 알아야 실무에서 활약하는 것 같다.
확실히 나는 어떻게든 만들수는 있으나 시간도 조금 걸리고 아직 완벽하지는
않은 실력인 것 같아서 연습하고 싶다만 시험 압박이 크다. 그래도 공부는 해야지..
진짜 대학교만 가면 미친듯이 해볼 것이다.
자유만 주어지면 압도적인 노력으로 다 이겨버리면 된다.
아무튼 결론적으로 오늘은 위 사진처럼 어떤 장소에서 나오는 버튼을 눌렀을 때,
장소에 맞는 위치에서 나와지게 하는 기능을 만들었다.
다음은 다른 장소를 만들면 될 것 같다. 뭐 아무거나
끝.
'일지' 카테고리의 다른 글
지구과학 백업 (오늘 블로그 완료 7일차) (3) | 2024.11.13 |
---|---|
오늘 블로그 완료 6일차 (1) | 2024.11.12 |
오늘 블로그 완료 - 4일차 (3) | 2024.11.10 |
소원의 섬 - 10편 (오늘 블로그 완료 3일차) (9) | 2024.11.09 |
오늘 블로그 완료 2일차 (3) | 2024.11.08 |
댓글