🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

Q&A

解決済

1回答

1438閲覧

同じメソッドから呼び出しているのに、片方だけエラーが出ます。

退会済みユーザー

退会済みユーザー

総合スコア0

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

0グッド

0クリップ

投稿2021/01/27 10:04

unityで、プレイヤーキャラが地面に接地、そして頭上のものと接触する判定をしたいと思っています。
接触するためのチェックはメソッドに書きました。
それを使ったのですが、接地はうまく動作してくれるのに、頭上のものとの接触についてはエラーが出ます。
ゲーム自体は動きます。

エラーは
NullReferenceException: Object reference not set to an instance of an object
PlayerManager.FixedUpdate () (at Assets/Scripts/PlayerManager.cs:38)

です。

コードは以下の通りです。
//接地判定を得る、の
isHead = head.IsGround();
のところがエラーとして指摘されています。

原因はなんなのでしょうか。

using

1using System.Collections.Generic; 2using UnityEngine; 3 4public class PlayerManager : MonoBehaviour 5{ 6 Animator anim = null; 7 Rigidbody2D rigid2D = null; 8 9 //プライベート変数 10 private bool isGround = false; 11 private bool isHead = false; 12 private float jumpPos = 0.0f; 13 private float jumpTime = 0.0f; 14 private bool isJump = false; 15 16 //パブリック変数 インスペクターで設定 17 public float speed;//速度 18 public float jumpSpeed;//ジャンプ速度 19 public float jumpHeight; 20 public float jumpLimitTime;//ジャンプ制限時間 21 public float gravity;//重力 22 public GroundCheck ground;//接地した判定 23 public GroundCheck head;//頭をぶつけた判定 24 25 26 27 private void Start() 28 { 29 rigid2D = GetComponent<Rigidbody2D>(); 30 anim = GetComponent<Animator>(); 31 } 32 33 private void FixedUpdate() 34 { 35 //接地判定を得る 36 isGround = ground.IsGround(); 37 isHead = head.IsGround();//エラーの箇所 38 //キーを入れたら行動する 39 float horizontalKey = Input.GetAxis("Horizontal"); 40 float verticalKey = Input.GetAxis("Vertical"); 41 float xSpeed = 0.0f; 42 float ySpeed = -gravity; 43 44 if (isGround) 45 { 46 if (verticalKey > 0) 47 { 48 ySpeed = jumpSpeed; 49 jumpPos = transform.position.y;//ジャンプした位置を 50 isJump = true; 51 jumpTime = 0.0f; 52 } 53 else 54 { 55 isJump = false; 56 } 57 } 58 else if(isJump) 59 { 60 //上方向を押しているか 61 bool pushUpKey = verticalKey > 0; 62 //現在の高さが飛べる高さより下か 63 bool canHeight = jumpPos + jumpHeight > transform.position.y; 64 //ジャンプ時間が長すぎないか 65 bool canTime = jumpLimitTime > jumpTime; 66 67 if (pushUpKey && canHeight && canTime && !isHead) 68 { 69 ySpeed = jumpSpeed; 70 jumpTime += Time.deltaTime; 71 Debug.Log("verticalKey>0"); 72 } 73 else 74 { 75 isJump = false; 76 jumpTime = 0.0f; 77 } 78 79 } 80 81 82 if (horizontalKey>0) 83 { 84 anim.SetBool("run", true); 85 transform.localScale = new Vector3(1, 1, 1); 86 xSpeed = speed; 87 Debug.Log("horizontal>0"); 88 89 } 90 else if (horizontalKey<0) 91 { 92 anim.SetBool("run", true); 93 transform.localScale = new Vector3(-1, 1, 1); 94 xSpeed = -speed; 95 Debug.Log("horizontal<0"); 96 } 97 else 98 { 99 anim.SetBool("run", false); 100 xSpeed = 0.0f; 101 } 102 anim.SetBool("jump", isJump); 103 anim.SetBool("ground", isGround); 104 105 //y方向はいじらない 106 rigid2D.velocity = new Vector2 (xSpeed, ySpeed); 107 108 109 } 110} 111 112コード

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/01/27 11:53

public GroundCheck head;//頭ぶつけた判定 のところでしょうか。 これは「インスペクターで設定」の最後の行に入れています。
退会済みユーザー

退会済みユーザー

2021/01/27 12:40

アタッチされていませんでした。 確認したとおもったのですが・・・すみません。 ありがとうございました。
lazh

2021/01/27 13:04

よかったです。自己解決扱いで解決済みにしておいてください 自分もUnity始めたての頃はよくやらかしました NullReferenceExceptionが出たら自分が何らかのミスをしたと思って設定を再確認する癖をつけるといいですよ Debug.Log(head);みたいに確認することも大事です 今回の場合だとコンソールにnullと表示されますので、設定し忘れだと気付けます 自分のしたことを疑っていきましょう
退会済みユーザー

退会済みユーザー

2021/01/27 14:35

なるほど。headをコンソールに出せばよかったのですね。他のところばかり出力してました。 ありがとうございました。
guest

回答1

0

ベストアンサー

インスペクターの設定を忘れていました。

投稿2021/01/27 14:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問