前提
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個複製してしまう
WeaponManagerの意味すら分からない赤の他人に回答できると思いますか?
せめて、WeaponManagerのコードぐらいはないとまともに回答できないですよね。
また、NullReferenceExceptionということは、どこかがnullになっているのが問題なのですから、デバッガなどでどこがnullになっているかぐらいは自分で調べるべきでしょう。
こんばんは、先ずは内容足らずな質問文でごめんなさい。質問するにあたってどのコードを載せるかちゃんと考えたつもりでしたが配慮不足でした。
発生していた問題に関しては結論から言いますと貴方のコメントにより無事解決する事が出来ました。本当にありがとうございます!
Visual Studioのデバッグ機能を知らなかったのでそれについて調べ、試行錯誤したところif文での配列の扱い方を間違っていたのが原因でした。
該当箇所を修正し、実行してみたら無事に実現したい動きが出来ました!
あなたの回答
tips
プレビュー