Visual studio 从UnityEngine.Game对象平面创建UnityEngine.Plane

Visual studio 从UnityEngine.Game对象平面创建UnityEngine.Plane,visual-studio,unity3d,mesh,Visual Studio,Unity3d,Mesh,也许是一个简单的,但我做不好。 我在编辑器->3D对象->平面中创建了一个平面。 用户可以与该平面交互 但是在代码中,我需要的是UnityEngine.Plane,而不是UnityEngine.Gameobject 我了解到我不能做GetComponent(),因为平面是一个结构,而不是一个组件 但是我怎样才能将我拥有的游戏对象平面转换成一个UnityEngine.Plane,或者用它创建一个新的平面呢 我找到了,但我不知道这对我有什么帮助。我想你误解了UnityEngine.Plane是什么

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

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

我了解到我不能做
GetComponent()
,因为平面是一个结构,而不是一个组件

但是我怎样才能将我拥有的游戏对象平面转换成一个
UnityEngine.Plane
,或者用它创建一个新的平面呢


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

我想你误解了UnityEngine.Plane是什么

发件人:

在三维空间中表示平面

就像矢量3或四元数一样,这不是基本体网格,也根本不是3D网格。无法将平面游戏对象转换为此结构

您可以做的是创建平面网格的表示,以便使用它进行一些计算。但是你不能用它来实例化一个新的飞机

如果要创建表示平面游戏对象的平面,可以使用平面游戏对象的
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);
var filter=GetComponent();
向量3正常;
如果(过滤器和过滤器.mesh.normals.Length>0)
法线=filter.transform.TransformDirection(filter.mesh.normals[0]);
var平面=新平面(法线、变换位置);

这应该给你一个平面游戏对象的平面表示,朝着相同的方向看,并穿过平面的位置。

你是对的,平面原语和平面结构不是一回事

要创建UnityEngine.Plane,请使用其构造函数

从最简单的角度来看,它是这样的

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

向上表示平面的法向量(在本例中,我假设您希望平面水平,因此“向上看”,第二个向量是平面必须通过的点(在本例中为零,因为我假设您希望平面与地面水平).

如果您的一般问题是创建一个新平面,那么您可以使用它来创建克隆。