NullReferenceException: Object reference not set to an instance of an object error while using camera.main.fieldOfView
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class cameraControl : MonoBehaviour {
public GameObject Player ;
public GameObject cameraConstraint;
public GameObject CameralookAt;
private controller RR;
private float speed = 0;
public float defaltFOV, dsiredFOV = 0;
[Range(0,2)] public float smothTime = 0;
private void Awake () {
Player = GameObject.FindGameObjectWithTag("Player");
cameraConstraint = Player.transform.Find("camera constraint").gameObject;
CameralookAt = Player.transform.Find("camera LookAt").gameObject;
RR = Player.GetComponent<controller>();
}
private void update (){
}
private void FixedUpdate() {
follow();
boostFOV();
}
private void follow(){
if(speed <= 23)
speed = Mathf.Lerp(speed , RR.KPH / 2 ,Time.deltaTime);
else
speed = 23;
gameObject.transform.position = Vector3.Lerp(transform.position,cameraConstraint.transform.position,Time.deltaTime * speed);
gameObject.transform.LookAt(Player.gameObject.transform.position);
defaltFOV = Camera.main.fieldOfView;
}
private void boostFOV (){
if(Input.GetKey(KeyCode.LeftShift))
Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, dsiredFOV, Time.deltaTime * smothTime);
else
Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, defaltFOV, Time.deltaTime * smothTime);
}
}
Error= NullReferenceException: Object reference not set to an instance of an object cameraControl.follow () (at Assets/programming/cameraControl.cs:42) cameraControl.FixedUpdate () (at Assets/programming/cameraControl.cs:30)
Answer by Bunny83 · Jul 20, 2020 at 10:05 AM
You have two issues. First of all the Camera.main
property is just a shorthand for
Gameobject.FindWithTag("MainCamera").GetComponent<Camera>()
When Camera.main returns null, it just means you don't have a gameobject tagged "MainCamera", or you have a gameobject tagged "MainCamera", but it doesn't have a camera component. So sort out your scene and tag your camera properly if you want to use Camera.main
Your second issue is that you set your "defaltFOV" variable inside your "follow" method. That means you will overwriting that value each fixed update step. That means once you press the leftshift button you fov will move towards your "dsiredFOV" and at the same time you will change "defaltFOV" to be the current fov. You probably want to move the "defaltFOV" initialization to Start.
There are some minor issues which currently don't affect anything. First of all you have an empty method called "update". This won't be called by Unity since it has to be named "Update". Besides that there are some heavy spelling mistakes in your variable names. This has no effect on the actual functionality, however it can cause confusion later and especially when more than one person is working on that code. Currently you reached out to us to help you and spelling mistakes can cause a lot of confuction and misinterpretation.
Your answer
Follow this Question
Related Questions
JS NullReferenceException: Object reference not set to an instance of an object 1 Answer
Object reference not set to an instance of an object [HELP!] 0 Answers
How can I stop the Camera from detecting things behind walls. 0 Answers
Change Camera.VerticalToHorizontalFieldOfView by script? 1 Answer
Array of dictionaries: "Object reference not set to an instance of an object" 0 Answers