- Home /
How to make my player to look in the direction of right joystick's input direction
Hey guys, i'm trying to make character control for touch screen. I want my player to look in the direction of right joystick movement. like if i move my joystick up the player should look in positive z direction, if i move my right joystick down the player should look in negative direction and same for x axis. i have kinda reached half way as at the start point it is working but as i move the character, it just keep looking in the direction of player's spawn point. the script i used is here.
pragma strict
@script RequireComponent( CharacterController )
// This script must be attached to a GameObject that has a CharacterController var moveJoystick : Joystick; var rotateJoystick : Joystick; public var Quaternion;
var forwardSpeed : float = 2; var backwardSpeed : float = 2; var sidestepSpeed : float = 4;
private var thisTransform : Transform; private var character : CharacterController; private var velocity : Vector3; // Used for continuing momentum while in air
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
moveJoystick.Disable(); rotateJoystick.Disable();
// Don't allow any more control changes when the game ends
this.enabled = false;
}
function Update() { var movement = thisTransform.TransformDirection( Vector3( moveJoystick.position.x, 0, moveJoystick.position.y ) );
// We only want horizontal movement
movement.y = 0;
movement.Normalize();
var absJoyPos = Vector2( Mathf.Abs( moveJoystick.position.x ), Mathf.Abs( moveJoystick.position.y ) );
if ( absJoyPos.y > absJoyPos.x )
{
if ( moveJoystick.position.y > 0 )
movement *= forwardSpeed * absJoyPos.y;
else
{
movement *= backwardSpeed * absJoyPos.y;
}
}
else
{
movement *= sidestepSpeed * absJoyPos.x;
}
movement += velocity;
movement += Physics.gravity;
movement *= Time.deltaTime;
// Actually move the character
character.Move( movement );
if ( character.isGrounded )
// Remove any persistent velocity after landing
velocity = Vector3.zero;
var rotation = Vector3( rotateJoystick.position.x, 1, rotateJoystick.position.y );
if (rotation != Vector3.zero)
{
transform.LookAt(rotation);
}
}