Programming

Unity雑記(ちょっとしたバグ?)

Programming
スポンサーリンク

ゲーム開発中でちょっとした問題を発見したので備忘録がてらに。
ちなみに、開発環境はUnity5.4(プログラム開発にC#)とWindows10搭載のPCです。
Unityでゲーム開発をする際は、C#などでプログラムを開発しますよね。
その際に、クラス内の全体で利用できる変数(フィールド)を宣言することがありますが、
アクセシビリティをpublicに、

あるいは属性(Attribute)としてSerializeFieldを付けると

Unityのインスペクタというプロパティ一覧を表示する場所にその変数が表示されるようになります。
ただ、当方はある変数をpublicにして利用していたのですが、インスペクタには表示させたくないと思い
System.NonSerializedという属性を適用させていました。
この属性を使うと、表示されるはずのpublicフィールドがインスペクタに表示されなくなります。

で、ここから問題なのですが、この属性をint型のフィールドに適用して、画面の中にいる特定のキャラクター数のカウントに使っていたのですが、なぜか最初のキャラクターが登場したときだけカウントされないという憂き目にあいまして…。
更に問題なのがビルドしたゲーム上でのみ発生するというもので…(Unityエディタ上では正常に動きました汗)。
いろいろと原因を探ってみたのですが、どうもこの属性を外すと正常に動いたので、ここが原因っぽいです(ちゃんとした検証はまだできていませんが汗)
そのため、当方はSystem.NonSerializedをやめて、以下のようにプロパティを使うように修正しました。

このプロパティというのは、クラス外部では変数のように、内部ではメソッドのようにふるまう性質を持つのですが、publicでもインスペクタには表示されないので、プログラム上でのみ利用したい時などに便利です。
ちなみに、値型(int, floatなど)に限れば以下のような書き方もできます。

これは値を代入する場合はアクセシビリティをprivateにすることで、外部からの参照を不可能にしています。
値型は初期値が決まっているため、これで問題なく動きます。
というわけで、ちょっとはまった部分の対処法をメモしてみました。
では(・ω・)/

コメント

タイトルとURLをコピーしました