- 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
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                