Needing a hand circumventing a "Missing Reference Exception". Any help sincerely appreciated!
Hey all,
I am trying to figure out a problem. I am creating a camera script for my game. Essentially the script checks to see if a "Player" object exists, if so it follows the Player with smoothing and such.
When the Player dies the player object is removed, the Camera then moves to the Respawn Object, and once the player is re-spawned via a little animation by the spawn point. The camera then returns to the player.
The script works, however I am getting the "Missing Reference Exception" which occurs between the point where the Player dies and when he Respawns. I have tried re-wording this thing about 40 times.
I've Highlighted the relevant parts of the problem. I'd be sincerely grateful for the help.
Thanks ladies and gents!
using System;
using UnityEngine;
namespace UnityStandardAssets._2D
{
public class Camera2DFollow : MonoBehaviour
{
public Transform target;
public float damping = 1;
public float lookAheadFactor = 3;
public float lookAheadReturnSpeed = 0.5f;
public float lookAheadMoveThreshold = 0.1f;
public float yPosBoundary = -1;
float m_OffsetZ;
Vector3 m_LastTargetPosition;
Vector3 m_CurrentVelocity;
Vector3 m_LookAheadPos;
float nextTimeToSearch = 0;
void Start()
{
m_LastTargetPosition = target.position;
m_OffsetZ = (transform.position - target.position).z;
transform.parent = null;
}
**void Update()
{
if (nextTimeToSearch <= Time.time)
{
searchForPlayer();
Debug.Log("Player Search");
}**
float xMoveDelta = (target.position - m_LastTargetPosition).x;
bool updateLookAheadTarget = Mathf.Abs(xMoveDelta) > lookAheadMoveThreshold;
if (updateLookAheadTarget){
m_LookAheadPos = lookAheadFactor * Vector3.right * Mathf.Sign(xMoveDelta);
} else {
m_LookAheadPos = Vector3.MoveTowards(m_LookAheadPos, Vector3.zero, Time.deltaTime * lookAheadReturnSpeed);
}
Vector3 aheadTargetPos = target.position + m_LookAheadPos + Vector3.forward * m_OffsetZ;
Vector3 newPos = Vector3.SmoothDamp(transform.position, aheadTargetPos, ref m_CurrentVelocity, damping);
newPos = new Vector3(newPos.x, Mathf.Clamp(newPos.y, yPosBoundary, Mathf.Infinity), newPos.z);
transform.position = newPos;
m_LastTargetPosition = target.position;
}
**void searchForPlayer()
{
GameObject searchResult = GameObject.FindWithTag("Player");
if (searchResult != null)
{
target = searchResult.transform;
Debug.Log("Changed to player");
} else {
target = GameObject.FindWithTag("SpawnPoint").transform;
}
nextTimeToSearch = Time.time + 0.5f;**
}
}
}
Answer by tormentoarmagedoom · Jun 06, 2018 at 08:39 AM
Good day.
Missing Reference Exception means that while executing the code, one variable is null for some reason.
You need to detect what variable is null (probably is the player variable which is not in the scene and can not be found). Once you detect what variable is null, you must check why is null and if is normal, and prevent any execution to that variable (change it, or read it) because that variable at that moment is "nothing" so Unity gives you this "missing error".
Bye.