일지

소원의 섬 - 11편 (오늘 블로그 완료 4일차)

UniCoti-sub 2024. 11. 11.
반응형

오늘은 또 소원의 섬을 약간 작업해봤다.

저번에 상점에 관한 시스템을 다 만들어서 뭘 할까 하다가 상점에서 나오는 버튼을 만들었는데

상점의 문쪽에서 나오는 것이 아니라 마을의 원점으로 돌아오길래 이걸 고쳐보기로 했다.

 

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을 최대한 활용한 것이다.

주기함수도 잘 다룰 줄 알아야 실무에서 활약하는 것 같다.

확실히 나는 어떻게든 만들수는 있으나 시간도 조금 걸리고 아직 완벽하지는

않은 실력인 것 같아서 연습하고 싶다만 시험 압박이 크다. 그래도 공부는 해야지..

 

진짜 대학교만 가면 미친듯이 해볼 것이다.

자유만 주어지면 압도적인 노력으로 다 이겨버리면 된다.

 

들어갈 때
상점 (quit 버튼 추가)
나올 때 (shop 문 앞에서 소환)

 

아무튼 결론적으로 오늘은 위 사진처럼 어떤 장소에서 나오는 버튼을 눌렀을 때,

장소에 맞는 위치에서 나와지게 하는 기능을 만들었다.

다음은 다른 장소를 만들면 될 것 같다. 뭐 아무거나

끝.

반응형

댓글