how to lock object's rotation without rigidbody
so I'm trying to rotate an object and lock the rotation of object once it reaches certain point with event trigger. Below is my code:
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections;
public class TurnLeftRightSwitches : MonoBehaviour {
public EventTrigger trigger;
public float turnDial = 1.0f;
public float limitAngle = 230.0f;
public float lockRotation;
public void Start ()
{
trigger = GetComponent<EventTrigger>();
trigger.AddListener(EventTriggerType.Drag, OnDrag);
}
public void OnDrag (BaseEventData data)
{
Debug.Log ("Hit");
if (Input.GetAxis("Mouse X") > 0) {
this.transform.Rotate (0, 0, turnDial);
if (transform.rotation.z >= limitAngle)
{
transform.rotation = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, lockRotation);
}
}
if (Input.GetAxis("Mouse X") < 0)
{
this.transform.Rotate (0, 0, -turnDial);
}
}
}
I can rotate an object using my mouse X from left to right. The thing is, when the dial reaches certain position (say, 0 (the starting min rotation) and 230 (desired max rotation), I have no idea how to make object stop rotating. Quaternion isn't working as well so that's pretty much broken code as of right now. Is there way to lock the object's rotation without using rigidbody?
In short, I'd like to know if there is a way to stop an object rotating beyond certain point without Rigidbody, Update(), and sample code in c#, please.
Thanks for all help in advance.
Answer by nathanthesnooper · Mar 02, 2017 at 06:09 AM
If I can understand your question correctly, you might want to have another variable for your x (vertical) rotation. You add Mouse Y axis every frame and clamp it. So then you can set the rotation. My English sucks today so here is my idea: Vector2 rotation;
void Update () {
rotation.y += Input.GetAxis("Mouse X");
rotation.x += Input.GetAxis("Mouse Y");
rotation.y = Mathf.Clamp(rotation.y, -80, 80);
rotation.x = Mathf.Clamp(rotation.x, -80, 80);
this.transform.rotation = Quaternion.Euler(rotation.x, rotation.y, 0);
}
does this only work in Update()? I tried to do it under OnDrag(), and it's not really working...
Your answer
Follow this Question
Related Questions
Simple Rotate Script won't work! 2 Answers
Rotate and Zoom ARCamera 3Dobject in user touch 1 Answer
How to smoothly rotate an object 180 degrees each time you press the spacebar in 3D 0 Answers
[Unity Vuforia] Rotating an object with mouse drag. 0 Answers
Need help with adding a function to EventTrigger from editor script 0 Answers