Here is the Code:
rigidbody.rotation = Quaternion.Euler(rigidbody.velocity.z * tilt2, rigidbody.rotation.eulerAngles.y, rigidbody.velocity.x * tilt);
This code currently is controlling tilt/bank of my player controller through its rigidbody. It works great but only on global axis. Is there a way to write this code out so it gives me same control but on the local axis?
I’ve tried this:
rigidbody.rotation = Quaternion.Euler(transform.TransformDirection (rigidbody.velocity.z * tilt2, rigidbody.rotation.eulerAngles.y, rigidbody.velocity.x * tilt));
… No dice!
Entire code looks like:
using UnityEngine;
using System.Collections;
[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour
{
// Places specific attributes in Player Inspector
public float speed;
public float tilt;
public float tilt2;
public float RotateSpeed = 30f;
public Boundary boundary;
void FixedUpdate ()
{
// Boat X and Z axis movement
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3(-moveVertical, 0.0f, moveHorizontal);
movement = transform.TransformDirection(movement);
rigidbody.velocity = movement * speed;
// rigidbody.velocity.x(moveHorizontal * speed);
// rigidbody.velocity.z(moveVertical * speed);
// Restrains Boat movement
rigidbody.position = new Vector3
(
Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax)
);
// Boat Tilt and Bank
rigidbody.rotation = Quaternion.Euler(rigidbody.velocity.z * tilt2, rigidbody.rotation.eulerAngles.y, rigidbody.velocity.x * tilt);
// rigidbody.rotation = Quaternion.Euler(transform.TransformDirection (rigidbody.velocity.z * tilt2, rigidbody.rotation.eulerAngles.y, rigidbody.velocity.x * tilt));
//Boat Y axis Turn/Rotation
if (Input.GetKey(KeyCode.Z))
transform.Rotate(-Vector3.up * RotateSpeed * Time.deltaTime);
else if (Input.GetKey(KeyCode.C))
transform.Rotate(Vector3.up * RotateSpeed * Time.deltaTime);
}
}