【Unity】Unityに登録してないタグはスクリプトから使っちゃダメよ

【Unity】Unityに登録してないタグはスクリプトから使っちゃダメよ

インポートしたパッケージに含まれるタグの扱いについてまとめた記事を書いたんだけど、その補足としてスクリプトから操作した場合はどうなるか確認。

登録されていないタグを使おうとした場合や、パッケージに含まれていたタグを再起動後に使った場合についてスクリプトを書いてみます。

エラーメッセージも含めて何が出るか試してみましょ。

 

環境

macOS 10.13 High Sierra

Unity2018.1.0f2

スクリプトからタグをセット

確認の流れは次のイメージ。

  • SceneにUntaggedのオブジェクトを作成
  • スクリプトからそのオブジェクトを取得
  • スクリプト内でタグをセット
  • スクリプトから、タグを使って何か操作する
  • ゲーム実行中、タグはどうなっているかInspectorから確認する

やってることは単純ですね。

ゲームの実行中に、登録されていないタグをセットしてみます。

Untaggedなオブジェクトの作成
Untaggedなオブジェクトの作成

 

このオブジェクトに以下のスクリプトをアタッチします。tagNameでUnityに登録していないタグ名をセットしています。

ゲームを実行すると以下のメッセージが。

そのタグは登録されてないぜ
そのタグは登録されてないぜ

 

UnityException: Tag: <タグ名> is not defined.と想定通りの結果です。スクリプトリファレンスに『タグを使う前にタグマネージャーで宣言してね』と書かれてる通りですね。

続いては、インポートしたパッケージ内のオブジェクトが持っているタグ『TagImport』をtagNameにセットして実験。

この辺りは前回の続きになっています。別プロジェクトで『TagImport』というタグを作成し、そのタグをセットしたPrefabをパッケージに含めたのでした。

TagImportが存在しない状態
TagImportが存在しない状態

 

この状態でゲームを実行すると……。

そのタグは登録されてないぜ
そのタグは登録されてないぜ

 

やはり変わらず。プロジェクト内にあるだけでは、『TagImport』というタグの存在を知らないようです。

今度は少し変えて、『TagImport』のタグを持ったPrefabをインスタンス化してからタグを操作してみます。

FindGameObjectWithTagを使う前に、インポートしたしたPrefabにアクセスしています。これでUnityに気付いてもらえるかな?

ゲームを実行した結果は以下の通り。

スクリプト通り飛んで行った
スクリプト通り飛んで行った

 

AddForceが効いてるので、タグを使った操作はうまく行ったようです。ゲーム実行中にインスタンス化したオブジェクトを確認するとインポートしたタグが使われています。

タグがセットされている
タグがセットされている

 

別のオブジェクトからタグの一覧を確認すると、『TagImport』が選べるようになっています。ただし、これはゲーム実行中のみであって、ゲームを停止すると一覧から消えます。何てこった。

ゲーム実行中は選べる
ゲーム実行中は選べる

 

追加タグをインポートした時の扱い

追加タグを持ったオブジェクトをインポートした時の扱いはどうすべきでしょうか。

……と言っても多分有効な解決策はひとつで、インポートしたオブジェクトのタグを手動で登録するのが良さそう。

オブジェクト単体でインポートした場合はそこまで影響無いと思いますが、パッケージの中でそのオブジェクトのタグを使っているスクリプトがあると危ないです。

別プロジェクトの部品を使い回そうとした時、スクリプトも一緒に入れることだって考えられますし、警戒しておいたほうがいいかも。

Scene内にオブジェクトが存在するならそのタグを認識してくれるので、パッケージを作って移行するときにはSceneごと移動させるのもあり。

結構地味な部分だけど引っかかると凹むので、パッケージ内のオブジェクトのタグは確認しておくといいかも。

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!