How do I make my character to walk, or run relative to the movement of the camera?
I made this code:
public Animator anim;
public float WalkSpeed = 2f;
public float RunSpeed = 4f;
public float TamSalto = 3f;
void Awake()
{
anim = GetComponent<Animator> ();
}
void Update()
{
Caminar ();
Correr ();
Saltar ();
}
void Caminar()
{
if (Input.GetKey (KeyCode.W))
{
anim.SetBool ("Caminar", true);
transform.Translate(Vector3.forward * WalkSpeed * Time.deltaTime);
}
if (Input.GetKey (KeyCode.S))
{
anim.SetBool ("Caminar", true);
transform.Translate(-Vector3.forward * WalkSpeed * Time.deltaTime);
}
else if (Input.GetButtonUp ("Vertical"))
{
anim.SetBool ("Caminar", false);
}
}
void Correr()
{
if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.LeftShift))
{
anim.SetBool ("Correr", true);
transform.Translate(Vector3.forward * RunSpeed * Time.deltaTime);
}
else
{
anim.SetBool("Correr", false);
}
}
void Saltar()
{
if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.LeftShift))
{
if (Input.GetKeyDown (KeyCode.Space))
{
anim.SetTrigger ("SaltaMientrasCorre");
transform.Translate(Vector3.up * TamSalto * Time.deltaTime);
}
}
}
It works perfectly to walk, run, and jump while I run. But the problem is that I want to make the character to walk where the camera is pointing. I mean, if I'm walking straight, and then, I move the mouse to the right, I want that the character just keep walking, but walking to that direction. Then, if I'm running straight, and theres an object I want to avoid, I want to move the mouse to the left (for example) and I want that the character keep runing to where I'm looking (slightly to the left).
I also have a script that makes the camera to orbit the player like the camera of GTA San Andreas. This is the script:
var target : Transform; var distance = 10.0;
var xSpeed = 250.0; var ySpeed = 120.0;
var yMinLimit = -20; var yMaxLimit = 80;
private var x = 0.0; private var y = 0.0;
@script AddComponentMenu("Camera-Control/Mouse Orbit")
function Start () { var angles = transform.eulerAngles; x = angles.y; y = angles.x;
// Make the rigid body not change rotation
if (GetComponent.<Rigidbody>())
GetComponent.<Rigidbody>().freezeRotation = true;
}
function LateUpdate () { if (target) { x += Input.GetAxis("Mouse X") xSpeed 0.02; y -= Input.GetAxis("Mouse Y") ySpeed 0.02;
y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
transform.rotation = rotation;
transform.position = position;
}
}
static function ClampAngle (angle : float, min : float, max : float) { if (angle < -360) angle += 360; if (angle > 360) angle -= 360; return Mathf.Clamp (angle, min, max); }
It's in JavaScript. Thank you! :D
Your answer
Follow this Question
Related Questions
I need help with my third person camera raycast 0 Answers
Camera jet controls problem 0 Answers
RayCast StandartProjectAssets Ethan prefab problem. 2 Answers