- Home /
Need Help Limiting Rotation on Object's X axis
In my game I have 3d tanks and this script controls the up and down of the gun barrel. And i do not want the gun barrel to rotate all the way around, and i want it to stop at certain points, so how would I go about doing that?
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class GunMovement : MonoBehaviour {
public GameObject bobject;
void FixedUpdate () {
if (Input.GetKey ("down")) {
bobject.transform.Rotate (1, 0, 0);
}
if (Input.GetKey ("up")) {
bobject.transform.Rotate (-1, 0, 0);
}
}
}
Answer by Arkaid · Feb 23, 2018 at 04:56 AM
Instead of using relative rotations (that is, rotating one degree up and down from your previous position), use an absolute value with a delta.
Here's something that works. start is the local rotation at the beginning of the script, xRotation is the delta value you can rotate from start. On each update, you clamp the amount rotated by a maximum and minimum value:
public class GunMovement : MonoBehaviour {
public GameObject bobject;
private Quaternion start;
private int xRotation;
private void Start()
{
start = bobject.transform.localRotation;
xRotation = 0;
}
void FixedUpdate()
{
if (Input.GetKey("down"))
{
xRotation++;
}
if (Input.GetKey("up"))
{
xRotation--;
}
// limit the rotation here!
const int MaxAngle = 20;
const int MinAngle = -5;
xRotation = Mathf.Clamp(xRotation, MinAngle, MaxAngle);
// the final rotation will be the start rotation
// combined with the delta values
bobject.transform.localRotation = start * Quaternion.Euler(xRotation, 0, 0);
}
}
If this answer solved your problem, then please mark it as the answer so that this thread can be closed. :-)
Your answer
Follow this Question
Related Questions
How do i rotate player (aeroplane) using A/D keys while moving Left/Right at the same time 1 Answer
How to get all gameObjects with a script on them 1 Answer
How to make an object rotate to raycast hit from mouse? Unity 3D 1 Answer
Smoothly rotating an object to a specific rotation. 1 Answer
What is more efficient for assign rotation with euler angles? 2 Answers