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

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

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

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

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Unity

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

Q&A

解決済

1回答

4192閲覧

Unityで他のスクリプトの変数を変えようとすると起こるUnassignedReferenceExceptionを無くしたい

rogita

総合スコア19

C#

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

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Unity

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

0グッド

0クリップ

投稿2019/12/04 02:28

前提・実現したいこと

Shoot()という関数で他のスクリプト(Bullet_status)の変数(rigidbody2D)を変えようとするとUnassignedReferenceExceptionが表示されます。
二回目にShoot()を実行するとエラーが起きないのですが、1回目も表示されないようにしたいです。
どうすれば、よろしいのでしょうか。

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

UnassignedReferenceException: The variable rigidbody2D of Bullet_status has not been assigned. You probably need to assign the rigidbody2D variable of the Bullet_status script in the inspector. UnityEngine.Rigidbody2D.set_velocity (UnityEngine.Vector2 value) <0x40282300 + 0x0005a> in <56d97623d55649feaec409bbd2aec743>:0 Shooter_Target.Shoot () (at Assets/Shooter/Shooter_Target.cs:41) Shooter_Target.Update () (at Assets/Shooter/Shooter_Target.cs:32)

該当のソースコード

c#

1public Gameobject Target; 2// 3startやupdateは省略 4// 5public void Shoot() 6 { 7 Target.transform.position=this.transform.position; 8 Target.SetActive(true); 9 Bullet_status A=Target.GetComponent<Bullet_status>(); 10 11 12 A.rigidbody2D.velocity=new vector2(3f,3f);//ここでエラーが起きる 13 14 } 15 16

C#

1//Targetについているスクリプト 2public class Bullet_status : MonoBehaviour 3{ 4 // Start is called before the first frame update 5 public Rigidbody2D rigidbody2D; 6 7 void Start() 8 { 9 rigidbody2D=GetComponent<Rigidbody2D>(); 10 rigidbody2D.velocity=new Vector2(); 11 12 } 13 14 // Update is called once per frame 15 void Update() 16 { 17 18 } 19 public void Test() 20 { 21 Debug.Log("アクセス完了"); 22 } 23}

試したこと

ここに問題に対して試したことを記載してください。

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

unity 2018.3.7.f1

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

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

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

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

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

guest

回答1

0

自己解決

Bullet_Statusに

c#

1public void Set_Shoot(Vector2 proto) 2 { 3 Rigidbody2D _rigidbody2D=GetComponent<Rigidbody2D>(); 4 _rigidbody2D.velocity=proto; 5 }

を追加し、Shootの関数内のコードを下のように変えた。

c#

1public void Shoot() 2 { 3 Target.transform.position=this.transform.position; 4 Target.SetActive(true); 5 Bullet_status A=Target.GetComponent<Bullet_status>(); 6 7    A.Set_Shoot(SetVelocityForRigidbody2D(direction,speed));//ここを変えた。 8 9 } 10

GetComponentをしていなかったのが,原因だと思います。

投稿2019/12/05 05:16

rogita

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問