- 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