x


Platform Input Controller Script NullReferenceException stopping character from moving, can anyone fix this?

Hai people. In the Platform Input Controller Script, there is a NullReferenceException error in line 35 of this code, can anyone help me with what it is?

 // This makes the character turn to face the current movement speed per default.
 var autoRotate : boolean = true;
 var maxRotationSpeed : float = 360;
 
 private var motor : CharacterMotor;
 
 // Use this for initialization
 function Awake () {
  motor = GetComponent(CharacterMotor);
 }
 
 // Update is called once per frame
 function Update () {
  // Get the input vector from kayboard or analog stick
  var directionVector = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);
  
  if (directionVector != Vector3.zero) {
  // Get the length of the directon vector and then normalize it
  // Dividing by the length is cheaper than normalizing when we already have the length anyway
  var directionLength = directionVector.magnitude;
  directionVector = directionVector / directionLength;
  
  // Make sure the length is no bigger than 1
  directionLength = Mathf.Min(1, directionLength);
  
  // Make the input vector more sensitive towards the extremes and less sensitive in the middle
  // This makes it easier to control slow speeds when using analog sticks
  directionLength = directionLength * directionLength;
  
  // Multiply the normalized direction vector by the modified length
  directionVector = directionVector * directionLength;
  }
  
  // Rotate the input vector into camera space so up is camera's up and right is camera's right
  directionVector = Camera.main.transform.rotation * directionVector;
  
  // Rotate input vector to be perpendicular to character's up vector
  var camToCharacterSpace = Quaternion.FromToRotation(-Camera.main.transform.forward, transform.up);
  directionVector = (camToCharacterSpace * directionVector);
  
  // Apply the direction to the CharacterMotor
  motor.inputMoveDirection = directionVector;
  motor.inputJump = Input.GetButton("Jump");
  
  // Set rotation to the move direction 
  if (autoRotate && directionVector.sqrMagnitude > 0.01) {
  var newForward : Vector3 = ConstantSlerp(
  transform.forward,
  directionVector,
  maxRotationSpeed * Time.deltaTime
  );
  newForward = ProjectOntoPlane(newForward, transform.up);
  transform.rotation = Quaternion.LookRotation(newForward, transform.up);
  }
 }
 
 function ProjectOntoPlane (v : Vector3, normal : Vector3) {
  return v - Vector3.Project(v, normal);
 }
 
 function ConstantSlerp (from : Vector3, to : Vector3, angle : float) {
  var value : float = Mathf.Min(1, angle / Vector3.Angle(from, to));
  return Vector3.Slerp(from, to, value);
 }
 
 // Require a character controller to be attached to the same game object
 @script RequireComponent (CharacterMotor)
 @script AddComponentMenu ("Character/Platform Input Controller")
 

Thanks if you can help :D

more ▼

asked Jul 15, 2012 at 09:14 AM

Flaxix gravatar image

Flaxix
1 9 6 7

Same problem in Unity 4 installed today. Any solutions?

May 14, 2013 at 04:15 AM okmot
(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

If you are referring to this line:

 directionVector = Camera.main.transform.rotation * directionVector;

One way for this line to generate a null reference is if you've renamed your main camera. For 'Camera.main' to work, the camera must be named 'Main Camera'.

more ▼

answered May 14, 2013 at 04:18 AM

robertbu gravatar image

robertbu
110k 21 39 185

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x9516
x1649
x1421
x874
x269

asked: Jul 15, 2012 at 09:14 AM

Seen: 1910 times

Last Updated: May 14, 2013 at 04:18 AM