- Home /
Player Rotating after Collision...
Hello, So I made a capsule to be a placeholder for my character and after I run into something it starts glitching(I think because I'm using transform.Translate). So I added a little raycast to stop the player from ever really touching the object and it works great. But if I run along side the cube the player intersects a little and 1 out of every random chance my character will forever rotate after that collision.
#pragma strict
var stopSpeed = 0; //When Against Horizontal Collision
var walkSpeed:float;
var backSpeed:float = 0.5*walkSpeed;
var moveSpeed:float = walkSpeed; //Current Speed Can be Set to walkSpeed or stopSpeed or backSpeed
var rotSpeed:float;
var jumpHeight:float;
var grounded = false;
private var notJumpable = 1 << 8; //Bit Shift Number of Layer Desired
//Sets Layer Mask to Not Layer 8 = Not Jumpable
private var noHorzCollision = 1 << 9; //Bit Shift Number of Layer Desired
//Sets Layer Mask to Not Layer 9 = No Horz Collsion
function Update ()
{
//Key Codes
var keyUp = Input.GetKey(KeyCode.W);
var keyDown = Input.GetKey(KeyCode.S);
var keyLeft = Input.GetKey(KeyCode.A);
var keyRight = Input.GetKey(KeyCode.D);
var keyJump = Input.GetKeyDown(KeyCode.Space);
var keyRun = Input.GetKey(KeyCode.LeftShift);
//Movement
if (keyUp)
{
if (keyRun)
{
transform.Translate(Vector3(0,0,moveSpeed*2)); //Run Speed
}
else
{
transform.Translate(Vector3(0,0,moveSpeed)); //Normal Speed
}
}
if (keyDown)
{
transform.Translate(Vector3(0,0,-(backSpeed))); //Half Speed When Walking Backwards
}
//Rotation
if (keyLeft || keyRight)
{
if (keyLeft)
{
transform.Rotate(Vector3(0,-rotSpeed,0)); //Rotate Left
}
if (keyRight)
{
transform.Rotate(Vector3(0,rotSpeed,0)); //Rotate Right
}
}
else
{
transform.Rotate(Vector3.zero);
}
//Jump
if (keyJump && grounded == true)
{
rigidbody.velocity = Vector3(0,jumpHeight,0);
}
//Grounded
if (Physics.Raycast (transform.position, transform.TransformDirection (Vector3.down), 1, ~notJumpable))
{
grounded = true;
}
else
{
grounded = false;
}
//Horizontal Collisions
if (Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), 1, ~noHorzCollision))
{
if (keyUp)
{
moveSpeed = stopSpeed;
Debug.Log("Stop");
}
if (keyDown)
{
moveSpeed = backSpeed;
}
}
else
{
moveSpeed = walkSpeed;
}
}
Comment