クリックゲーム開発

#12. インスペクターで値を調整できるようにする方法

インスペクターで調整できるようにする方法

前回、Unityでダメージエフェクトをスクリプトから出す方法について書きました。
今回は、値の調整について手直ししていきます。

前回のコードの確認

前回のスクリプトで、以下のようにスケールを10倍という部分がありました。
effect-prefab-instantiate-damage

このように、プログラムに埋め込んでしまうと値を1回調整するたびにコンパイルが必要となります。

調整する値は SerializeField にしてインスペクターに表示する

なので、調整すべき値は SerializeField にしてインスペクターに表示しましょう。private にするのがいいです。
下図がスクリプトです。
SerializeField に調整値を定義する

こうすることで、実行中にインスペクターで調整できるので、都度コンパイルが不要です。

調整値を使うように参照箇所もさきほどの変数に変更します。
直値をSerializeFieldに変更する

考え方としては、デザイナさんが触るようなところは出しておくのがよいでしょう。
分業していないとしても、そのような考え方で、スクリプトとデザインデータについて独立して考えるといいでしょう。

死亡エフェクトについても調整

死亡エフェクトについてもスケールを埋め込んでいました。
effect-prefab-dead

また、スケールだけではなくタイミングも埋め込んでいたので、両方を変数に変更します。
直値をSerializeFieldに変更する

これでインスペクターで調整できるようになりました。

publicなフィールドもインスペクターで調整できるが

Unity のインスペクターに表示するのは、
ここまで解説したような、C#のフィールド(プロパティではない)に SerializeField 属性をつける方法の他に、
public なフィールドにする方法があります。

public なフィールドでも、インスペクターに出せるのですが、
他のスクリプトからも変更ができ、
どちらで触っているのかわからなくなるというデメリットがあるので、
わかりやすさの面では個人的には使いたくないと思っています。

終わりに

今回は、SerializeField を使ったインスペクターでの調整方法について紹介しました。
直値はなるべく定数や、SerializeField に設定していきましょう。