x


Before updating to Windows 10 you may need to return your Pro license. More information here

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

avatar 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

avatar image

robertbu
115k 27 79 261

(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:

x1926
x1593
x991
x311

asked: Jul 15, 2012 at 09:14 AM

Seen: 2057 times

Last Updated: Mar 30 at 07:20 PM