也许是一个简单的例子,但我做对了。 我在编辑器-> 3D对象->平面中创建了一个平面。 用户可以与该飞机互动。
但是在代码中,我需要UnityEngine.Plane
,而不是UnityEngine.Gameobject
。
我了解到我不能做GetComponent<>()
,因为Plane是结构而不是组件。
但是我该如何将必须拥有的Gameobject Plane转换为UnityEngine.Plane
或以此创建新的Plane?
我找到了this,但我不知道这对我有什么帮助。
答案 0 :(得分:2)
我认为您误解了UnityEngine.Plane
是什么。
3D空间中平面的表示。
就像Vector3或四元数一样,这不是原始的Mesh,也不是3D Mesh。您无法将Plane GameObject转换为此结构。
您可以做的是创建平面网格的表示形式,以对其进行一些计算。但是您将无法使用它实例化一架新飞机。
如果您想创建一个代表您的飞机GameObject的飞机,您可以使用来自您的飞机GameObject的MeshRenderer
和MeshFilter
的一些数据调用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表示平面的法线向量(在这种情况下,我假设您希望平面是水平的,因此“向上看”,第二个向量是平面必须通过的点(在这种情况下为零,我以为您希望飞机与地面保持水平)。