江上宿六です。
未だ遊ぶ方への比重が大きく作業は停滞していますね。
出せる進捗がないので備忘録でお茶を濁そうとかそういうやつです。
まぁ、この辺を記しておいた方が良いとは思いますので。
publicや[SerializeField]を使うととスクリプトに宣言された変数などを
インスペクターで操作出来るというのは今更言うほどでもないでしょうか。
しかしクラスとなるといきなり機能しなくなって戸惑うことがあるでしょう。
これを解消するのは簡単で、ちょっと一文足すだけです。
[System.Serializable]
public class my_ary
{
public int num;
}[SerializeField]
my_ary[] array = new my_ary[2];
クラスの宣言の前部に[System.Serializable]と書くだけです。
クラスの宣言にpublicは要らないと思いますが要素のnumには必要です。
その後に[SerializeField]でクラスを宣言しています。
こんな感じでクラスでも値を操作出来るようになりました。
これはこれで良いんですけど、今自分が作ろうとしているものは
規模が大きくなりそうなので、このElement0とか表示されてるものが
視覚的にわかりやすい感じに出来ないかなあ、と思ったわけです。
調べてみた結果、クラスの最初の要素をstringにすれば変わるようです。
[System.Serializable]
public class my_ary
{
public string name;
}
宣言部をこうするとこうです。 Elementの所がstringの内容に置き換わってます。
このstringの変数名は別にnameじゃなくても大丈夫です。
[System.Serializable]
public class my_ary
{
public int num;
public string name;
}
このようにstringを2番目にすると変わらないのでそこは注意が必要。
これでElementの名前を変える事が出来ましたが問題が解決したのかというと
クラスに機能的に意味のないstringを入れるのは微妙な感じがしますよね。
少なくとも自分はそうです。
そこでエディタとかをアレコレして解決する方法とかに辿り着いたんですけど
自分でも説明しきれないのでNamedArrayDrawerとかNamedArrayAttributeとかで
ググって出てきた方法を試すのが良いと思われます。 後で記すと思いますけど。
そういうのを使ってみて出来上がったのがこういうやつです。
このTextDataというのは自分が用意したScriptableObjectのセリフデータで
いくつか準備しておいてその中から1つ喋らせたいなあと考えているやつです。
ともかくElement名は変わっているので、管理は楽になると思ってます。
といった感じですね。
ここのところ自分が作ってるやつの進捗は微妙としか言いようがないんですけど
まだやる事は見えているので、全然問題はないです。
因みにこの現状のシステムでセリフを表示させる方法が少し長くて面白かったので
少し記してみますけどもね。
ヒエラルキー上にキャラクターデータベースが存在しているのでアタッチし、
そのキャラクターデータベースのリストを取得し、
その[キャラ番目]のテキストデータベースのリストを取得し、
その[テキストデータ番目]のセリフデータを取得し、
その中から喋らせたい内容を選ぶ、という感じになっています。
characterDataBase.GetCharacterLists()
[0].GetCharacterTextDataBase().GetTextLists()
[0].GetTextLists()
[0]
作ったコードで言うとこんな感じで完全にわかりにくいやつなんですけど
関数化すればVector3レベルでテキストの取得が出来るので、多分使いやすいです。
まぁ、これは結局テキストを取得するだけなので、他のパラメータも
簡単に設定出来るやつが欲しいとか思ったりしてるやつです。
長くなりましたがこれで。