【发布时间】:2020-12-11 16:43:33
【问题描述】:
我有两个具有相同比例的平面游戏对象。我试图实现查看第一个移动平面是否围绕位置/旋转作为第二个静态平面。位置和旋转是否匹配并不重要,重要的是它应该接近相同的值。例如,如果平面 2 的 x 位置为 2.75,则平面 1 应与值 2 匹配。它应该具有至少靠近第二个平面的偏移值。我如何做到这一点?
public class CheckIfFits: MonoBehaviour
{
public GameObject Plane_2;
public float offset;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(this.transform.position == Plane_2.transform.position && this.transform.eulerAngles == Plane_2.transform.eulerAngles)
{
Debug.Log("THEY MATCH");
}
}
}
编辑: 轮换的答案并不适用于所有实例。例如,如果对象被翻转或沿负轴旋转。这是我暂时做的:
float diff = Quaternion.Angle(transform.rotation, target.rotation);
// Return true if both values are smaller than the offset.
return dist <= offset_position && ((diff <= offset_rotation && diff >= 0) || (diff <= (90+offset_rotation) && diff >= 90) || (diff <= (180+offset_rotation) && diff >= 180) || (diff <= (270+offset_rotation) && diff >= 270) || (diff <= 360 && diff >= (350+offset_rotation)));
不知道有没有更好的办法。
【问题讨论】:
-
“作为第二个静态平面的精确位置/旋转。位置和旋转是否匹配并不重要” 现在是哪个?您要检查它们是否完全相同,或者它们是否匹配无关紧要?
-
对不起。我会改变我的问题。
-
@MathewHD 我确实想到了距离,但这对于计算位置很有效。轮换不是问题吗?
-
不,它应该适用于两者,因为最后你的 eulerAngles 也只是一个 Vector3。