FMOD를 사용하여 인터랙티브 음악 (2) 임베디드 편

5347 단어 FMODaudioUnity
FMOD를 사용하여 비선형 및 인터랙티브 음악을 만들고 싶습니다. 저작과 임베디드에 필요한 사람이 다르다고 생각합니다. 지난번 에서 이미 재생하는 음원이 만들어졌기 때문에 이 문서에서는 Unity에의 편입의 ​​순서를 설명합니다

Bank 만들기



FMODStudio의 Bank 탭을 열고 MasterBank 아래에서 오른쪽 클릭 > New Bank로 이동합니다. 이름이 붙어 있기 때문에 Music라고 명명합니다.



그런 다음 이벤트 탭으로 돌아가서 모든 이벤트를 선택하고 오른쪽 클릭 > AssignToBank에서 방금 만든 Music Bank를 선택합니다.



마지막으로 Bank 탭으로 돌아가서 Music Bank를 선택하고 오른쪽 클릭 > Build를 합니다. 이것으로 완료됩니다.



통합 준비



먼저 FMOD 다운로드 페이지에서 UnityIntegration을 다운로드합니다.



다운로드 할 수 있으면 새로 만든 Unity 프로젝트로 Import
합니다. 우선 전부 Import 합니다.

설정



아마도 오류가 발생합니다.
에러 내용은 FMOD의 초기설정이 아직임을 의미하고 있으므로 설정합니다. Unity 상단의 FMOD 메뉴 > EditSettiong > Studio Project Path 의 이 Browse 버튼을 눌러서 제작한 *.fspro 파일을 선택합니다.



선택하면 먼저 새로 GameObject를 만듭니다. 작성한 GameObject의 Add Component에서 Studio Bank Loader를 추가합니다. AddBank 버튼 > Browse 버튼(돋보기 아이콘) > 방금 만든 Music Bankk를 선택합니다.



다음에 Studio Event Emitter를 AddComponent하여 추가하고, Event행의 Browse(돋보기) 버튼을 두고 Events 목록에서 Music Event를 선택합니다. 그런 다음 Play Event를 Object Start로, StopEvent를 Object Destroy로 변경합니다.



이제 Editor를 Play하면 Intro가 재생되는지 생각합니다.

소리를 전환하고 재생



현재 상태에서도 InitialParameterValues를 만지면 재생되는 곡이 바뀌어 재미 있습니다만, 어차피라면 재생 중에도 변경할 수 있도록 합니다.

먼저 다음 스크립트를 작성합니다.
작성하면 방금전까지 사용하고 있던 GameObject에 Add Component합니다.

BGMPlayerLT.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FMODUnity;

[RequireComponent(typeof(StudioEventEmitter))]
public class BGMPlayerLT : MonoBehaviour
{
    StudioEventEmitter eventEmitter;
    private void Awake()
    {
        eventEmitter = GetComponent<StudioEventEmitter>();
    }

    public void ApplyParamater()
    {
        var instance = eventEmitter.EventInstance;
        foreach (var p in eventEmitter.Params)
        {
            instance.setParameterValue(p.Name, p.Value);
        }
    }

    public void ChangeParameter(string paramName, float value)
    {
        eventEmitter.SetParameter(paramName, value);
    }
}


그런 다음 Editor 폴더에 다음과 같은 스크립트를 만듭니다.

BGMPlayerExt.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(BGMPlayerLT))]
public class BGMPlayerLTExt : Editor
{
    float changeParamValue = 0.0f;
    string changeParamName = "";
    public override void OnInspectorGUI()
    {
        var t = target as BGMPlayerLT;
        if (GUILayout.Button("Apply"))
        {
            t.ApplyParamater();
        }

        GUILayout.BeginVertical("box");
        {
            changeParamName = EditorGUILayout.TextField("ParamName", changeParamName);
            changeParamValue = EditorGUILayout.FloatField("ParamValue", changeParamValue);
            if (GUILayout.Button("ChangeParam"))
            {
                t.ChangeParameter(changeParamName, changeParamValue);
            }
        }
        GUILayout.EndVertical();
    }
}

이제 Play 중에 EventEmitter의 값을 변경한 후 Apply 버튼을 누르면 그 자리에서 속성을 다시 업데이트할 수 있습니다. Apply를 눌렀을 때의 값이, 0당이라고 Inst, 0.4 정도라면 Breakdown, 0.7 정도라고 Breakdown을 들을 수 있을까 생각합니다.

또한, 직가치 지정 방법도 준비해 두었습니다. 할 수 있을까 생각합니다.

요약



FMOD는 제작 도구뿐만 아니라 통합도 상당히 간단하게 할 수 있습니다. 엔지니어적으로는 기쁜 곳입니다.

참고
- 공식 API 문서

좋은 웹페이지 즐겨찾기