- Home /
Object reference not set to an instance of an object
NullReferenceException: Object reference not set to an instance of an object PlayerMovement.doDamage () (at Assets/Scripts/PlayerMovement.cs:31) PlayerMovement.Update () (at Assets/Scripts/PlayerMovement.cs:16)
using UnityEngine;
using System.Collections;
public class PlayerMovement : MonoBehaviour {
public Transform hitStart, hitEnd;
public bool inContact = false;
void Start () {
}
void Update () {
Movement ();
lineDrawing ();
doDamage ();
}
void lineDrawing(){
Debug.DrawLine (hitStart.position, hitEnd.position, Color.green);
if (Physics2D.Linecast (hitStart.position, hitEnd.position, 1 << LayerMask.NameToLayer("Monster"))) {
inContact = true;
}
else{
inContact = false;
}
}
void doDamage(){
GameObject ghostGameobject = GameObject.Find("Ghost1");
Ghost ghostController = ghostGameobject.GetComponent<Ghost>();
if (Input.GetKeyDown (KeyCode.E)) {
if(inContact == true){
ghostController.health = ghostController.health - 5;
}
}
}
void Movement(){
var playerDiagonalSpeed = 3f;
var playerSpeed = 4f;
if (Input.GetAxisRaw("Horizontal")>0 && Input.GetAxisRaw("Vertical")>0) {
transform.Translate(Vector2.right * playerDiagonalSpeed * Time.deltaTime);
transform.Translate(Vector2.up * playerDiagonalSpeed * Time.deltaTime);
transform.eulerAngles = new Vector2(0,0);
}
else if (Input.GetAxisRaw("Horizontal")<0 && Input.GetAxisRaw("Vertical")>0) {
transform.Translate(Vector2.right * playerDiagonalSpeed * Time.deltaTime);
transform.Translate(Vector2.up * playerDiagonalSpeed * Time.deltaTime);
transform.eulerAngles = new Vector2(0,180);
}
else if (Input.GetAxisRaw("Horizontal")>0 && Input.GetAxisRaw("Vertical")<0) {
transform.Translate(Vector2.right * playerDiagonalSpeed * Time.deltaTime);
transform.Translate(Vector3.down * playerDiagonalSpeed * Time.deltaTime);
transform.eulerAngles = new Vector2(0,0);
}
else if (Input.GetAxisRaw("Horizontal")<0 && Input.GetAxisRaw("Vertical")<0) {
transform.Translate(Vector2.right * playerDiagonalSpeed * Time.deltaTime);
transform.Translate(Vector3.down * playerDiagonalSpeed * Time.deltaTime);
transform.eulerAngles = new Vector2(0,180);
}
else if (Input.GetAxisRaw("Horizontal")>0) {
transform.Translate(Vector2.right * playerSpeed * Time.deltaTime);
transform.eulerAngles = new Vector2(0,0);
}
else if (Input.GetAxisRaw("Horizontal")<0) {
transform.Translate(Vector2.right * playerSpeed * Time.deltaTime);
transform.eulerAngles = new Vector2(0,180);
}
else if (Input.GetAxisRaw("Vertical")>0) {
transform.Translate(Vector2.up * playerSpeed * Time.deltaTime);
}
else if (Input.GetAxisRaw("Vertical")<0) {
transform.Translate(Vector3.down * playerSpeed * Time.deltaTime);
}
}
}
Answer by Addyarb · Sep 04, 2014 at 07:56 PM
The game is looking for an object named "Ghost1" but it can't find it. Make sure that you have an object named "Ghost1" in the hierarchy and that it is enabled.
Also, is your GetComponent a script named ghost or what?
Answer by Landern · Sep 04, 2014 at 07:58 PM
An object you think is automagically found is not. This is occurring in your doDamage Method.
Put some debug log statements in there to see what is returning null(thought it should be the look up for the Ghost comp). We don't know the structure of your game objects, but it can't find typeof Ghost.
GameObject ghostGameobject = GameObject.Find("Ghost1");
if (ghostGameobject == null)
Debug.Log("GameObject named Ghost1 was not found");
else
Debug.Log("GameObject named Ghost1 was found without issues");
Ghost ghostController = ghostGameobject.GetComponent<Ghost>(); // <---- Should be right here.
if (ghostController == null)
Debug.Log("Component on Ghost 1 Type of Ghost was not found");
else
Debug.Log("Component on Ghost 1 Type of Ghost was found without issues");
if (Input.GetKeyDown (KeyCode.E)) {
if(inContact == true){
ghostController.health = ghostController.health - 5;
}
}