[Unity] [SerialiseField]の意味と使い方を解説! publicとの違いを理解しよう

Unity でゲーム開発をしていて、[SerialiseField] で宣言された関数を見たことがありませんか?

このページでは、

  • [SerialiseField] の意味と使い方
  • [SerialiseField] と public の違い
  • [SerialiseField] の重要性

を説明します。

 

   [SerialiseField] の意味と使い方

[SerialiseField] は一言でいうと、“変数をインスペクター上で編集できるようにするおまじない” です。

 

以下のようなコードの場合、

インスペクター

インスペクターには、何も表示されません。

 

先ほどのコードに、[SerialiseField] を付け加えてみます。

インスペクター

インスペクター上に、Max Point が表示されるようになりました。

これで、インスペクターから値を編集できるようになります。

 

 [SerialiseField] と public の違い

Unity を使ったことがある人は知っていると思いますが、public を使ってもインスペクターで編集できるようになります。

インスペクター

 

では、[SerialiseField]とpublicの違いはいったい何なんでしょうか?

その違いは、“他のスクリプトからアクセスできるかどうか” です。

では実際に、Managerクラスを作って先ほどの MaxPoint と MaxLifeにアクセスできるかどうか試してみましょう~

Manager クラスを以下のように書いて、

Manager のインスペクターでSampleA と SampleBのスクリプトを取得しておきます。

インスペクター

では、Manager スクリプトにコードを付け足して、「SampleA の maxPoint」と「SampleB の maxLife」の値を変更させてみましょう。

Unity に戻ってみると、下の画像のようなエラーが出ていると思います。

コンソール

「SampleA の maxPoint にアクセスできません」というエラーが出ています。

つまり、[SerialiseField]で定義された maxPoint はアクセスできない状態になっていて、public で定義された maxLife はアクセスできる状態となっています。

 

 [SerialiseField] の重要性

このアクセスできるかできないかの違いは個人開発の場合はそこまで必要なわけではないですが、共同開発になると非常に重要になってきます。

他のスクリプトから変更してはいけない変数でも public で変数を定義してしまっていると、自分は変更してはいけないことを知っているけど他の開発者は 「public で定義されているのだから、変更しちゃえ!」ということが起こってしまいます。

変更してはいけない変数は[SerialiseField]でアクセスできないようにしておくことが大切です。

個人開発でも開発期間が何か月もかかるようになってしまうと、最初に設定したときは変更してはいけないと思っていた変数を、数か月後にそのことを忘れて変更してしまうということもあると思うので、変更したくない変数は最初に設定する際に[SerialiseField] で定義するように心がけましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です