从UnityEngine.GameObject Plane创建UnityEngine.Plane

时间:2018-12-04 10:22:37

标签: visual-studio unity3d mesh

也许是一个简单的例子,但我做对了。 我在编辑器-> 3D对象->平面中创建了一个平面。 用户可以与该飞机互动。

但是在代码中,我需要UnityEngine.Plane,而不是UnityEngine.Gameobject

我了解到我不能做GetComponent<>(),因为Plane是结构而不是组件。

但是我该如何将必须拥有的Gameobject Plane转换为UnityEngine.Plane或以此创建新的Plane?

我找到了this,但我不知道这对我有什么帮助。

2 个答案:

答案 0 :(得分:2)

我认为您误解了UnityEngine.Plane是什么。

来自Unity Documentation

  

3D空间中平面的表示。

就像Vector3或四元数一样,这不是原始的Mesh,也不是3D Mesh。您无法将Plane GameObject转换为此结构。

您可以做的是创建平面网格的表示形式,以对其进行一些计算。但是您将无法使用它实例化一架新飞机。

如果您想创建一个代表您的飞机GameObject的飞机,您可以使用来自您的飞机GameObject的MeshRendererMeshFilter的一些数据调用UnityEngine.Plane的构造函数。

var filter = GetComponent<MeshFilter>();
Vector3 normal;

if(filter && filter.mesh.normals.Length > 0)
    normal = filter.transform.TransformDirection(filter.mesh.normals[0]);

var plane = new Plane(normal, transform.position);

这应该给您一个平面GameObject的平面表示,朝相同的方向看,经过您的飞机的位置。

答案 1 :(得分:0)

是的,Plane原语与Plane结构不同。

要创建UnityEngine.Plane,请使用其构造函数 https://docs.unity3d.com/ScriptReference/Plane-ctor.html

从最简单的角度来看,看起来像这样

Plane plane=new Plane(Vector3.up, Vector3.zero);

Up表示平面的法线向量(在这种情况下,我假设您希望平面是水平的,因此“向上看”,第二个向量是平面必须通过的点(在这种情况下为零,我以为您希望飞机与地面保持水平)。