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

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

新規登録して質問してみよう
ただいま回答率
85.48%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1259閲覧

参照エラーが解決できない。

usagi3kaku

総合スコア9

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/03/24 18:06

###実現したい機能
Mobが最初のオブジェクトを踏む

次の目的地になるオブジェクトをFindしてその座標をモブに送る

連続的に配置されたオブジェクトを辿るようにMobが移動する!

という機能のスクリプトを作りたいのです。
DoTweenProのPath設置のように、複数のパスとなるオブジェクトを配置して
それぞれの名前を「1」「2」「3」・・・と設定し、全てにこのスクリプトを貼れば、
現在踏んでいるオブジェクトの名前に1を足す形で次の目的地をFindさせられるはずでした。
そう、あんなエラーが起きるまでは・・・

まずは以下のコードをご覧下さい。

public class Mob_Gethome : MonoBehaviour { GameObject ThisMOB; GameObject NextPath; Mob mob; Mob_Gethome mob_gethome; public int PathNumber; public int nextPathNumber; public string NextPathName; Vector3 nextPathposition; Vector3 nextdestination; private void Start() {      //➀:このオブジェクトの名前(stringで"1"と設定)をintに変換し、パス番号とする。 PathNumber = int.Parse(this.gameObject.name); //➁:➀で設定したパス番号に1を足したものを「次のパス番号」とする。 nextPathNumber = ( PathNumber + 1 ); //➂:次のパス番号(int)をstringに変換し、「次のパスの名前」とする。 NextPathName = nextPathNumber.ToString(); //➃:「次のパスの名前」で検索したオブジェクトを「次のパスオブジェクト」に指定する。 NextPath = GameObject.Find($"{ NextPathName }"); //➄:トランスフォームをベクターに変換するためのローカル変数に格納   ★ここでエラー★ Vector3 nextpath = NextPath.transform.position; //➅:次のパスのポジション(Vector3)は、➄でローカル変数に格納された「次のパスオブジェクト」のトランスフォームのポジションである。 nextPathposition = nextpath; //nextPathposition = NextPath.transform.position; //➆:次の目的地を示す座標(Vector3)は、次のパスのポジション(Vector3) nextdestination = nextPathposition; } void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.CompareTag("Mob")) { ThisMOB = collision.transform.root.gameObject; mob = ThisMOB.GetComponent<Mob>(); mob.destination = nextdestination; Debug.Log(mob.destination); } }

実行自体はできるのですが、意図通りに動作せず
➄の個所がNullReferenceException: Object reference not set to an instance of an objectとなってしまいます。
この箇所は元は➅の左辺に➄の右辺を代入して nextPathposition = NextPath.transform.position;としていました。
その状態でも同じエラーが起きていたので、調べるうちに「Vectorに対してトランスフォームをそのままは代入できない」ということが分かったので、2行に分割した部分です。
今回に限らず一つの文に凝縮して記述しているとこのエラーがよく起こるため、できるだけ分解して一段階づつに分けてみたのですが・・・

実行時のインスペクタ上では、publicであるNextPathNamenextPathNumberは意図通りに、元の名前に1を加算されて表示されています。
なにが悪いのか、これ以上どうしていいかわかりません。
どなたかご教示頂ければ幸いです。
何卒、よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

とりあえず参照エラーは解決しました。
配置していたパスオブジェクトが「1」だけで、「2以降」の次のパスオブジェクトがシーン上に存在しなかったために起きていたことのようです。
いくつ配置しても最後に「次がない」状態になるため、
「もしなかったら」の場合の条件と正常に終わる処理を足さないとエラーは消えなさそうです。
また、このエラーとは別にtransformの座標を受け渡した結果の挙動が意図したのと違うので困っていますが、それは別件として取り組んでみます。
取り急ぎ原因がわかったので報告まで。
読んで考えてみてくださった方、ありがとうございました。

投稿2020/03/24 19:01

usagi3kaku

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問