- Home /
what's wrong with this script?
#pragma strict
var moveTo : Vector3;
var rotateTo : Vector3;
var movementSpeed : float;
var sway : String = "AnimationName";
var idle : String = "AnimationName";
var anim : GameObject;
var animSpeed : float = 1.0;
function Update () {
if(Input.GetKey("left shift") && Input.GetKey("up") && CharacterController.isGrounded){ // here you can use boolean (if player is walking or running)
var runTarget = Quaternion.Euler(rotateTo);
transform.localRotation = Quaternion.Slerp(transform.localRotation, runTarget, Time.deltaTime * movementSpeed);
transform.localPosition = Vector3.Lerp(transform.localPosition, moveTo, Time.deltaTime * movementSpeed);
anim.animation[sway].speed = animSpeed;
anim.animation.CrossFade (sway);
}else{
transform.localRotation = Quaternion.Slerp(transform.localRotation, Quaternion.Euler (0, 0, 0), Time.deltaTime * movementSpeed);
transform.localPosition = Vector3.Lerp(transform.localPosition, Vector3(0,0,0), Time.deltaTime * movementSpeed);
anim.animation.CrossFade (idle);
}
}
and i get this error : An instance of type 'UnityEngine.CharacterController' is required to access non static member 'isGrounded'.
Answer by fafase · Dec 27, 2012 at 10:31 AM
Your answer is in the error.
CharacterController.isGrounded
This line above would mean isGrounded is a static member but it is not.
You need to create a variable of type CharacterController (A), fetch the CC component(B) and place a reference to it(C) in the variable and then use the instance(D).
var controller:CharacterController; //A
function Start(){
controller = GetComponent(CharacterController); //B and C
}
function Update(){
if(controller.isGrounded)//D
}
Answer by Trustrix · Dec 27, 2012 at 12:18 PM
I have done and now i get this error : Object reference not set to an instance of an object
#pragma strict
var moveTo : Vector3;
var rotateTo : Vector3;
var movementSpeed : float;
var controller : CharacterController;
var sway : String = "AnimationName";
var idle : String = "AnimationName";
var anim : GameObject;
var animSpeed : float = 1.0;
function Start(){
controller = GetComponent(CharacterController); //B and C
}
function Update () {
if(Input.GetKey("left shift") && Input.GetKey("up") && controller.isGrounded){ // here you can use boolean (if player is walking or running)
var runTarget = Quaternion.Euler(rotateTo);
transform.localRotation = Quaternion.Slerp(transform.localRotation, runTarget, Time.deltaTime * movementSpeed);
transform.localPosition = Vector3.Lerp(transform.localPosition, moveTo, Time.deltaTime * movementSpeed);
anim.animation[sway].speed = animSpeed;
anim.animation.CrossFade (sway);
}else{
transform.localRotation = Quaternion.Slerp(transform.localRotation, Quaternion.Euler (0, 0, 0), Time.deltaTime * movementSpeed);
transform.localPosition = Vector3.Lerp(transform.localPosition, Vector3(0,0,0), Time.deltaTime * movementSpeed);
anim.animation.CrossFade (idle);
}
}
A couple of things you are doing wrong here. You get the CC but you use the transform to move the guy. Somehow wrong. See here on how to use the CC http://unitygems.com/basic-ai-character/
Now for you error, is the CC component and that script attached to the same game object? And I mean the exact same, not only the same object at different level of hierarchy.
I have : -camera with mouse look, character controller, character motor and FPS input controller. - an Empty game object i've called sway where i have put my arms with the weapon i've called deagle - The deagle where i have put this script - All works Well but when i jump, my sprint animation(i've $$anonymous$$ade with this script) works too.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Unity animations not working 1 Answer
How to export MMD model to Unity? 0 Answers
Scripting help 2 Answers