본문 바로가기
유니티3D

유니티3D - BGM(배경음악) 바꾸기 #1

지난 게시글에서는 유니티에서의 배경음악에 대해 다루어 보았었지요.
한가지 아쉬운 점이 있었습니다. 배경음악이 1번만 재생되고 끝나는 문제가 있었지요.

https://itadventure.tistory.com/414

 

유니티3D - 비지엠(BGM) 배경음악 넣기

오늘은 지난 시간에 이어 배경음악을 넣는 방법을 살펴보도록 하겠습니다. https://itadventure.tistory.com/413 유니티3D - 슈퍼점프! 지난시간에는 쾌속으로 질주하는 자모로봇에 대해 살펴보았었는데요

itadventure.tistory.com

세컨드라이프와 같은 가상세계 컨텐츠나 게임 등에서는 특정 마을에 진입할 때면
재생중이던 배경음악이 바뀌는 경우가 있는데요.
오늘은 이 방법을 구현한 스크립트를 사용하는 방법을 다뤄보도록 하겠습니다.


마을에 진입시 배경음악을 재생하려면 스크립트를 이용해야 합니다.
오늘은 배경음악 2개와 2개의 박스를 준비한 후 각각의 상자 지점에 도달하면 마을에 진입했다고 가정하고
배경음악을 바꾸는 예제를 살펴보겠습니다.
먼저 영상을 보실까요?

유니티 배경음악 체인저 - 소스 : https://itadventure.tistory.com/415

배경음악은 2개를 준비해주셔야 합니다.
그래야 자모로봇이 상자에 도달했을 때 각각 다른 음악이 재생될 테니까요.
지난 게시글을 참조해서 저작권 문제 없는 배경음악을 1개 더 다운받아 Assets/BGM 폴더에 넣어 주세요.

지난 시간에 세팅했던 배경음악은 이제 지워보도록 합시다.
스크립트로 배경음악을 제어하기 위함입니다.
Hierarchy(하이라치) 창에서 Main Camera 선택,

Inspector(인스펙터) 창에서 Audio Source 컴포넌트를 마우스 우클릭해서 삭제 ( Remove Component ) 해 주세요.

그리고 배경음악을 재생할 스크립트를 하나 생성해봅시다.

Assets/Scripts 폴더 안에 새로운 스크립트를 생성, PlayMusicOperator 라고 이름을 짓고

더블 클릭, 비주얼 스튜디오를 실행하여 아래 스크립트 내용을 넣고 저장해주세요.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 트리거 배경음악 재생기 : 스크립트1. 카메라측
// 설명 : 마을에 진입할 때 트리거에 닿으면 배경음악을 재생합니다.
// 주석을 삭제하지 않는 조건으로 자유롭게 사용하셔도 됩니다.
// 개발 : Cray
// 블로그 : 크레이의 IT 탐구 https://itadventure.tistory.com/415
public class PlayMusicOperator : MonoBehaviour
{
    [System.Serializable]
    public struct BgmType
    {
        public string name;
        public AudioClip audio; 
    }

    // Inspector 에표시할 배경음악 목록
    public BgmType[] BGMList;

    private AudioSource BGM;
    private string NowBGMname="";

    void Start()
    {
        BGM = gameObject.AddComponent<AudioSource>();
        BGM.loop = true;
        if (BGMList.Length > 0) PlayBGM(BGMList[0].name);
    }
    
    public void PlayBGM(string name)
    {
        if (NowBGMname.Equals(name)) return;

        for (int i = 0; i < BGMList.Length; ++i)
            if (BGMList[i].name.Equals(name))
            {
                BGM.clip = BGMList[i].audio;
                BGM.Play();
                NowBGMname = name;
            }
    }
}

Hierarchy(하이라치) 창에서 Main Camera 오브젝트를 선택하여 이 스크립트를 드래그해 넣습니다.
그러면 Play Music Operator 라는 스크립트 컴포넌트가 생겨납니다.

BGM List 좌측 화살표를 펼쳐주시고 Size 란에 배경음악을 넣을 갯수 2를 기입합니다.
그러면 아래와 같이 Element 0, Element 1 이 나열될텐데요,

다시 이 화살표를 각각 펼쳐주신 다음에,
Element 0 의 Audio 속성에는 첫번째 배경음악을,
Element 0 의 Audio 속성에는 두번째 배경음악드래그해 넣습니다.

그리고 각각의 배경음악 이름을 지어줍니다.
Name 속성에 입력해주시면 되는데요. 크레이는 happy, level 로 짓도록 하겠습니다.

이제 카메라에 Play Music Operator 컴포넌트에는 여러개의 배경음악이 담겨지게 되었는데요.
배경음악은 여러개가 들어있지만 본격적으로 사용하는 방법은 따로 있습니다.
우선 기본적으로 플레이해보시면 첫번째 배경음악이 재생될 텐데요.
지난 게시글과 달리 이번에는 무한 재생하는 것을 보실 수 있을 겁니다.

이제 2번째 스크립트를 준비해 봅시다.
Assets/Scripts 폴더 안에 새로운 스크립트를 생성, VileageEnter 라고 이름 짓고

더블클릭, 비주얼 스튜디오를 실행하여 아래 스크립트를 넣어 주세요. 저장은 잊지 마시고~

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 트리거 배경음악 재생기 : 스크립트#2. 트리거측
// 설명 : 마을에 진입할 때 트리거에 닿으면 배경음악을 재생합니다.
//  플레이어의 tag 속성을 'myplayer'로 지어주거나, 아래의 소스를 변경해 주시면 됩니다.
// 주석을 삭제하지 않는 조건으로 자유롭게 사용하셔도 됩니다.
// 개발 : Cray
// 블로그 : 크레이의 IT 탐구 https://itadventure.tistory.com/415
public class VileageEnter : MonoBehaviour
{
    // Inspector 영역에 표시할 배경음악 이름
    public string bgmName = "";

    private GameObject CamObject;

    void Start()
    {
        CamObject = GameObject.Find("Main Camera");
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "myplayer")
            CamObject.GetComponent<PlayMusicOperator>().PlayBGM(bgmName);
    }
}

 

이제 유니티 씬에 상자 2개를 만들어 봅시다.
카메라를 자모 로봇 근처로 옮긴 다음,
GameObject - 3D Object - Cube를 선택하세요.

그러면 씬에 큐브가 생겨날 것입니다. 대강 아래와 같이 배치해 주시되 바닥에 닿게 해주세요.

그리고 또 하나의 큐브를 동일한 방법으로 생성, 이와 같이 배치합니다.

그리고 Inspector(인스펙터) 창에서 Box Collider 라는 컴포넌트를 찾아, Is Trigger 를 체크해줍니다.

기본적으로 상자는 캐릭터가 통과할 수 없지만,
이 체크상자를 체크하면 캐릭터가 물체를 통과할 수 있는 동시에 충돌도 감지할 수 있습니다.
2개의 큐브 모두 이 처리를 해주세요.

이제 앞서 만든 VileageEnter 스크립트를 큐브 각각을 선택하여 Inspector 창에 드래그합니다.

그리고 큐브의 Vileage Enter 컴포넌트 각각의 속성에
앞서 정의한 배경음악 이름을 적어 줍니다.

크레이는 happy, level 로 지었으니 각각 그 이름대로 넣겠습니다.
여러분은 여러분만의 이름으로 지어 주세요.

마지막으로 플레이어의 태그라는 속성을 'myplayer' ( 내 플레이어 ) 로 바꿔 주어야 하는데요.
만약 멀티 플레이 게임이라고 가정한다면 내 플레이어가 마을에 도달할 때만 배경음악이 바뀌어야지,
다른 플레이어가 마을에 도달할 때 배경음악이 바뀌면 안되기 때문입니다.

Hierarchy 창에서 Jammo_Player 를 선택하고

Inspector 창의 맨 꼭대기에 Tag 라는 부분이 있을텐데요.
기본값이 Untagged 일 겁니다.
클릭하신 다음, Add Tag 를 선택해 주세요.

태그목록 창이 나올 것입니다. + 부분을 클릭한 다음에,

myplayer 를 입력하고, 저장해주세요

다시 Jammo_Player 를 선택, Inspector 창에서 Tag(태그)를 선택하면 myplayer 가 새로 생겨났을 것입니다.
이를 선택해서 변경해 주세요

이제 플레이해보시면 되는데요.
플레이를 첫번째 큐브로 이동하면 happy ( 또는 여러분의 배경음악 ) 가 재생될 것이고,
두번째 큐브로 이동하면 level ( 또는 여러분의 배경음악2 ) 이 재생될 것입니다.

이 스크립트에 대한 설명은 다음 게시글에서 진행하도록 하겠습니다.
오늘도 긴 게시글 읽어주셔서 감사합니다 :)


어제(2021. 5. 30)는 기독교의 삼위일체 주일인데요. 삼위일체라는 교리가 있습니다.
하나님 아버지와, 예수 아들과, 하나님의 영이신 성령 셋이 있는데 이는 모두 한분이시라는 것이지요.
이와 같은 세 분에 대한 성경 말씀이 있을까요? 마태복음 28장에 있습니다 :)

예수께서 나아와 일러 가라사대 
하늘과 땅의 모든 권세를 내게 주셨으니
그러므로 너희는 가서 모든 족속으로 제자를 삼아 
아버지와 아들과 성령의 이름으로 세례를 주고
내가 너희에게 분부한 모든 것을 가르쳐 지키게 하라 
볼찌어다 내가 세상 끝날까지 너희와 항상 함께 있으리라 하시니라.

- 마태복음 28장 18-20절 말씀 -


다음 게시글. 유니티3D - BGM(배경음악) 바꾸기 #2. 스크립트 설명편(1)

https://itadventure.tistory.com/417

 

유니티3D - BGM(배경음악) 바꾸기 #2. 스크립트 설명편(1)

지난 시간에는 마을 박스에 진입할 때 배경음악을 바꾸는 부분을 살펴보았지요. 스크립트를 여기 저기 채워넣고 설정만을 바꿔보았지 작동원리에 대한 설명은 없었는데요. 오늘은 그 부분을 살

itadventure.tistory.com