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

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

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

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

Unity

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

Q&A

解決済

1回答

1667閲覧

オブジェクトの切り替え

yuukuriuttto

総合スコア24

C#

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

Unity

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

0グッド

0クリップ

投稿2017/11/19 10:11

###前提・実現したいこと
横スクロールシューティングを製作中で自機から右方向に弾オブジェクトが発射され、一定距離たつと弾オブジェクトが左向きに壁のオブジェクトになって流れる
###発生している問題・エラーメッセージ

NullReferenceException: Object reference not set to an instance of an object BulletController.Update () (at Assets/BulletController.cs:30)

###該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; public class BulletController : MonoBehaviour { private float timer; bool m_xPlus = true; //public GameObject bulletPrefab; //public GameObject OilWall; //public Sprite aburabulet; // Use this for initialization void Start() { timer = 0.0f;//タイマー初期化 } // Update is called once per frame void Update() { timer += Time.deltaTime; //Vector2 Position = transform.localPosition; //SpriteRenderer renderer = gameObject.GetComponent<SpriteRenderer>(); if (m_xPlus == true) { //壁オブジェクトを非表示 GameObject gameObject = GameObject.Find("OilWall"); gameObject.SetActive(false); transform.Translate(0.2f, 0.0f, 0, Space.Self); if (timer >= 1.0f) m_xPlus = false; } else { //弾オブジェクトを非表示 GameObject gameObject = GameObject.Find("Bullet"); gameObject.SetActive(false); //壁オブジェクトを表示 GameObject oilbullet = this.transform.Find("OilWall").gameObject; oilbullet.SetActive(true); //renderer.sprite = aburabulet; transform.Translate(-0.05f, 0.0f, 0, Space.Self); if (timer >= 10.5f) m_xPlus = false; } if (timer >= 20.5f) { Destroy(gameObject); } } void OnTriggerEnter2D(Collider2D coll) { if (coll.gameObject.tag == "Enemy") { Destroy(this.gameObject); } } }

###試したこと
弾オブジェクトと壁オブジェクトの切り替えを表示・非表示で実装してみたが上手くいきません

###補足情報(言語/FW/ツール等のバージョンなど)
C# Unity 5.5.2f1

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーについてですが、

C#

1 GameObject gameObject = GameObject.Find("OilWall");

上記で「OilWall」という名前のゲームオブジェクトが見つからなかったので、nullが返されているからだと思われます。

また、この場合だと「OilWall」が複数存在するときに、正しく機能しなくなるので、何かしらの方法で区別する必要があります。
例えば、弾にアタッチするスクリプトを作っておき、そのスクリプト上で壁オブジェクトをInstantiate()するようにする、というのはどうでしょうか。

投稿2017/11/19 10:29

fiveHundred

総合スコア9796

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

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

yuukuriuttto

2017/11/19 16:41

弾と壁を生成するスクリプトは別にあるのですが、何故かNULLが返されてしまいます。どうしてでしょうね・・・
fiveHundred

2017/11/20 01:01

生成した弾と壁の名前を確認してください。 おそらく「OilWall (Clone)」のようになっていると思います。 もし、そうであれば、Find()の代わりにFindObjectOfType()を使うか、 弾や壁のnameの値を変更して名前を変更してください。 (ただ、この場合でも弾と壁や複数存在するときに、「どの弾や壁なのかが区別できない」ため、上手く動作しないと思います)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問