2019年3月11日月曜日

【Unity】ビルドするとタグの挙動がおかしくなる現象の対処法(Unityを再起動する)

タグをいじったあとにビルドするとうまく動かない現象があったので記事にしておきます。

現象


Tags&Layersでタグの削除をしてそのままビルド実行するとtransform.tag、FindGameObjectsWithTagメソッド、FindWithTagメソッドの動作がエディタ実行したときと異なる。


再現環境


Unity 2018.3.7f1


再現手順


Tags&Layersで「HogeTag」、「SphereTag」、「CubeTag」を追加する。



Capsule、Sphere、Cube、Cubeをシーンに追加する。それぞれタグを「Player」、「SphereTag」、「CubeTag」、「CubeTag」にする。
それらの子に3D Text(TagText)を追加し、別に3D Text(AllTagText)を追加する。

TagTextには親のタグとインスペクターで設定した文字列をFindWithTagで探した結果をテキストに表示するスクリプト(TagText.cs)をアタッチする。
AllTagsTextにはインスペクターで設定した文字列をFindGameObjectsWithTagで探した結果をテキストに表示するスクリプト(AllTagsText.cs)をアタッチする。

この状態でエディタ実行するとそれぞれ正常にテキストが表示される。

また、Build and Runしても正常にテキストが表示される。


ここからが本題。
Tags&LayersでHogeTagを削除してNewTagを追加する。

CubeObject2のタグをNewtagにしてエディタ実行する。
すると、削除前と同じようにそれぞれに設定したタグが表示される。

Build and Runをすると……

なんかおかしい。
SphereObjectのタグがCubeTagに置き換わり、SphereTagが存在しないことになっている。
また、CubeObject1のタグがNewTagに置き換わり、CubeObject2のタグが未定義のタグになっている。
その後Save(Save Scene)、Save Project、再ビルドしても同じ結果になる。

これの解決方法はUnityを再起動するしかない。

素直にUnityを再起動してBuild and Runをすると正常な動作となる。


後記


エディタでは正常な動作をするし再ビルドしても直らない現象なので、結構タイムロスしました。
何かおかしいことがあったら一旦再起動すると良いでしょう。

ではまた。
0 件のコメント:
コメントを投稿