Unity3D-可视化视锥盆无法正确旋转

问题描述

我写了一个简单的代码来可视化视锥。它可以正常工作,但是当我将对象旋转90度时,视锥位于对象的“后面”,而我希望它在右边。

1

2

这是我可视化视锥的全部代码:

[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class FieldOfView : MonoBehaviour
{
    private Mesh fieldOfViewMesh;
    private Vector3[] vertices;
    private Vector2[] uv;
    private int[] triangles;

    public float fieldOfView = 70.0f;
    public float fieldOfViewDistance = 7.0f;
    public int rayCount = 32;

    void Start()
    {
        fieldOfViewMesh = new Mesh();
        fieldOfViewMesh.name = "fieldOfViewMesh";
        GetComponent<MeshFilter>().mesh = fieldOfViewMesh;

        vertices = new Vector3[rayCount + 2];
        uv = new Vector2[vertices.Length];
        triangles = new int[rayCount * 3];
    }

    void LateUpdate()
    {
        fieldOfViewMesh.Clear();
        vertices[0] = transform.localPosition;

        for (int i=0; i<=rayCount; i++)
        {
            vertices[i + 1] = transform.localPosition
                + VectorFromAngle(transform.eulerAngles.y - fieldOfView / 2.0f + fieldOfView / rayCount * i).normalized * fieldOfViewDistance;

            if (i > 0 && i < rayCount)
            {
                triangles[i * 3 + 0] = 0;
                triangles[i * 3 + 1] = i - 1;
                triangles[i * 3 + 2] = i;
            }
        }

        fieldOfViewMesh.vertices = vertices;
        fieldOfViewMesh.uv = uv;
        fieldOfViewMesh.triangles = triangles;
    }

    Vector3 VectorFromAngle(float inputAngle)
    {
        return Quaternion.AngleAxis(inputAngle,transform.up) * transform.forward;
    }
}

我不确定我在做什么错。是否可以将度数转换为弧度(或缺乏弧度)?

解决方法

问题解决了。似乎使用localPosition是错误的。我在InverseTransformPoint()中使用了position,现在可以正常使用了。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...