也许是简单的,但我搞错了。我在编辑器-> 3D对象->平面中创建了一个平面。用户可以与该平面进行交互。
但在代码中,我需要的是UnityEngine.Plane,而不是UnityEngine.Gameobject。
我了解到我不能做GetComponent<>(),因为平面是一个结构,而不是一个组件。
但是,如何将我必须的游戏对象平面转换为UnityEngine.Plane,或者用它创建一个新的平面呢?
我找到了这,但我不知道这对我有什么帮助。
发布于 2018-12-04 10:48:50
我想你误解了UnityEngine.Plane是什么。
来自统一文献:
平面在三维空间中的表示。
就像一个Vector3或四元数,这不是一个原始网格,也不是一个三维网格。您不能将飞机GameObject转换为此结构。
你可以做的是创建一个表示你的平面网格来做一些计算。但是你不能用它来实例化一个新的飞机。
如果您想要创建一个表示平面GameObject的平面,可以使用来自您的MeshRenderer和平面GameObject的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,看同一方向,并通过你的飞机的位置。
发布于 2018-12-04 10:49:52
你说得对,平面原语和平面结构是不一样的。
若要创建UnityEngine.Plane,请使用其构造函数https://docs.unity3d.com/ScriptReference/Plane-ctor.html
在最简单的一点上,它看起来如下
Plane plane=new Plane(Vector3.up, Vector3.zero);向上表示平面的法线向量(在这种情况下,我假设你希望平面是水平的,所以‘查找’,第二个向量是平面必须通过的点(在这种情况下,是零,因为我假设你希望平面与地面平齐)。
https://stackoverflow.com/questions/53610726
复制相似问题