質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

Q&A

解決済

UnityでGameObjectがnullの時に条件分岐したいです。

land25
land25

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0グッド

0クリップ

1833閲覧

投稿2020/04/28 23:07

編集2020/04/28 23:40

前提・実現したいこと

unityで物体Aが物体Bに衝突した時、物体Bが何か判定し条件分岐するプログラムを作成しています。

物体BをhostSeeingObjとして、hostSeeingObj.nameがCubeA,SphereAか、またはhostSeeingObjがnullかどうかで単純にif分で条件分岐させました。

発生している問題・エラーメッセージ

hostSeeingObjがCubeA,SphereAになっているときは問題ないですが、 hostSeeingObjがnullの時に「NullReferenceException: Object reference not set to an instance of an object」が発生し、if分の内容が実行されません。 実際にhostSeeingObjがnullなのでこのエラー内容自体は理解できますが、このままでは動作を実現できないため困っています。

該当のソースコード

void updateEye() { //ホスト視線移動後の位置 Transform GazeTargetTransform = hostGazeTarget.transform; Vector3 GazeTargetPos = GazeTargetTransform.localPosition; GameObject hostSeeingObj = trackingManager_host.getSeeingObject(); //物体Bを取得 //物体BがCubeA,SphereAか、nullかで条件分岐 if (hostSeeingObj.name=="CubeA") { GameObject target = hostSeeingObj.transform.GetChild(0).gameObject; Transform targetTransform = target.transform; Vector3 targetPos = targetTransform.position; Transform myTransform = clientGazeTarget.transform; myTransform.position = targetPos; Debug.Log(target.name); } else if (hostSeeingObj.name == "SphereA") { GameObject target = hostSeeingObj.transform.GetChild(0).gameObject; Transform targetTransform = target.transform; Vector3 targetPos = targetTransform.position; Transform myTransform = clientGazeTarget.transform; myTransform.position = targetPos; Debug.Log(target.name); } else if(hostSeeingObj == null) { Debug.Log("null"); //動作確認用 //移動座標 float x = GazeTargetPos.x - myHostGazeTargetPos.x; float y = GazeTargetPos.y - myHostGazeTargetPos.y; float z = GazeTargetPos.z - myHostGazeTargetPos.z; //クライアント位置移動 Transform myTransform = clientGazeTarget.transform; Vector3 pos = myClientGazeTargetPos; pos.x += x; pos.y += y; pos.z += z; myTransform.localPosition = pos; } }

補足情報(FW/ツールのバージョンなど)

Unity 2018.2.18f1

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

//物体BがCubeA,SphereAか、nullかで条件分岐

の所でnull判定を一番先にしてみてください。

投稿2020/04/28 23:49

takabosoft

総合スコア8337

land25👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

land25

2020/04/29 00:07

おかげで上手くいきました。ありがとうございました。 参考までに、何故null判定の順番によって変わるのか教えていただいてもよろしいでしょうか?
takabosoft

2020/04/29 00:58

if 文は上から順番に実行されます。 つまり、 if (hostSeeingObj.name=="CubeA") を評価してから、条件式が「偽」になった場合に次のelse ifに流れていきます。 で、hostSeeingObj.name=="CubeA" この評価式はhostSeeingObjのnameプロパティにアクセスしているので、hostSeeingObjがnullだとNullReferenceExceptionが発生します。 なので、最初にhostSeeingObjがnullでないことを確認してから、プロパティへアクセスする、という順番を守る必要があります。
land25

2020/04/29 02:49

nullのnameへアクセスしてしまったことによるエラーだったんですね。 大変分かりやすかったです。ありがとうございました。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。