Unity将Raycast Radius从3D转换为2D

时间:2018-03-02 14:07:43

标签: c# unity3d

我正在编写一个带有自上而下视图的2D视频游戏。在这个游戏中我使用的是手电筒。问题是我找到的唯一教程是3D,我很难将代码转换为2D。

public class Lightning : MonoBehaviour
{
    [Header("Light")]
    public float ViewRadius;
    public float ViewAngle;
    public Vector3 DirfromAngle(float angle)
    {
        return new Vector3(Mathf.Sin(angle * Mathf.Deg2Rad),0, Mathf.Cos(angle * Mathf.Deg2Rad));
    }
}

这是3D中的代码,将其转换为2D时我有

public class Lightning : MonoBehaviour
{
    [Header("Light")]
    public float ViewRadius;
    public float ViewAngle;
    public Vector2 DirfromAngle(float angle)
    {
        return new Vector2(Mathf.Sin(angle * Mathf.Deg2Rad), Mathf.Cos(angle * Mathf.Deg2Rad));
    }
}

我正在使用Unity Editor可视化我的半径:3D:

[CustomEditor(typeof(Lightning))]
public class FieldofViewEditor : Editor {
void OnSceneGUI()
{
    Lightning fow = (Lightning)target;
    Handles.color = Color.white;
    Handles.DrawWireArc(fow.transform.position, Vector3.up,Vector3.forward, 
    360, fow.ViewRadius);
}
}

和2D:

[CustomEditor(typeof(Lightning))]
public class FieldofViewEditor : Editor {
    void OnSceneGUI()
    {
        Lightning fow = (Lightning)target;
        Handles.color = Color.white;
        Handles.DrawWireArc(fow.transform.position, 
        Vector2.up,Vector2.left, 360, fow.ViewRadius);
    }
}

当我在游戏中拥有它时,我只有一条线而不是半径,我假设它是由于它是错误的坐标或我弄乱了窦或余弦。

1 个答案:

答案 0 :(得分:0)

如果你俯视xy平面,你希望弧的法线朝向摄像机,现在你的法线正在y轴上,这意味着你的弧是在xz平面上绘制的。如果将相机切换到3d,则可能会看到弧形。要在x-y平面绘制圆弧,您应该执行:

    Handles.DrawWireArc(fow.transform.position, 
    Vector3.back,Vector2.left, 360, fow.ViewRadius);