- Home /
Make the character face the direction he is moving?
Hey guys, I'm trying to make the character face the direction it is moving but I can't make it work. I'm working on a 3d game with a diablo-style camera but without depending on the mouse, and I'm using the script from 'Survival Shooter' as a reference.
Here's the movement script:
public float speed = 6f; // The speed that the player will move at.
public float rotateSpeed = 2f;
public Camera playerCam;
Vector3 movement; // The vector to store the direction of the player's movement.
Animator anim; // Reference to the animator component.
Rigidbody playerRigidbody; // Reference to the player's rigidbody.
int floorMask; // A layer mask so that a ray can be cast just at gameobjects on the floor layer.
float camRayLength = 100f; // The length of the ray from the camera into the scene.
Vector3 rotationY;
void Awake ()
{
// Create a layer mask for the floor layer.
floorMask = LayerMask.GetMask ("Floor");
// Set up references.
anim = GetComponent <Animator> ();
playerRigidbody = GetComponent <Rigidbody> ();
}
void FixedUpdate ()
{
// Store the input axes.
float h = Input.GetAxisRaw ("Horizontal");
float v = Input.GetAxisRaw ("Vertical");
// Move the player around the scene.
Move (h, v);
// Turn the player to face the mouse cursor.
Turning (h, v);
}
void Move (float h, float v)
{
// Move the player to it's current position plus the movement.
Vector3 targetDirection = new Vector3(h, 0f, v);
targetDirection = Camera.main.transform.TransformDirection(targetDirection);
targetDirection = targetDirection.normalized * speed * Time.deltaTime;
targetDirection.y = 0.0f;
playerRigidbody.MovePosition (transform.position + targetDirection);
}
void Turning(float y, float x)
{
if (y != 0) {
rotationY.Set (0f, y, 0f);
//rotationY = rotationY.normalized * (5 * rotateSpeed);
Quaternion deltaRotation = Quaternion.Euler (rotationY);
playerRigidbody.MoveRotation (deltaRotation);
}
}
However when I move the character it always faces the bottom-left side of the screen. How can I fix that?
Answer by KdRWaylander · Apr 20, 2015 at 06:41 AM
Hi,
You can always try with transform.LookAt(Vector3 target);
http://docs.unity3d.com/ScriptReference/Transform.LookAt.html
Answer by Bren0831 · Dec 17, 2016 at 11:11 PM
var rotSpeed = 6;//setting the speed the character will rotate
var moveSpeed = 6;//setting the speed the character will walk
function Update()
{
var v3 = Vector3 (0.0, Input.GetAxis ("Horizontal"), 0.0);
transform.Rotate (v3 * rotSpeed * Time.deltaTime);
v3 = Vector3 (0.0, 0.0, Input.GetAxis("Vertical"));
transform.Translate (v3 * moveSpeed * Time.deltaTime);
}
Your answer
Follow this Question
Related Questions
Rotation for movement cannot be set in script? 1 Answer
Character Rotation 2 Answers
How can I move the character like 2D games? 1 Answer
How to Logically Match Ground Slope While Using This Code? 1 Answer
Tweaking character movement 1 Answer