自己如何实现MeshRender 的效果
本文目录 3 个章节
自己如何实现MeshRender 的效果
note · 我的 UWA 问答 本文收录我在 UWA 问答发表的公开回答。问题内容归原提问者;回答保留当时语境,技术结论可能受 Unity 版本、平台和项目条件限制。
问题
我有个需求就是 关卡里的对象 是通过脚本 间接创建的,而不是直接将prefab 拖到场景中。
因此我需要能象 MeshRender 那样直接在场景中显示 并方便我选中与编辑。
代码类似这样:
public class SpawnPrefab : MonoBehaviour
{
public GameObject prefabEntity;
void Start()
{
Instantiate(prefabEntity);
}
}
MeshRender 有下面两个特性:
- 在Editor 模式下 SceneView 与 GameView 下面同时显示
- 在运行模式下绘制出的对象可以在 SceneView 下选中
目前我是在OnDrawGizmos 函数中调用 Graphics.DrawMesh 但Scene View中却无法选中,
在Update中绘制 却在 Editor 模式下无法 显示。 我感觉好像尝试的方向错了。
- 提问者:silekey
- 提问时间:2021-05-09 08:28:02
我的回答
OnDrawGizmos里面绘制显然是不行的,这个函数在打包出来Runtime都不会调用。
要在SceneView中选中编辑,一定得是场景中的某个GameObject。
(用GameObject挂MeshRenderer肯定能满足 “SceneView编辑” 和 “运行时脚本创建” 两个需求的。)
如果题主的需求是,一定要用Graphics的立即渲染接口来画Mesh的话。如果要在Editor下显示,给类加一个ExecuteAlways属性就可以了,只是还不能在SceneView中选中编辑。

如果还想实现Scene窗口下编辑的功能,只能给要绘制的Mesh绑定一个场景中的挂了MeshRenderer的GameObject了。Graphics.DrawMesh绘制的物体的transform与这个GameObject保持一致就行了。如下图,Game窗口为OnPostRender函数中用Graphics.DrawMeshNow函数绘制的效果,Scene窗口中为绑定的用来编辑调整的物体,两者的transform是一致的:

关键代码如下:

- 回答时间:2021-05-09 10:46:29
- 最后更新:2021-05-09 11:18:06
- 采纳状态:已采纳
来源与关系
- 上位集合:我的 UWA 问答
- UWA 标签:引擎技术、资源管理、动画模块、渲染模块
- 原始问题:自己如何实现MeshRender 的效果
- 源页最后更新:2021-05-11 02:12:23