- Home /
 
 
               Question by 
               Superfantasy · Jan 24, 2017 at 11:19 AM · 
                rotationcharactercontrollerquaternionthird-person  
              
 
              Third person Character Control
Hi I'm working on creating a third person character control iv'e been following a series of tutorials. https://www.youtube.com/watch?v=b0PvJ4AWvWQ&list=PLKFvhfT4QOqlEReJ2lSZJk_APVq5sxZ- I have two main issue first on the following code i'm not sure what Quaternion FromtoRotation is doing in fact i messed with it a little and removing it all together doesn't seem to make a difference. using System.Collections; using System.Collections.Generic; using UnityEngine;
 public class thirdPersonCharacter : MonoBehaviour {
     public float Speed;
     public float Direction;
     public Vector2 characterFacing;
     private float horizontal = 0f;
     private float vertical = 0f;
     public Animator characterAnimator;
     private float directionDampTime = 0.1f;
     //private Vector3 stickDirection;
     public Transform camera;
     private float directionSpeed = 0.5f;
 
 
     // Use this for initialization
     void Start () {
        
         
     }
 
     // Update is called once per frame
     void Update() {
         if (characterAnimator)
         {
             vertical = Input.GetAxis("Vertical");
             horizontal = Input.GetAxis("Horizontal");
             Speed = new Vector2(vertical, horizontal).sqrMagnitude;
 
             Direction = horizontal * Speed;
             characterAnimator.SetFloat("Speed", Speed);
             characterAnimator.SetFloat("Direction", Direction);
                 //, directionDampTime, Time.deltaTime);
         }
        
        // Debug.DrawRay(new Vector3(this.transform.position.x, this.transform.position.y + 2f, this.transform.position.z), moveDirection, Color.green);
        // Debug.DrawRay(new Vector3(this.transform.position.x, this.transform.position.y + 2f, this.transform.position.z), stickDirection, Color.blue);
        // Debug.DrawRay(new Vector3(this.transform.position.x, this.transform.position.y + 2f, this.transform.position.z), axisSign, Color.red);
 
 
     }
 
     void StickToWorldSpace(Transform root, Transform camera, ref float directionOut, ref float speedOut)
     {
 
         // Characters Local forward direction
         Vector3 rootDirection = root.forward;
 
         // Direction of Control stick
         Vector3 stickDirection = new Vector3(horizontal, 0, vertical);
 
         //Get Camera rotation
         Vector3 cameraDirection = camera.forward;
         cameraDirection.y = 0.0f;
         Quaternion shift = Quaternion.FromToRotation(Vector3.forward,cameraDirection);
 
         // Convert Joystick input in Worldspace cooridinate
         Vector3 moveDirection = shift * stickDirection;
         Vector3 axisSign = Vector3.Cross(moveDirection, cameraDirection);
 
         float angleRootToMove = Vector3.Angle(rootDirection, moveDirection) * (axisSign.y >= 0 ? -1f : 1f);
 
         angleRootToMove /= 180;
 
         directionOut = angleRootToMove * directionSpeed;
 
 
     }
 }
 
               Secondly when using this script, when i press the backward key the character moves forward but it shouldn't be if someone could tell me what i'm doing wrong i would appreciate it thanks in advance.
               Comment
              
 
               
              Your answer