- Home /
How do I make my player face the direction its moving
Hi guys, i'm creating a game for android and i'm using unity mobile assets- sidescrollerSetup. How can I make the player face the direction is moving? I mean when joystick is dragged left, he faces left, when joystick is dragged to right, he faces right? yeah, and here is the code i use:
#pragma strict
@script RequireComponent( CharacterController )
// This script must be attached to a GameObject that has a CharacterController
var moveTouchPad : Joystick;
var jumpTouchPad : Joystick;
var forwardSpeed : float = 4;
var backwardSpeed : float = 4;
var jumpSpeed : float = 16;
var inAirMultiplier : float = 0.25; // Limiter for ground speed while jumping
private var thisTransform : Transform;
private var character : CharacterController;
private var velocity : Vector3; // Used for continuing momentum while in air
private var canJump = true;
function Start()
{
// Cache component lookup at startup instead of doing this every frame
thisTransform = GetComponent( Transform );
character = GetComponent( CharacterController );
// Move the character to the correct start position in the level, if one exists
var spawn = GameObject.Find( "PlayerSpawn" );
if ( spawn )
thisTransform.position = spawn.transform.position;
}
function OnEndGame()
{
// Disable joystick when the game ends
moveTouchPad.Disable();
jumpTouchPad.Disable();
// Don't allow any more control changes when the game ends
this.enabled = false;
}
function Update()
{
var movement = Vector3.zero;
// Apply movement from move joystick
if ( moveTouchPad.position.x > 0 )
movement = Vector3.right * forwardSpeed * moveTouchPad.position.x;
else
movement = Vector3.right * backwardSpeed * moveTouchPad.position.x;
// Check for jump
if ( character.isGrounded )
{
var jump = false;
var touchPad = jumpTouchPad;
if ( !touchPad.IsFingerDown() )
canJump = true;
if ( canJump && touchPad.IsFingerDown() )
{
jump = true;
canJump = false;
}
if ( jump )
{
// Apply the current movement to launch velocity
velocity = character.velocity;
velocity.y = jumpSpeed;
}
}
else
{
// Apply gravity to our velocity to diminish it over time
velocity.y += Physics.gravity.y * Time.deltaTime;
// Adjust additional movement while in-air
movement.x *= inAirMultiplier;
// movement.z *= inAirMultiplier;
}
movement += velocity;
movement += Physics.gravity;
movement *= Time.deltaTime;
// Actually move the character
character.Move( movement );
if ( character.isGrounded ){ {
moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, 0);
moveDirection *= speed;
if (moveDirection.sqrMagnitude > 0.01)
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (moveDirection), 90);
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
// Remove any persistent velocity after landing
velocity = Vector3.zero;
}
Harshad$$anonymous$$, can you help me with this please?
I haven't read all your script but see if this forum thread helps: transform.LookAt or Quaternion.LookRotation on 1 axis only?
do you know how to make this using euler angles, or transform.lookAt?
Answer by NikunjPopat · Jul 02, 2014 at 01:11 PM
// Apply movement from move joystick
if ( moveTouchPad.position.x > 0 )
movement = transform.right * forwardSpeed * moveTouchPad.position.x;
else
movement =-transform.right * backwardSpeed * moveTouchPad.position.x;
Use transform.right instead of Vector3.right. It will provide you local rotation...
Assets/Standard Assets ($$anonymous$$obile)/Scripts/SidescrollControl.js(55,50): BCE0020: An instance of type 'UnityEngine.Transform' is required to access non static member 'right'.
what should i do? This appears when change from vector3.right to transform.right
Your answer