FMOD for Unityの使い方

英語が読めるなら公式ドキュメントがめちゃくちゃ丁寧だからそっちを見た方が早い。
https://www.fmod.com/docs/2.01/studio/welcome-to-fmod-studio.html

FMOD Studioをインストール

Unity側のプラグインから参照するので先にFMOD Studioをインストールする
こちらからFMOD Studioをダウンロード(ユーザー登録が必要)
https://www.fmod.com/download

今回はWindows版をダウンロード

ダウンロードしたファイルを起動するとセットアップウィンドウが立ち上がるので指示に従ってインストール




インストールが完了したらFMOD Studioを起動し、NewProjectをクリック

ひとまず空のままでFile > Save
後程Unity側からこのパスを指定するので、Unityプロジェクトの中に入れておくと良い

FMOD for Unityのインポートとセットアップ

https://www.fmod.com/docs/2.01/unity/user-guide.html

Unityアセットストアからダウンロードするが、FMOD for Unityはバージョンごとにページが異なる

自身の入れたFMOD Studioのバージョンに合わせてインポートする
FMOD for Unity (2.03) | Audio | Unity Asset Store

インポート完了すると設定画面が開くので、Startを押す

最新のFMODの構成に更新するかと聞かれる
古いFMODがあると怒られるので、必要に応じてRecognize Plugin FilesやUpdate Event Referencesを押す
問題なければNext

FMOD Studioをどう扱うかについて聞かれる
FMOD Studioを自身が使っていてUnityと平行して使う想定なら「FMOD Studio Project」、
FMOD Studioからビルドされたファイルのみを扱う予定で、一つのプラットフォームのみ扱うなら「Single Platform Build」、 二つ以上のプラットフォームを扱うなら「Multiple Platform Build」を選択。

今回はFMOD Studio Projectを選択し、先ほど作成したFMODプロジェクトの.fsproファイルを選択する。
対象のフォルダがUnityProjectのフォルダ内であれば相対パスになる。

既存のUnity AudioのAudio ListenerをFMOD Studio Listenerに置き換えるか聞かれるので、置き換えて良ければReplaceボタンを押す
私の場合は自分で管理したかったのでスルー

ビルトインのUnity Audioを無効にするか聞かれるので、使う予定が無ければDisableを押す
基本的には競合防止で無効化するのが推奨
後からでも変えられるので、一旦スルーでもOK

UnityのAudio Sourceを使っているオブジェクトが表示される
FMOD Studio Event Emitterと置き換える事をお勧めされているので、置き換えて良ければ置き換える

.gitignoreの設定を教えてくれるの、git管理してる場合は追加する
同様に.gitattributesの設定も

ひとまず完了

FMOD Studioのセットアップ

ここからはFMOD Studioをセットアップし、Unityで再生できる形式の.bankファイルをビルドしていく。

画面左のAssetsウィンドウを選択

右クリック > Import Assets もしくは、ファイルをD&Dしてwav等の音源ファイルをインポートする

続いてEventsウィンドウを選択し、右クリック > New Event

作成したイベントを選択し真ん中のウィンドウ内で右クリック > Add Timeline Sheet

Masterを右クリック > Add Audio Track

Audio 1を右クリック > Add Single Instrument

追加したMulti Instrumentを選択すると、画面下部にPlaylistが表示される

PlaylistにAssetsウィンドウから再生したい音源ファイルをD&D

Eventウィンドウで作成したEventを右クリック > Assign to Bank > Master をクリック

File > Build

FMODStudioのプロジェクトのBuildフォルダ内に、Desktop > Master.bank や Master.strings.bankが作成される。

Unityで鳴らす

下記コードを実行するだけでひとまず音を鳴らすことができる。
"event:/New Event"の部分は自身が作成したイベントの名前をNew Eventの部分に入れる。

FMODUnity.RuntimeManager.PlayOneShot("event:/New Event");

UnityのAndroid Buildがインストールできない際の対処法

問題

UnityのAndroidビルドをインストールしようとしたところ、

You can't install the app on your device.

お使いの端末に対応していません

といった表示がでてインストールできなかった。
一部端末ではインストールできるため、余計に謎だった。

原因

原因は、Unityのビルド設定でARM 64をターゲットにしていないことだった。
Edit > Project Settings > Player > Android Settings > Target Architectures という項目にある。

このように、ARMv7のみが対象となっていた。
最近のAndroidバイスはARM64の物が多いので、ARM64にチェックを入れる必要がある。

対応

上述の画像のように、ARM64が非アクティブでチェックを入れられないことがある。
これは、Scripting Backendという項目がMonoになっているためである。
(Target Architecturesと同様に、Edit > Project Settings > Player > Android Settings > Configuration にある。)

これをIL2CPPに変更すると、ARM64にもチェックが入れられるようになる。

チェックを入れてビルドしたら、無事インストールできた。
一部デバイスで入れられたのは、端末がやや古くARMv7ベースだったためだろう。

Unity Build AutomationでTragetが突然Disabledになった場合の対処法

問題

Unity Build Automationにて特に何もしていないのに、いつも使っているiOSのビルドターゲットがDisabledとなり、ビルドできない状態になった。

原因と対処法

原因はビルドに使っていたXcode versionが古くなって使えなくなっていたことだった。
Xcode versionを改めて設定しなおし、セーブ。

その後、Build Configurationsの右の方にある「・・・」をクリックし、

Enableを選択すると

Disabledが解除された。

UnityのParticle Systemの各データをShaderで取得する

UnityのParticle用シェーダーを作成する際、Particle Systemで設定した値(SizeやVelocityなど)を使いたいことがあります。
この際、以下の方法で各種情報にアクセスできます。

  1. Particle SystemのRender > Custom Vertex Streams にチェックを入れる

    Custom Vertex Streamsにチェックを入れる事で、 シェーダーに送る情報をカスタマイズできます。
    ここにチェックを入れないと、必要最低限の情報だけが送られます。

  2. 必要な情報を+を押して追加
    +ボタンから、必要な情報を選択して追加します。

  3. 追加された情報とセマンティクスを確認

    追加した情報が、()内に書かれているセマンティクスに送られます。
    今回の場合、Size.xyに関する情報がTEXCOORD0.zwに送られます。

  4. シェーダーで値を利用
    今回の場合TEXCOORD0に入るので、既存のuvのzwにアクセスするだけで利用できます。
    例えば私の場合、円シェーダーの円の太さをSizeに応じて変更したりという使い方をしています。

    また、他のパラメータを追加した際はappdata等の中に必要なセマンティクスを定義して利用します。

Windowsのフォントが突然太字になる問題の対応

ある日突然、通常の文字が太字(ボールド体)になるバグが発生した。
こんな感じで日本語部分だけが太くなっている。

特定のアプリに限らず、複数のアプリでフォントがおかしくなっているようだった。
気付いたものだけでも、Discord、Notion、Chromeなどが太字になっていた。

対応

色々試した結果、私の場合はNoto Sans JPフォントがなぜかアンインストールされていたのが原因だった。
Noto Sans JPの太字フォントや斜体フォントは存在したが、肝心のNoto Sans JPがなかった。
また、全てのフォントがおかしいわけではなく一部のフォントがおかしかった。

以下、問題の確認と修正方法。

  1. Win + R を押し、fontsと入力してOKを押す
  2. Fontsフォルダが開くので、この中にNoto Sans JP(もしくはおかしくなってそうなフォント)が存在するか確認する
  3. 私の場合はNoto Sans JPが存在しなかったので、Google FontsからNotoSansJPのフォントをダウンロード
  4. ダウンロードしたzipを解凍し、中に含まれるNotoSansJP-VariableFont_wght.ttfをダブルクリック
  5. インストールを押す
  6. Windowsを再起動

便利ツール

フォントを探すのに便利なChrome拡張を紹介
chromewebstore.google.com

その他試したこと

一応他に試したことを記載しておく

  • Windowsの再起動
  • sfc /scannow
    • 問題は検知されず
  • FNTCACHE.DATの削除
    • 効果なし

コメント

確かに太字ではなくなったんだけど、元のフォントってこんな感じだったっけ・・・?

【Unity】CRI Atom Craftの使い方

CRIをUnityで利用するにあたり、独自のサウンドデータを用意したい方向けのCRI Atom Craft入門記事です。
CRIをUnityに導入するのは別記事があるので、そちらをご覧ください。
※どちらから始めても特に問題ないです。

hansel-bread.com

CRI Atom Craft

CRI Atom Craftはwavなどの音源データをまとめて、CRIで利用できる形に変換するツールです。
また、この際に音源に対して様々な設定や加工を行う事ができます。
エンジニアというより、主にサウンドチームが利用するものという認識で問題ないかと思います。

CRI Atom Craftを入手

https://game.criware.jp/products/adx2-le/ にアクセスし、「契約に同意してダウンロード」を押します。
ツールの欄にあるWindows用をクリックしてダウンロードしましょう。

ダウンロード完了したらzip解凍して、中にあるcri > tools > ADX2LE > ver.3 > CriAtomCraft.exe を実行します。

おそらくこの画面が出るので、「オーサライゼーションツール起動」を押します。

初めての方はライセンスを持っていないと思うので、ツールユーザーライセンス発行を押します。

このような画面になるので、メールアドレスを入力して下の方にある登録ボタンを押します。

メールに認証コードが送られてくるので入力して次へ。

発行完了したら、続けてPC登録を選択してください。

このようになればOKです。

CRI Atom Craftプロジェクト作成

改めて、CriAtomCraft.exeを起動しましょう。
先ほどとは違う画面になると思うので、はいを押します。

起動完了すると、このようなスタートページが表示されると思います。
プロジェクトの右にある新規作成ボタンを押しましょう。

プロジェクト名やパスを指定して、プロジェクトの新規作成をクリック。

こうなるので、そのまま追加を押します。

さて、これでプロジェクトの作成が完了しました。
ここからはこちらの画面を使っていきます。

キューシートに音源を追加

使いたい音源ファイル(.wavなど)を左下のマテリアルルートフォルダーという場所にD&Dしましょう。

さらに、マテリアルルートフォルダーに入ったwavファイルを、その上にあるCueSheet_0にD&Dします。

CueSheet_0に追加した音源をクリックすると様々な情報を見る事ができます。
画面右の方にあるインスペクターというタブを選択してみましょう。
(おそらくウィンドウが小さいと思うのでいい感じに広げて下さい)

すると、インスペクターウィンドウに様々な項目が表示されます。
これらの値は実際にゲーム内で利用される時に使われます。
色々と調べて調整してみてください。

※今回はデフォルトのまま進めます。

Unity向けファイル出力

Unityで利用するためのファイルを書き出します。
CueSheet_0を右クリックし、Atomキューシートバイナリのビルドを選択します。

ビルド画面が出るので、「Unity向けAssetsフォルダを出力」にチェックを入れてください。
出力パスは変更の必要があれば変更し、ビルドボタンをクリック。

ビルドが完了すると、このような画面が出るので出力先のフォルダを確認してみましょう。

フォルダを見るといくつかのファイルが作成されています。

各ファイルの説明はこちらです。

  • ACFファイル(*.acf) : 環境設定やキューシート共通情報。1プロジェクトで1つ生成されます。
  • ACBファイル(*.acb) : キューシート単位のメモリ再生用波形データ、キュー情報、再生パラメータ。
  • AWBファイル(*.awb) : キューシート単位のストリーム再生用波形データ。[ストリーム]に設定されているときのみ生成されます。

Unityでサウンドデータをインポート

Unityで使用するファイルは、上記出力フォルダの中にある Assets > StreamingAssets 以下のファイルです。
これらのファイルを(.acf、.acb、.awb)をUnityのStreamingAssetsフォルダに入れましょう。
※awbなどは必要なければ生成されない場合もあります。

さて、ここまで来たら後は各自のやり方で再生できると思います。
試しに、Window > CRIWARE > Atom Browser で確認すると無事読み込まれているのが分かります。

Unityでの再生

Unity側での対応については、別記事にまとめていますので興味があればご覧ください。
hansel-bread.com

また、CRI Atom Craftの公式チュートリアルもあるのでこちらも参考にしてください。 game.criware.jp

UnityにCRIを導入する

基本的にはこちらのチュートリアルに沿って進めます。

game.criware.jp

CRIについて

CRIの料金や権利表記周りについてまとめた記事があるので、気になる方は合わせてご覧ください。

tmls.hatenablog.com

導入手順

https://game.criware.jp/products/adx2-le/ へアクセスし、下の方にある契約内容に同意してダウンロードをクリック。

ADX LE Unity SDKをクリックしてダウンロード。

ダウンロードが完了したらzipファイルを解凍し、中にある
cri > unity > plugin > criware_unity_plugin_v2_xx_xx_le_ja.unitypackage
を、使いたいUnityプロジェクトのProjectビューにD&Dします。

下記のような画面が出てくるので、Importをクリック。

続いて、サウンドデータを入れます。
サウンドデータは後程自分で用意する方法を記載しますが、この段階ではひとまずチュートリアルで配布されているものを借りましょう。
下記のリンクからダウンロードできます。
https://game.criware.jp/wp-content/uploads/2018/12/tutorial_introduction_Unity_lesson02.zip

ダウンロードしたらzipを解凍して、UnityのStreamingAssetsフォルダに入れます。(ない場合は作成してください。)
※StreamingAssetsフォルダはAssets直下に配置して下さい。

なお、各ファイルの拡張子はこのような意味を持っています。(チュートリアルより引用)

  • ACFファイル(*.acf) : 環境設定やキューシート共通情報。1プロジェクトで1つ生成されます。
  • ACBファイル(*.acb) : キューシート単位のメモリ再生用波形データ、キュー情報、再生パラメータ。
  • AWBファイル(*.awb) : キューシート単位のストリーム再生用波形データ。[ストリーム]に設定されているときのみ生成されます。

次に、UnityのHierarchyで右クリック > CRIWARE から、Create CRIWARE Error HandlerとCreate CRIWARE Library Initializerの二つを作成します。

続いてCRI Atomのような空オブジェクトを作成し、CRI Atomコンポーネントをつけます。

ACF Fileに先ほど入れたStreamingAssets内の.acfファイルのパスを入れます。※StreamingAssetsより下の階層のパスを入れます。
また、Add CueSheetをクリックして.acbと.awbのパスも入れ、Nameは好きな名前を付けます。

次に、実際に音を鳴らすオブジェクトを作成しましょう。
新規オブジェクトを作成し、CRI Atom Sourceコンポーネントを追加します。

さて、音を鳴らすためのコードを書きます。
今回は、チュートリアル用のシートに含まれているMusic48kというキューを再生してみます。
下記のコードを記述したc#ファイルを作成します。

using CriWare;
using UnityEngine;

public class CriTest : MonoBehaviour
{
    [SerializeField] private CriAtomSource atomSource;

    private void Start()
    {
        atomSource.Play("Music48k");
    }
}

好きなオブジェクトにAdd Componentし、atomSourceに先ほど作成したCRI Atom Sourceを指定します。

さて、これで準備完了です。
ゲームを再生するとBGMが再生されるはずです!

Atom Browser

Unityエディタで使える補助ツールAtom Browserを紹介します。
Window > CRIWARE > Atom Browser から開いてください。

ゲームを再生しReload Infoを押すと、このように再生可能なキューの一覧やデバッグ画面が表示されます。

詳細はこちらをご覧ください。

CRI Atom Craft

上記ではチュートリアル音源を利用しましたが、実際に自分でサウンドデータを用意する方法を説明します。
具体的には、CRIが配布しているCRI Atom Craftという製品を利用します。

ただ、文量が多くなってしまうので別記事にまとめることにしました。
興味があればご覧ください。

hansel-bread.com