- Home /
Question by
Adelphia · Apr 10, 2013 at 06:23 PM ·
rotationraycastvector3charactercontroller
character wont rotate and is stuck to the one position.
my character will not rotate left and right when i press the arrow keys. i am trying to get my character on a skateboard to go up a ramp and rotate with the ramp so i managed to get the raycast working correctly but then this happened so i think its something to do with the ray cast. as well when i take out the Vector3.slerp it doesnt rtate with the ramp but i can rotate left and right. here is my code
var rotateSpeed = 90;
var pushingImpulse = 3.5;
var maxSpeed = 12;
var decayRate = 0.1;
var targetDir:Vector3;
var ray:Ray;
var hit:RaycastHit;
private var character : CharacterController;
private var trans : Transform;
private var speed = 0.0;
function Start ()
{
character = GetComponent(CharacterController);
trans = transform;
}
function Push()
{
speed += pushingImpulse;
speed = Mathf.Min(speed, maxSpeed);
}
function Update ()
{
var horizontal = Input.GetAxis("Horizontal");
trans.Rotate(0, rotateSpeed * horizontal * Time.deltaTime, 0);
if (character.isGrounded && Input.GetKey(KeyCode.UpArrow))
Push();
var moveDirection = trans.forward * speed;
moveDirection += Physics.gravity;
character.Move(moveDirection * Time.deltaTime);
//Inside the Update function
//Cast the ray relative to player
ray = Ray(trans.position + Vector3.up, Vector3.down);
//If we are on the ground and we get a raycasthit
if (Physics.Raycast(ray, hit, 100)) {
if (character.isGrounded) {
targetDir = hit.normal;
Debug.DrawLine (transform.position, hit.point, Color.green);
}
}
//Smoothly move towards the new direction
transform.up = Vector3.Slerp(transform.up, targetDir, 5 * Time.deltaTime);
if (character.isGrounded)
{
speed -= decayRate * Time.deltaTime * speed;
}
}
Comment