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

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

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

Q&A

0回答

285閲覧

決まった武器配列の時、決まった弾配列のオブジェクトを複製したい

35Riel

総合スコア31

0グッド

0クリップ

投稿2022/06/05 09:02

前提

Unityで2Dのトップダウンシューティングを作っています
Q.Eキーで武器を変えられる配列を作り、その配列要素と連動する弾配列を作りました

実現したいこと

  • 武器配列要素0の時にクリックすると弾配列要素0を、武器配列要素が1の時にクリックすると弾配列要素1を複製したい

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

武器配列要素0の時は問題ないが武器配列要素1の時、弾配列1は複製されるがオブジェクトが見えない。
該当ソースコード:コード1の

newBullet.GetComponent<WeaponPistol>().MoveDirection(direction);

の部分でエラーが発生する

NullReferenceException: Object reference not set to an instance of an object

該当のソースコード

コード1

public void Shoot() { GameObject newBullet = Instantiate(bullets[weaponIndex]); if (WeaponManager[0]) { newBullet.GetComponent<WeaponPistol>().MoveDirection(direction); newBullet.transform.position = bulletSpawnPos; } else if (WeaponManager[1]) { newBullet.GetComponent<WeaponSMGone>().MoveDirection(direction); newBullet.transform.position = bulletSpawnPos; }

コード2

private void Update() { Shooting(); } void Shooting() { if (playerWeaponManager.bullets[0]) { if (Input.GetMouseButtonDown(0)) { if (Time.time > pis) //ゲーム内時間が射撃タイマーを超えたら { pis = Time.time + pisD; //shootTimerを更新する //発射関数を呼ぶ playerWeaponManager.Shoot(bulletSpawnPos.position); } } } else if (playerWeaponManager.bullets[1]) { if (Input.GetMouseButton(0)) { if (Time.time > smgOne) { smgOne = Time.time + smgOneD; playerWeaponManager.Shoot(bulletSpawnPos.position); } } } }

試したこと

コード1のif else if を if ifにした場合
武器配列要素0の時に弾配列要素0を複製しようとすると

if (WeaponManager[1])

の処理の部分がエラーになり、武器要素1の時に弾要素1を複製しようとすると

if (WeaponManager[0])

の処理の部分がエラーになる

また、コード2でも同じことをした場合、武器要素0なら弾要素0を2個、武器要素1なら弾要素1を2個複製してしまう

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

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

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

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

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

fiveHundred

2022/06/05 10:19

WeaponManagerの意味すら分からない赤の他人に回答できると思いますか? せめて、WeaponManagerのコードぐらいはないとまともに回答できないですよね。 また、NullReferenceExceptionということは、どこかがnullになっているのが問題なのですから、デバッガなどでどこがnullになっているかぐらいは自分で調べるべきでしょう。
35Riel

2022/06/05 12:07

こんばんは、先ずは内容足らずな質問文でごめんなさい。質問するにあたってどのコードを載せるかちゃんと考えたつもりでしたが配慮不足でした。 発生していた問題に関しては結論から言いますと貴方のコメントにより無事解決する事が出来ました。本当にありがとうございます! Visual Studioのデバッグ機能を知らなかったのでそれについて調べ、試行錯誤したところif文での配列の扱い方を間違っていたのが原因でした。 該当箇所を修正し、実行してみたら無事に実現したい動きが出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問