沿物体面进行光线投射,同时保持光线水平统一

Raycast along objects face while keeping the ray horizontal in unity

我正在尝试沿着物体的面进行光线投射,以便在由物体制成的容器中创建液体表面的网格,无论它们的旋转如何。 目前我正在进行变换。up/right/forward 使用 X 和 Z,但将 Y 设置为 0 作为光线投射的方向。这似乎适用于对象在多个轴上旋转的单元。

Example of error

这里可以看到绿色光线投射的方向不是沿着脸部的。我认为解决方案可能与采用我忽略的 y 值并以某种方式将其应用于 x 和 z 有关。

这是一个概念,玩家将使用原始碰撞器构建自己的容器,因此无论对象旋转如何,它都有效。

如果您有感兴趣的表面法线,您可以使用 Vector3.Cross 找到同样垂直于 up 的切线。只要确保在向上事件中检查结果是否为 (0,0,0) 并且法线共线,然后您可以选择任意世界水平方向。

public class test : MonoBehaviour
{
    void Update()
    {
        Vector3 dir = HorizontalTangent(transform.up);
        Debug.DrawLine(transform.position, transform.position + dir,Color.red, 0f);
    }

    Vector3 HorizontalTangent(Vector3 surfaceNorm)
    {
        Vector3 res = Vector3.Cross(Vector3.up, surfaceNorm);
        if (res == Vector3.zero) res = Vector3.right;
        return res;
    }
}