camera not working after scripting player state
i got tuorial on youtube channel stevie rof https://www.youtube.com/watch?v=DmkR9wADjS4&lc=z22bsldjvpasd5sv1acdp434datu4ihl5bnuh0222q5w03c010c.1515246400697574 in this episode make me struggle spend long time a day.
script execution order is correct like stevie order
error ; NullReferenceException: Object reference not set to an instance of an object ThirdPersonCamera.Update () (at Assets/Team9/Scripts/Cameras/ThirdPersonCamera.cs:48)
line of error: if (localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMING || localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMFIRING) cameraRig = aimCamera;
here is the code of camera
using System.Collections;
using UnityEngine;
public class ThirdPersonCamera : MonoBehaviour {
[System.Serializable]
public class CameraRig
{
public Vector3 CameraOffset;
public float Damping;
}
//0.53, 0.39, -5.8
//5
[SerializeField]
CameraRig defaultCamera;
[SerializeField]
CameraRig aimCamera;
Transform cameraLookTarget;
Player localPlayer;
void Awake () {
GameManager.Instance.OnLocalPlayerJoined += HandleOnLocalPlayerJoined;;
}
void HandleOnLocalPlayerJoined (Player player)
{
localPlayer = player;
cameraLookTarget = localPlayer.transform.Find("cameraLookTarget");
if (cameraLookTarget == null)
cameraLookTarget = localPlayer.transform;
}
// Update is called once per frame
void Update () {
if (localPlayer == null)
return;
CameraRig cameraRig = defaultCamera;
if (localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMING || localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMFIRING)
cameraRig = aimCamera;
Vector3 targetPosition = cameraLookTarget.position + localPlayer.transform.forward * cameraRig.CameraOffset.z +
localPlayer.transform.up * cameraRig.CameraOffset.y +
localPlayer.transform.right * cameraRig.CameraOffset.x;
Quaternion targetRotation = Quaternion.LookRotation (cameraLookTarget.position - targetPosition, Vector3.up);
transform.position = Vector3.Lerp (transform.position, targetPosition, cameraRig.Damping * Time.deltaTime);
transform.rotation = Quaternion.Lerp (transform.rotation, targetRotation, cameraRig.Damping * Time.deltaTime);
}
}
Answer by Gabriellvs · Feb 08, 2018 at 06:54 PM
using UnityEngine; using System.Collections;
public class ThirdPersonCamera : MonoBehaviour {
//usaremos duas cameras, uma para a default, outra para a camera de mirar.
[System.Serializable] //não mostrar no inspector
public class CameraRig {
public Vector3 cameraOffSet;
public float crouchHeight;
public float damping;
}
[SerializeField]public CameraRig defaultCamera;
[SerializeField]public CameraRig aimCamera;
//[SerializeField]public CameraRig crouchedCamera;
Transform cameraLookTarget;
Player localPlayer;
// Use this for initialization
void Awake () {
GameManager.Instance.OnLocalPLayerJoined += HandleOnLocalPlayerJoined;
}
void HandleOnLocalPlayerJoined(Player player)
{
localPlayer = player;
cameraLookTarget = localPlayer.transform.Find("cameraLookTarget");
if (cameraLookTarget == null)
cameraLookTarget = localPlayer.transform;
}
// Update is called once per frame
void LateUpdate () {
//lateUpdate para evitar alguns lags na camera...
if (localPlayer == null)
return;
CameraRig cameraRig = defaultCamera;
//print ("cameraRig"+cameraRig);
if (localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMING || localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMEDFIRING)
cameraRig = aimCamera;
//se esta crouching fica true ;
float targetHeight = cameraRig.cameraOffSet.y + (localPlayer.PlayerState.MoveState == PlayerState.EMoveState.CROUCHING ? cameraRig.crouchHeight : 0);
//quando muda a camera pra crouch, adicionamos
Vector3 targetPosition = cameraLookTarget.position + localPlayer.transform.forward * cameraRig.cameraOffSet.z +
localPlayer.transform.up * targetHeight +
localPlayer.transform.right * cameraRig.cameraOffSet.x;
Quaternion targetRotation = Quaternion.LookRotation (cameraLookTarget.position - targetPosition, Vector3.up);
transform.position = Vector3.Lerp(transform.position, targetPosition, cameraRig.damping * Time.deltaTime);
transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, cameraRig.damping * Time.deltaTime);
}
}
Your answer
Follow this Question
Related Questions
My character walks slower when looking down? 1 Answer
Object heading towards mouse click/ touch position, script improvement. 1 Answer
How can I get my camera to follow a clone after a certain trigger occurs? 2 Answers
How to force camera to turn with player. 0 Answers
How to change direction of RayCast based on camera angle? 0 Answers