首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从UnityEngine.Plane平面创建UnityEngine.GameObject

从UnityEngine.Plane平面创建UnityEngine.GameObject
EN

Stack Overflow用户
提问于 2018-12-04 10:22:36
回答 2查看 2.9K关注 0票数 1

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

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

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

但是,如何将我必须的游戏对象平面转换为UnityEngine.Plane,或者用它创建一个新的平面呢?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-04 10:48:50

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

来自统一文献

平面在三维空间中的表示。

就像一个Vector3或四元数,这不是一个原始网格,也不是一个三维网格。您不能将飞机GameObject转换为此结构。

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

如果您想要创建一个表示平面GameObject的平面,可以使用来自您的MeshRenderer和平面GameObject的MeshFilter的一些数据调用UnityEngine.Plane的构造函数。

代码语言:javascript
复制
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,看同一方向,并通过你的飞机的位置。

票数 2
EN

Stack Overflow用户

发布于 2018-12-04 10:49:52

你说得对,平面原语和平面结构是不一样的。

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

在最简单的一点上,它看起来如下

代码语言:javascript
复制
Plane plane=new Plane(Vector3.up, Vector3.zero);

向上表示平面的法线向量(在这种情况下,我假设你希望平面是水平的,所以‘查找’,第二个向量是平面必须通过的点(在这种情况下,是零,因为我假设你希望平面与地面平齐)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53610726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档