Quantcast
Channel: Questions in topic: "error"
Viewing all articles
Browse latest Browse all 7934

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

$
0
0
Hi, I am pretty new to C# and unity at the start, plus I am doing this out of my interest, so my question could be basic. However it has bugged me for so long, that I couldn't get it over even after I research it over the internet. Anyway, here is my question, I have got this error NullReferenceException: Object reference not set to an instance of an object two times over my script. The first time is when I wanted to set the respawn action only execute after the player enters the "Dying state", I have use Debug.Log to ensure it successfully enters the Dying state, but when I click the respawn button after the player dies, the error pops up. The second error happens whenever I press the attack button, which I intend to let my player throw grenade or whatever. **Codes as bellow ** **My PlayerController script, and it works fine** using UnityEngine; using System.Collections; [RequireComponent(typeof(PlayerPhysics))] public class PlayerController : Entity { // Player Handling public float gravity = 20; public float speed = 8; public float acceleration = 30; public float jumpHeight = 16; public float slideDeceleration = 1; // System private float animationSpeed; private float currentSpeed; private float targetSpeed; private Vector2 amountToMove; // States [HideInInspector] public bool Dying; private bool jumping; private bool sliding; private bool still; private bool falling; private bool throwing; private bool droping; private bool bumping; // Componenets private PlayerPhysics playerPhysics; private Animator animator; private GameManager manager; private PlayerAttack attack; void Start () { playerPhysics = GetComponent(); animator = GetComponent(); manager = Camera.main.GetComponent(); } void Update () { if(GetComponent().Died!=true){ Dying=false; #region player alive movement // Reset acceleration upon collision if (playerPhysics.movementStopped) { targetSpeed = 0; currentSpeed = 0; } // If player is touching the ground if (playerPhysics.grounded) { amountToMove.y = 0; // Jump logic if (jumping) { jumping = false; animator.SetBool("Jumping",false); } // Jump if(!sliding){ if (Input.GetButtonDown("Jump")) { amountToMove.y = jumpHeight; jumping = true; animator.SetBool("Jumping",true); } } // Slide Input & logic if (Input.GetButton("Slide")) { sliding = true; animator.SetBool("Sliding",true); targetSpeed = 0; playerPhysics.SetCollider(new Vector3(5,2.2f,1.79f), new Vector3(-0.17f,1.1f,-1.24f)); } else { sliding = false; animator.SetBool("Sliding",false); playerPhysics.ResetCollider(); } if(amountToMove.x==0){ still=true; animator.SetBool("Still", true); } else { still=false; animator.SetBool("Still", false); } } //falling logic if(!playerPhysics.grounded){ if(!jumping){ falling=true; animator.SetBool("Falling", true); } } else { falling=false; animator.SetBool("Falling", false); } // Set animator parameters animationSpeed = IncrementTowards(animationSpeed,Mathf.Abs(targetSpeed),acceleration); animator.SetFloat("Speed",animationSpeed); // Input if (!sliding) { //movement targetSpeed = Input.GetAxisRaw("Horizontal") * speed; currentSpeed = IncrementTowards(currentSpeed, targetSpeed,acceleration); // Face Direction float moveDir = Input.GetAxisRaw("Horizontal"); if (moveDir !=0) { transform.eulerAngles = (moveDir>0)?Vector3.zero:Vector3.up * 180; } } else { currentSpeed = IncrementTowards(currentSpeed, targetSpeed,slideDeceleration); } // Set amount to move amountToMove.x = currentSpeed; amountToMove.y -= gravity * Time.deltaTime; playerPhysics.Move(amountToMove * Time.deltaTime); #endregion }else{ #region player dead movement Dying=true; animator.SetBool("Die", true); targetSpeed=0; currentSpeed = IncrementTowards(currentSpeed, targetSpeed,slideDeceleration); amountToMove.x = currentSpeed; amountToMove.y -= gravity * Time.deltaTime; playerPhysics.Move(amountToMove * Time.deltaTime); #endregion } //Attack if (Input.GetButtonDown("LRangeAttack")) { //attack.Throw(); Debug.Log("throwing now"); GetComponent().Throw(); // throwing = true; // animator.SetBool("Throwing",true); } //complete level (need to set up) // if(GetComponent().EnemiesNum==0){ // manager.EndLevel(); // } } //probably not necessary, may change to second player void OnTriggerEnter(Collider c) { if (c.tag == "Checkpoint") { manager.SetCheckpoint(c.transform.position); } //if (c.tag == "Finish") { // manager.EndLevel(); //} } // Increase n towards target by speed private float IncrementTowards(float n, float target, float a) { if (n == target) { return n; } else { float dir = Mathf.Sign(target - n); // must n be increased or decreased to get closer to target n += a * Time.deltaTime * dir; return (dir == Mathf.Sign(target-n))? n: target; // if n has now passed target then return target, otherwise return n } } } then here is my GameManager script, where the first error pops in when I want to respawn ***NullReferenceException: Object reference not set to an instance of an object GameManager.Update () (at Assets/Scripts/GameManager.cs:30) *** which is line ***if(GetComponent().Dying=true)*** in GameManager script using UnityEngine; using System.Collections; public class GameManager : MonoBehaviour { public GameObject player; private GameObject currentPlayer; private GameCamera cam; private Vector3 checkpoint; public static int levelCount = 100; public static int currentLevel = 1; void Start () { cam = GetComponent(); if (GameObject.FindGameObjectWithTag("Spawn")) { checkpoint = GameObject.FindGameObjectWithTag("Spawn").transform.position; } SpawnPlayer(checkpoint); } // Spawn player private void SpawnPlayer(Vector3 spawnPos) { currentPlayer = Instantiate(player,spawnPos,Quaternion.identity) as GameObject; cam.SetTarget(currentPlayer.transform); } private void Update() { if (Input.GetButtonDown("Respawn")) { if(GetComponent().Dying=true) Destroy(currentPlayer.gameObject); SpawnPlayer(checkpoint); } } public void SetCheckpoint(Vector3 cp) { checkpoint = cp; } public void EndLevel() { if (currentLevel < levelCount) { currentLevel++; Application.LoadLevel("Level " + currentLevel); } else { Debug.Log("Beta ends here, more coming~"); } } } and now the second errors in my PlayerAttack script, I have yet completed the function but the error still shows ***NullReferenceException: Object reference not set to an instance of an object PlayerController.Update () (at Assets/Scripts/PlayerController.cs:158)*** which is line ***GetComponent().Throw();*** in PlayerController script using UnityEngine; using System.Collections; public class PlayerAttack : MonoBehaviour { public void Throw() { Debug.Log("THROW"); } }

Viewing all articles
Browse latest Browse all 7934

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>