FMOD를 사용하여 인터랙티브 음악 (2) 임베디드 편
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 문서
Reference
이 문제에 관하여(FMOD를 사용하여 인터랙티브 음악 (2) 임베디드 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dTAT/items/11c17a68a34698729697텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)