- Home /
How to limit orientation of object/rigidbody?
Hi, I am trying to solve a problem but it seems that the methods provided on the internet aren't suited and tend not to work. I am making spaceship game and I am trying to limit the roll of the ship. The idea is for it to stop applying force when it gets to a 10 degree angle and it must stay at 10 degrees unless the user turns to the other side.
I am a bit stubborn and would like to use forces and not transform when it comes to moving objects in my games. The other idea is to apply a counter force so that it stays at 10 degrees and yet again when the player turn to the other side a torque will be added to rotate it the other way. Here is the code, try to ignore the commented code.
Any help would be appreciated.
using UnityEngine;
using System.Collections;
public class ShipControl : MonoBehaviour {
public Rigidbody mainBodyRigid;
public Rigidbody[] mainThrustForward = new Rigidbody[2];
public int amountMainThrustForward;
public float maxMainThrust;
public float maxTurnTorque;
public float maxRoll;
public float minRoll;
private float currentRoll;
private float currentPitch;
private float currentYaw;
private Quaternion mainBodyRigidQuat;
private Quaternion newRollQuat;
private float thrust = 3000;
void Start ()
{
mainBodyRigidQuat = mainBodyRigid.rotation;
currentRoll = mainBodyRigidQuat.eulerAngles.x;
currentPitch = mainBodyRigidQuat.eulerAngles.z;
currentYaw = mainBodyRigidQuat.eulerAngles.y;
}
void Update ()
{
mainBodyRigidQuat = mainBodyRigid.rotation;
currentRoll = mainBodyRigidQuat.eulerAngles.x;
currentPitch = mainBodyRigidQuat.eulerAngles.z;
currentYaw = mainBodyRigidQuat.eulerAngles.y;
//newRollQuat = new Quaternion(10, currentYaw, currentPitch, mainBodyRigidQuat.w);
}
void FixedUpdate()
{
if(Input.GetKey(KeyCode.D))//Apply torque to rotate on x-axis(this is roll)
{
mainBodyRigid.AddRelativeTorque(new Vector3(0,thrust,0), ForceMode.Force);
}
if(Input.GetKey(KeyCode.A))))//Apply torque to rotate on x-axis(this is roll)
{
mainBodyRigid.AddRelativeTorque(new Vector3(0,thrust*(-1),0), ForceMode.Force);
}
if(currentRoll <= 10)
{
//This is where I need help
}
}
}
Your answer
Follow this Question
Related Questions
RigidBody immediately stops after AddForce 1 Answer
Fireing a tank projectile. 1 Answer
Unity Physics On Input Issue? 0 Answers
How do I add a pulling force? 1 Answer
Cannot assign to 'Death' because its a method group 2 Answers