unityでゲームを始めると「NullReferenceException: Object reference not set to an instance of an object
PlayerManager.FixedUpdate () (at Assets/Scripts/PlayerManager.cs:39)」というエラーが出ます。
このエラーの原因はオブジェクトをインスペクターにアタッチしていないからだということを前回教えていただきました。
もう一度それを復習してみたのですが、こんどはアタッチができなくなってしまいました。
ドロップアンドドラッグをしようにも禁止マークが出っぱなしなのです。
その原因と解決方法を教えていただけますでしょうか。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerManager : MonoBehaviour { //プライベート変数 Animator anim = null; Rigidbody2D rigid2D = null; private bool isGround = false; private bool isHead = false; private float jumpPos = 0.0f; private float jumpTime = 0.0f; private bool isJump = false; //パブリック変数 インスペクターで設定 public float speed;//速度 public float jumpSpeed;//ジャンプ速度 public float jumpHeight; public float jumpLimitTime;//ジャンプ制限時間 public float gravity;//重力 public GroundCheck ground;//接地した判定 public GroundCheck head;//頭をぶつけた判定 private void Start() { rigid2D = GetComponent<Rigidbody2D>(); anim = GetComponent<Animator>(); } private void FixedUpdate() { //接地判定を得る isGround = ground.IsGround();//GroundCheckの中にあるIsGround()を呼び出す isHead = head.IsGround();//エラーの原因と思われる箇所 //キーを入れたら行動する float horizontalKey = Input.GetAxis("Horizontal"); float verticalKey = Input.GetAxis("Vertical"); float xSpeed = 0.0f; float ySpeed = -gravity; Debug.Log(isGround); Debug.Log(head); if (isGround) { if (verticalKey > 0) { ySpeed = jumpSpeed; jumpPos = transform.position.y;//ジャンプした位置を記録する isJump = true; jumpTime = 0.0f; // Debug.Log(verticalKey); } else { isJump = false; //Debug.Log("verticalKey ! 0"); } } else if(isJump) { //上方向を押しているか bool pushUpKey = verticalKey > 0; //現在の高さが飛べる高さより下か bool canHeight = jumpPos + jumpHeight > transform.position.y; //ジャンプ時間が長すぎないか bool canTime = jumpLimitTime > jumpTime; if (pushUpKey && canHeight && canTime && !isHead) { ySpeed = jumpSpeed; jumpTime += Time.deltaTime; Debug.Log(isHead); } else { isJump = false; jumpTime = 0.0f; } } if (horizontalKey>0) { anim.SetBool("run", true); transform.localScale = new Vector3(1, 1, 1); xSpeed = speed; //Debug.Log("horizontal>0"); } else if (horizontalKey<0) { anim.SetBool("run", true); transform.localScale = new Vector3(-1, 1, 1); xSpeed = -speed; //Debug.Log("horizontal<0"); } else { anim.SetBool("run", false); xSpeed = 0.0f; } anim.SetBool("jump", isJump); anim.SetBool("ground", isGround); //y方向はいじらない rigid2D.velocity = new Vector2 (xSpeed, ySpeed); } } コード
回答1件
あなたの回答
tips
プレビュー