Ch 14. 음악 교체 (+ Ignore Raycast Graphics, Script Execution Order)

Date:     Updated:

카테고리:

태그:

케이디님의 [유니티 강좌] 리듬 게임 유튜브 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

🚀 Script Execution Order

Project Settings - Script Execution Order 을 통해 스크립트의 실행 순서를 제어할 수 있다.

여기저기 스크립트들의 Start() 에서 음악을 교체하거나 재생하기 위하여 싱글톤인 📜AudioManager 를 캐싱하려고 할 것이다. (물론 캐싱하지 않고 바로 AudioManager.instance 로 접근할 수도 있겠지만) 근데 만약 📜AudioManager 보다 해당 스크립트가 먼저 실행된다면 런타임 에러가 발생할 것이다. 📜AudioManager 에서 instance = this; 해주는 과정을 같은 Start가 아닌 Awake 에서 해주면 해결 될 것 같기도 하지만 강의자 분께서 새로운 방법을 알려주셨다. Project Settings 의 Script Execution Order 에서 스크립트 실행 우선순위를 설정할 수 있다.

image

대충 우선순위를 -50으로.. 이로써 다른 스크립트들보다 📜AudioManager가 가장 먼저 실행될 것이다.


🚀 Ignore Raycast Graphics

Ignore Raycast Graphics가 체크 되어 있다면 UI 가 뒤집히면 Raycast 를 받지 못한다.

image

왼쪽 화살표 이미지 버튼의 사본을 만들어 Y 축으로 180도 회전시켜 오른쪽 화살표 이미지 버튼을 만들었댜. 그러나 버튼 이벤트도 잘 연결되잇는데도 불구하고 버튼 이벤트가 작동하지 않는 것이였다!!! 😥😥 혹시 Y축으로 180도 회전시켜서 뒤집혀진 모습이 되었기 때문에 못 받는건 아니겠지? 했는데 진짜길래 당황..

image

캔버스의 Graphic Raycaster 에서 Ignore Raycast Graphics 가 체크되어 있기 때문에 발생했던 문제였다. 이게 체크되어 있으면 이 캔버스의 산하 UI들은 만약 뒤집혀있으면 (그래서 표면이 뒤로가버리면) Raycast를 받지 못한다. 즉, 이벤트가 발동하지 못하는 것이다. 이걸 체크 해제 하면 뒤집어져있는 UI도 무리없이 Raycast를 받을 수 있게 된다.


🚀 코드

📜GameManager

    NoteManager theNote;

    [SerializeField] CenterFlame theMusic = null; // 처음에 비활성화 되있어서 Find로 찾을 수 없음

    public void GameStart(int p_songNum, int p_bpm)
    {
        for(int i = 0; i < goGameUI.Length; i++)
        {
            goGameUI[i].SetActive(true);
        }
        theMusic.bpmName = "BGM" + p_songNum;
        theNote.bpm = p_bpm;
  • 📜CenterFlame 은 에디터에서 할당해주는 이유는
    • CenterFlame은 시작시 비활성화 되어 있는데, 비활성화 상태에선 FindObjectOfType 함수로 찾을 수 없기 때문이다.
      • FindObjectOfType는 활성화 되어 있는 오브젝트들에서만 검색해준다.
  • 음악마다 bpm도 다 다름


📜CenterFlame

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!musicStart)
        {
            if (collision.CompareTag("Note"))
            {
                AudioManager.instance.PlayBGM(bpmName);
                musicStart = true;
            }
        }
    }

게임 시작하고 첫 노트 때 BGM 재생


📜StageMenu

    public void BtnNext() // -> 버튼 이벤트
    {
        AudioManager.instance.PlaySFX("Touch");

        if (++currentSong > songList.Length - 1)
            currentSong = 0;
        SettingSong();
    }

    public void BtnPrev() // <- 버튼 이벤트
    {
        AudioManager.instance.PlaySFX("Touch");

        if (--currentSong < 0)
            currentSong = songList.Length - 1;
        SettingSong();
    }

    void SettingSong()
    {
        txtSongName.text = songList[currentSong].name;
        txtSongComposer.text = songList[currentSong].composer;
        imgDisk.sprite = songList[currentSong].sprite;

        AudioManager.instance.PlayBGM("BGM" + currentSong);
    }

스테이지 메뉴에서 왼오 화살표 버튼으로 음악들 넘길 때 BGM 들어볼 수 있음



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 4 카테고리 내 다른 글 보러가기

댓글 남기기