- Home /
Limiting and Rotating a Platform.
I am having some trouble finding the correct code nessesary to rotate a platform by the x, and z-axises using input of the w,a,s,d keys. I have tried several methods, such as using a rigidbody and AddTorque, but I can't stop it from rotating after a while and all my objects fall off. Perhaps there is a way I can add a max rotation?
And Ideas? Either in Java or C#, I can understand and convert both.
Also, my platform has child objects so I would put static objects in the main platform right?
Thanks 2 tons!
Answer by Tim-Michels · Jul 11, 2012 at 07:38 AM
Well you should use Quaternion rotations if you want to control it by axes.
You should have 2 member variables which contain the values for the rotation, example of script attached to platform:
float _Xrotation = 0.0f;
float _Zrotation = 0.0f;
float _MaxXrotation = 15.0f;
float _MaxZrotation = 15.0f;
float _RotSpeed = 3.0f;
Quaternion _StartRotation;
void Start()
{
_StartRotation = this.transform.rotation;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
_Xrotation -= Time.deltaTime * _RotSpeed;
_Xrotation = Mathf.Clamp(_Xrotation, -_MaxXrotation, _MaxXrotation); //Make sure the value stays within maximum rotation
}
if (Input.GetKeyDown(KeyCode.S))
{
_Xrotation += Time.deltaTime * _RotSpeed;
_Xrotation = Mathf.Clamp(_Xrotation, -_MaxXrotation, _MaxXrotation); //Make sure the value stays within maximum rotation
}
if (Input.GetKeyDown(KeyCode.A))
{
_Zrotation -= Time.deltaTime * _RotSpeed;
_Zrotation = Mathf.Clamp(_Zrotation, -_MaxZrotation, _MaxZrotation); //Make sure the value stays within maximum rotation
}
if (Input.GetKeyDown(KeyCode.D))
{
_Zrotation += Time.deltaTime * _RotSpeed;
_Zrotation = Mathf.Clamp(_Xrotation, -_MaxZrotation, _MaxZrotation); //Make sure the value stays within maximum rotation
}
this.transform.rotation = _StartRotation * Quaternion.AngleAxis(_Xrotation, Vector3.forward) * Quaternion.AngleAxis(_Zrotation, Vector3.left);
}
The rotation of your plane is constantly calculated, based on its start rotation, multiplied with each custom axis rotation, which you can control perfectly.
I probably mixed up keys and axes in this example, but it should give you a basic idea.
Hope this helps ;)
Your answer
Follow this Question
Related Questions
Rigidbody on a platform 2 Answers
Rigidbody stops working when parented to a moving object 0 Answers
Rigidbody jump on platform 0 Answers