- Home /
Camera Orbit Script Error
So I was following a tutorial on YT. I have rewind about 5 times and still can't figure out why I get this error vs the other person.
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour
{
public Transform target;
[System.Serializable]
public class PositionSettings
{
public Vector3 targetPosOffset = new Vector3(0, 3.4f, 0);
public float lookSmooth = 100;
public float distanceFromTarget = -8;
public float zoomSmooth = 100;
public float maxZoom = -2;
public float minZoom = -15;
}
[System.Serializable]
public class OrbitSettings
{
public float xRotation = -20;
public float yRotation = -180;
public float maxXRotation = 25;
public float minXRotation = -85;
public float vOrbitSmooth = 150;
public float hOrbitSmooth = 150;
}
[System.Serializable]
public class InputSettings
{
public string ORBIT_HORIZONTAL_SNAP = "OrbitHorizontalSnap";
public string ORBIT_HORIZONTAL ="OrbitHorizontal";
public string ORBIT_VERTICAL ="OrbitVertical";
public string ZOOM = "MouseScrollWheel";
}
public PositionSettings position = new PositionSettings();
public OrbitSettings orbit = new OrbitSettings();
public InputSettings input = new InputSettings();
Vector3 targetPos = Vector3.zero;
Vector3 destination = Vector3.zero;
PlayerController pController;
float vOrbitInput, hOrbitInput, hOrbitSnapInput, zoomInput;
void Start()
{
SetCameraTarget(target);
targetPos = target.position + position.targetPosOffset;
destination = Quaternion.Euler (orbit.xRotation, orbit.yRotation + target.eulerAngles.y, 0) * -Vector3.forward * position.distanceFromTarget;
destination += targetPos;
transform.position = destination;
}
void SetCameraTarget(Transform t)
{
target = t;
if (target != null)
{
if (target.GetComponent<PlayerController>())
{
pController = target.GetComponent<PlayerController>();
}
else
Debug.LogError ("Camera's target needs a character controller.");
}
else
Debug.LogError ("Your Camera needs a target");
}
void GetInput ()
{
vOrbitInput = Input.GetAxisRaw (input.ORBIT_VERTICAL);
hOrbitInput = Input.GetAxisRaw (input.ORBIT_HORIZONTAL);
hOrbitSnapInput = Input.GetAxisRaw (input.ORBIT_HORIZONTAL_SNAP);
zoomInput = Input.GetAxisRaw (input.ZOOM);
}
void Update()
{
GetInput();
OrbitTarget ();
ZoomInOnTarget ();
}
void LateUpdate()
{
//moving
MoveToTarget();
//rotating
LookAtTarget();
}
void MoveToTarget()
{
targetPos = target.position + position.targetPosOffset;
destination = Quaternion.Euler (orbit.xRotation, orbit.yRotation + target.eulerAngles.y, 0) * -Vector3.forward * position.distanceFromTarget;
destination += targetPos;
transform.position = destination;
}
void LookAtTarget()
{
Quaternion.targetRotation = Quaternion.LookRotation (targetPos - transform.position);
transform.rotation = Quaternion.Lerp (transform.rotation, targetRotation, position.lookSmooth * Time.deltaTime);
}
void OrbitTarget()
{
if (hOrbitInput > 0)
{
orbit.yRotation = -180;
}
orbit.xRotation += -vOrbitInput * orbit.vOrbitSmooth * Time.deltaTime;
orbit.yRotation += -hOrbitInput * orbit.hOrbitSmooth * Time.deltaTime;
if (orbit.xRotation > orbit.maxXRotation)
{
orbit.xRotation = orbit.maxXRotation;
}
if (orbit.xRotation < orbit.minXRotation)
{
orbit.xRotation = orbit.minXRotation;
}
}
void ZoomInOnTarget()
{
position.distanceFromTarget += zoomInput * position.zoomSmooth * Time.deltaTime;
if (position.distanceFromTarget > position.maxZoom)
{
position.distanceFromTarget = position.maxZoom;
}
if (position.distanceFromTarget < position.minZoom)
{
position.distanceFromTarget = position.minZoom;
}
}
}
I keep getting this error: error CS0117: UnityEngine.Quaternion' does not contain a definition for
targetRotation'
Here: "Quaternion.targetRotation = Quaternion.LookRotation (targetPos - transform.position); transform.rotation = Quaternion.Lerp (transform.rotation, targetRotation, position.lookSmooth * Time.deltaTime);"
Any ideas how to fix. I have reached out to the creator, but no answer yet.
Answer by CapitalLlama · Aug 30, 2016 at 07:53 AM
Quaternion does not have any member called targetRotation. Did you instead mean to type
Quaternion targetRotation = Quaternion.LookRotation (targetPos - transform.position);
and create a Quaternion variable named targetRotation
Answer by mj321 · Aug 30, 2016 at 07:28 AM
Quaternion doesn't have a member "targetRotation".
Most likely the line should look like this (without the dot between Quaternion and targetRotation :
Quaternion targetRotation = Quaternion.LookRotation (targetPos - transform.position);
Answer by mlavik1 · Aug 30, 2016 at 07:30 AM
I don't have the "PlayerController" script so I cannot test, but looking at the code it seems that it might just be a small typo.
Try change the line:
Quaternion.targetRotation = Quaternion.LookRotation(targetPos - transform.position);
into
Quaternion targetRotation = Quaternion.LookRotation(targetPos - transform.position);
(replacing the dot with a space)
Does that work? Quaternion.LookRotation(vec) creates a quateternion from the specified forward vector, so it makes sense to do it like that.
Your answer
Follow this Question
Related Questions
Android deltaPosition.y isn't working? 1 Answer
Getting a scrolling camera to orbit around a circular walkway, following the player? 1 Answer
Where to put camera orbit around player script? 1 Answer
Mouse Orbit + Move Object + Follow Problem 1 Answer
Moving replacing center object with orbiting object 0 Answers