MeshFilter mesh vs sharedMesh
MeshFilter有两个属性mesh和sharedMesh,从官方文档和实际使用来说说这两者的区别
MeshFilter文档
Unity的MeshFilter文档:https://docs.unity3d.com/ScriptReference/MeshFilter.html
| mesh | Returns the instantiated Mesh assigned to the mesh filter. |
|---|---|
| sharedMesh | Returns the shared mesh of the mesh filter. |
mesh访问的是一个新的object(新实例)
sharedMesh是原始资源,所有实例的属性共用同一份,也就是说修改它共用属性全部实例都会发生改变,如果在编辑器下且直接对原始资源的sharedMesh进行修改,则原始资源也会发生改变。
使用情景
如果我们不需要修改mesh中具体的属性,仅仅是对它赋值的话(比如从ab中加载出来进行设置或替换),那么使用sharedMesh
如果在Editor脚本开发中,需要修改mesh中的数据,则使用mesh
mesh文档解释
关于mesh的unity文档解释:
Returns the instantiated Mesh assigned to the mesh filter.
If no mesh is assigned to the mesh filter a new mesh will be created and assigned.
If a mesh is assigned to the mesh filter already, then first query of mesh property will create a duplicate of it, and this copy will be returned. Further queries of mesh property will return this duplicated mesh instance. Once mesh property is queried, link to the original shared mesh is lost and MeshFilter.sharedMesh property becomes an alias to mesh. If you want to avoid this automatic mesh duplication, use MeshFilter.sharedMesh instead.
By using mesh property you can modify the mesh for a single object only. The other objects that used the same mesh will not be modified.
It is your responsibility to destroy the automatically instantiated mesh when the game object is being destroyed. Resources.UnloadUnusedAssets also destroys the mesh but it is usually only called when loading a new level.
翻译成中文如下:
如果一个mesh已经被分配给MeshFilter,那么第一次查询mesh属性会创建一个副本,这个副本会被返回。进一步查询mesh属性将返回这个复制的mesh实例。一旦mesh属性被查询,链接到原始共享网格会丢失,MeshFilter.sharedMesh属性成为mesh的别名。如果你想避免这种自动生成副本,使用MeshFilter.sharedMesh代替。
通过使用mesh属性,您可以仅修改单个对象的mesh。其他使用相同mesh的对象将不会被修改。
当游戏对象被销毁时,销毁自动实例化的mesh是你的责任。UnloadUnusedAssets也会破坏mesh,但通常只在Scene.LoadNewLevel时调用。
mesh伪代码
猜测mesh的实现代码大致如下:
public class MeshFilter ...
{
...
private Mesh _mesh;
public Mesh mesh
{
get
{
if (_mesh == null)
{
_mesh = new Mesh();
Copy(sharedMehs, _mesh);
}
return _mesh;
}
}
...
}
MeshFilter mesh vs sharedMesh的更多相关文章
- 关于Unity 获得和使用GetComponent<MeshFilter>().mesh时的心得
原文地址:http://blog.sina.com.cn/s/blog_7d9405e50100s061.html 今天在使用Unity3D的时候遇到了一个问题:_tesGameObject是在Pro ...
- Unity3d 制作动态Mesh且可以随地面凹凸起伏
适用情景:主角带着光环,光环用一张贴图,要贴在地面上,并且随地面凹凸起伏 //代码 using UnityEngine; using System.Collections; [RequireCompo ...
- Unity中Mesh分解与边缘高亮加上深度检测
一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMe ...
- Mesh.CombineMeshes
[Mesh.CombineMeshes] public void CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes = true ...
- unity, 获取mesh名称
正确的获取mesh名称的方法: MeshFilter meshFilter=node.GetComponent<MeshFilter>(); string meshName=mesh ...
- unity, editable mesh
一,需求 从fbx载入的模型是不可以在unity里编辑的. 我有一人特殊的需求就是想在unity里为mesh的各顶点K动画. 于是需要自己实现一个可编辑(其实只是顶点可以拖动)的mesh. 二,思路 ...
- Unity mesh 合并
簡介: 基本上就是把 很多物體結合成一個物體 的作法,這種做法有很多優點,例如:1. 提高效能2. 統一材質 (只要建立一個材質,就能控制.分配給所有物體)3. 動畫控制方便 (像是你要在 Unity ...
- Unity Mesh 初体验
什么是Mesh Mesh是Unity中的一个组件,称为网格组件.通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而一个复杂的多边形,实际上是由多个三角面拼接而成.所以一个3D模型的表面是 ...
- 【Unity3D】利用Shader以及更改Mesh实现2D游戏的动态阴影效果
最近看到一个非常有趣的益智小游戏,是一个盗贼进入房子偷东西的, 其实这种游戏市面上已经很多了,吸引我的是那个类似手电筒的效果, 主角走到哪里,光就到哪里,被挡住的地方还有阴影.有点类似策略游戏里的战争 ...
- Mesh系列文章 - 自定义Mesh
就是在做项目的过程中,有用到三角形的,今天就写一下如何自定义三角形? 先截个图,让大家有个感性认识! //引用 using UnityEngine; using System.Colle ...
随机推荐
- Axure 多人协作
创建团队项目 团队 => 从当前文件创建团队项目 签出的文件才能被修改 签出 签入 发布评论 邀请 编辑的5种状态 和SVN差不多的概念 已有项目导入 https://www.bilibili. ...
- 🤗 Datasets 使用小贴士: 探索解决数据集无法下载的问题
Hugging Face Hub 是强大的机器学习的数据源.相信大家在国内用 Hugging Face Datasets 都遇到过下载的问题.譬如: import datasets dataset = ...
- GPT应用开发:运行你的第一个聊天程序
本系列文章介绍基于OpenAI GPT API开发大模型应用的方法,适合从零开始,也适合查缺补漏. 本文首先介绍基于聊天API编程的方法. 环境搭建 很多机器学习框架和类库都是使用Python编写的, ...
- 【k8s】基础环境配置部署
基础环境配置部署 Hzero部署练习参考文档 https://docs.qq.com/sheet/DQWxlRlBXZmJ4b01G?tab=BB08J2&_t=1684458310312&a ...
- AtCoder Beginner Contest 214 (D并查集,E反悔贪心,F公共子序列DP)
题目链接:Here ABC水题, D - Sum of Maximum Weights 上图中最大权 \(9\) 对答案的贡献是这条边两边的连通块的 size 的乘积再乘以 9 受到上面的启发,我们可 ...
- 2018年第九届 蓝桥杯A组 C/C++决赛题解
蓝桥杯历年国赛真题汇总:Here 1.三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3, 2.5) (6.4, 3.1) (5.1, 7.2) 求该三角形的面积. 注意,要提交的是 ...
- 聚焦 AIGC,函数计算为 AI 应用插上腾飞翅膀
6月1日,2023 阿里云峰会·粤港澳大湾区在广州举办,Serverless 加速创新分论坛如约亮相,阿里云函数计算 FC 聚焦 AIGC 应用开发,GPU 性能体验再升级,让 AIGC 应用开发更简 ...
- secure boot (二)基本概念和框架
什么是secure boot secure boot是指确保在一个平台上运行的程序的完整性的过程或机制.secure boot会在固件和应用程序之间建立一种信任关系.在启用secure boot功能后 ...
- 面向对象SOLID原则-设计模式-第2篇
面向对象设计的SOLID原则 1.开放封闭原则 一个软件实体 (类,函数,模块) 对扩展开放,对修改关闭.也就是 软件实体 应该尽量在不修改原有代码的情况下 进行扩展 举个例子, 装饰器的使用,就可以 ...
- 小技巧:WIndows快速创建文件夹
快速创建文件夹的技巧 1.首先创建文本文档将扩展名更改为.bt,mkdir.bat 2.写入创建文件夹的代码 md 文件夹1 文件夹2 文件夹3 pause 3.双击执行mkdir.bat