- Home /
Quaternion issue: how can I fix this?
Hello Nice Folks,
I m having hard time to make a character controller for a fixed rotation cam.
my gols: 1- character move related to a fixed rotation cam and not to himself. Exemple: up arrow = character goes up screen direction;
2- Character animations rotates to directions that player is moving;
In orde to do it so, I create GameObjects: "player" that hold "bodyHolder" that holds fbx. I constrainted "player" to rotate, just move;
Everything was working fine, till I try to passe the animations (idle and walk) to animator Controller and I get this error1* and the animation keep stuck on walk animation, even if the conditions is false (showed in the console).
I've ready everything about this quaternion on internet (and I assume not get much more undestanding of this).
*1: error: Quaternion To Matrix conversion failed because input Quaternion is invalid {-0.129761, -0.486758, 0.471855, 0.702900} l=0.970486
My code to move "player" gameObject and rotate its child, "bodyHolder" gameObject.
import UnityEngine;
import System.Collections;
RequireComponent(Rigidbody);
RequireComponent(Animator);
private var copCharacter : Rigidbody;
private var copCam : Transform;
private var copCamFoward : Vector3;
private var copMove : Vector3;
//attributes
var walkSpeed : float = 2.0;
var copBody : Transform;
function Start () {
if (Camera.main != null)
{
copCam = Camera.main.transform;
}
else
{
Debug.LogWarning(
"Warning: no main camera found. Third person character needs a Camera tagged \"MainCamera\", for camera-relative controls.");
// we use self-relative controls in this case, which probably isn't what the user wants, but hey, we warned them!
}
copCharacter = GetComponent.<Rigidbody>();
}
function FixedUpdate () {
if (copCam != null){
var z = Input.GetAxis("Vertical");
var x = Input.GetAxis("Horizontal");
// calculate camera relative direction to move:
copCamFoward = Vector3.Scale(copCam.forward, new Vector3(1, 0, 1)).normalized;
copMove = z*copCamFoward + x*copCam.right;
//moving the player gameObject
copMove = transform.TransformDirection(copMove);
copMove *= walkSpeed;
copCharacter.transform.Translate(copMove * Time.deltaTime);
// rotate body mesh holder to walking position;
var newRotation = Quaternion.LookRotation (copMove);
copBody.rotation = newRotation;
}
}
my code to passa animation to animator controller:
private var anim : Animator;
var walking : int = 0;
function Start () {
}
function Update () {
anim = GetComponent.<Animator>();
var z = Input.GetAxisRaw("Vertical");
var x = Input.GetAxisRaw("Horizontal");
if ( x !=0 || z!=0 ){
walking = 1;
}
anim.SetInteger ("isWalking",walking);
Debug.Log(walking);
}
Your answer
Follow this Question
Related Questions
How to stop an animation on collision 0 Answers
Basic movement. Walking on walls. 8 Answers
Question about pushing objects, "Animate Physics" and Rigidbodies 0 Answers
Having problems with animation and character controller velocity not matching 0 Answers
Why are my animations not working correctly? Thanks! 0 Answers