記事一覧
前回までで必要なスクリプトは一通り完成しました。
今回は実装するための準備です。
現在の状態で音を再生させようとすると、
AudioManager.Instance.PlaySound("再生させるクリップにつけた名前");
と、クリップの名前をコードに直接書かなければならず、非常に手間なので、手間を減らす
ための作業をしていきます。
ファイルをリストから選択出来るようにする
図のように一覧で出てきて、選択すればそれが再生できるスクリプトをオブジェクトに貼り付けていければとても楽です。
リストを作成するにはEnumというものを利用します。
Enumとは
正直よく分かっていないのですが、要はインデックス番号付きの定数のようなものみたいです。
スクリプトファイル内に記述をしないといけないため、本来はスクリプトファイルに直接値を書き込まなければなりません。
ですがこちらのサイトのEnumCreatorを使えば、スクリプトファイル自体を自動生成してくれるので、結果的にリストを更新することができます。
EnumCreatorとSQLiteを連携させる
SQLと連携させて完全自動にしてしまいましょう。
サイトを参考にしてEnumCreatorというスクリプトファイルを作成します。
作成できたら使い方で紹介されているコードに以下のようなスクリプトを追加します。
SqliteDatabase sqlDB = new SqliteDatabase("db.db");
string query = "select name,clip from sound";
DataTable dataTable = sqlDB.ExecuteQuery(query);
foreach (DataRow dr in dataTable.Rows){
audio_lists.Add((string)dr["name"]);
}
データベースにアクセスして、nameフィールドの値を全てListに放り込みます。あとはEnumCreatorのitemNameListにaudio_listsを渡してあげるだけです。
これをなんでもいいのでGameObjectにアタッチして実行してあげれば、指定した場所にファイルができています。
中身を見てみるとリストが作成されていることが確認出来ます。
データベースのテーブルを書き換えたら、このスクリプトを実行すればリストを最新の状態にできます。
スクリプトで使用する
リストとして使う時には
public AudioLists audiolists;
///または
[SerializeField]
AudioLists AudioLists;
のように宣言してあげます。値を取り出すには
audiolists.ToString()
で文字列として取り出すことができます。
実際のスクリプトがこちら
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioPlayer : MonoBehaviour {
[SerializeField]
AudioLists AudioLists;
// Use this for initialization
void Start () {
AudioManager.Instance.PlaySound(AudioLists.ToString());
}
}
実際に使うと、リストが表示されることが確認できます。
これで管理・編集が格段に楽になりました。
記事一覧