[英]How to Set object rotation limits around a pivot in Unity3d C#?
我正在开发一个曲折游戏,如下所示:[1]: https://i.stack.imgur.com/miKmH.jpg [ZigZagGame][1]。
目标是让球沿着路径 (ZigZag) 传递,通过围绕 pivot 旋转路径(上、下、左和右),我使用鼠标拖动将 pivot 放在 ZigZag 的另一端。 我想限制路径的方向。 这是我要实现的代码:`
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotationCheminOnDragMouse : MonoBehaviour
{
float speed = 1.2f;
private void OnMouseDrag()
{
float rotx = Input.GetAxis("Mouse X") * speed * Mathf.Deg2Rad;
float roty = Input.GetAxis("Mouse Y") * speed * Mathf.Deg2Rad;
Vector3 backAngle = Vector3.back;
Vector3 leftAngle = Vector3.left;
transform.RotateAround(backAngle, -rotx);
transform.RotateAround(leftAngle, roty);
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
OnMouseDrag();
}
}
}
` 那么我该如何设置这些限制呢? 知道我不明白如何管理 C # 中的统一角度。 我希望你能帮我解决这个问题。 并提前感谢您的任何回复。
您可能正在使用 Mathf.Clamp,或者 Mathf.Clamp 仅用于此目的,以限制旋转。
您应该跟踪您已经旋转了多少,然后限制新的旋转,例如
public class RotationCheminOnDragMouse : MonoBehaviour
{
float speed = 1.2f;
[SerializeField] float minY = -45;
[SerializeField] float maxY = 45;
[SerializeField] float minX = -45;
[SerializeField] float maxX = 45;
private Vector2 alreadyRotated;
private void OnMouseDrag()
{
var rotx = Input.GetAxis("Mouse X") * speed * Mathf.Deg2Rad;
var roty = Input.GetAxis("Mouse Y") * speed * Mathf.Deg2Rad;
// Now here you limit how much you can rotate
if(rotX < 0)
{
rotx = Mathf.Max(rotx, minX - alreadyRotated.x));
}
else if(rotX > 0)
{
rotx = Maths.Min(rotx, maxX - alreadyRotated.x));
}
if(rotY < 0)
{
roty = Mathf.Max(roty, minY - alreadyRotated.y));
}
else if(rotY > 0)
{
roty = Maths.Min(roty, maxY - alreadyRotated.y));
}
transform.RotateAround(Vector3.forward, rotx);
transform.RotateAround(Vector3.left, roty);
alreadyRotated += new Vector2 (rotX, rotY);
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
OnMouseDrag();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.