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的更多相关文章

  1. 关于Unity 获得和使用GetComponent<MeshFilter>().mesh时的心得

    原文地址:http://blog.sina.com.cn/s/blog_7d9405e50100s061.html 今天在使用Unity3D的时候遇到了一个问题:_tesGameObject是在Pro ...

  2. Unity3d 制作动态Mesh且可以随地面凹凸起伏

    适用情景:主角带着光环,光环用一张贴图,要贴在地面上,并且随地面凹凸起伏 //代码 using UnityEngine; using System.Collections; [RequireCompo ...

  3. Unity中Mesh分解与边缘高亮加上深度检测

    一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMe ...

  4. Mesh.CombineMeshes

    [Mesh.CombineMeshes] public void CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes = true ...

  5. unity, 获取mesh名称

    正确的获取mesh名称的方法: MeshFilter meshFilter=node.GetComponent<MeshFilter>();    string meshName=mesh ...

  6. unity, editable mesh

    一,需求 从fbx载入的模型是不可以在unity里编辑的. 我有一人特殊的需求就是想在unity里为mesh的各顶点K动画. 于是需要自己实现一个可编辑(其实只是顶点可以拖动)的mesh. 二,思路 ...

  7. Unity mesh 合并

    簡介: 基本上就是把 很多物體結合成一個物體 的作法,這種做法有很多優點,例如:1. 提高效能2. 統一材質 (只要建立一個材質,就能控制.分配給所有物體)3. 動畫控制方便 (像是你要在 Unity ...

  8. Unity Mesh 初体验

    什么是Mesh Mesh是Unity中的一个组件,称为网格组件.通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而一个复杂的多边形,实际上是由多个三角面拼接而成.所以一个3D模型的表面是 ...

  9. 【Unity3D】利用Shader以及更改Mesh实现2D游戏的动态阴影效果

    最近看到一个非常有趣的益智小游戏,是一个盗贼进入房子偷东西的, 其实这种游戏市面上已经很多了,吸引我的是那个类似手电筒的效果, 主角走到哪里,光就到哪里,被挡住的地方还有阴影.有点类似策略游戏里的战争 ...

  10. Mesh系列文章 - 自定义Mesh

    就是在做项目的过程中,有用到三角形的,今天就写一下如何自定义三角形? 先截个图,让大家有个感性认识! //引用 using UnityEngine;        using System.Colle ...

随机推荐

  1. 【docker】运维相关名词 Iaas-Paas和Saas docker镜像设置 启动与停止常用命令 镜像相关命令 容器相关命令

    目录 上节回顾 今日内容 1 什么是Iaas-Paas和Saas 2 docker 启动设置镜像 2.1 启动与停止常用命令 3 镜像相关命令 4 容器相关命令 练习 上节回顾 # 1 flask-s ...

  2. webpack 从 0 到 1 构建 vue

    前端领域框架百花齐放,各种优秀框架出现(react,Vue,ag)等等框架.为了方便开发者快速开发, 开发对应的 cli 脚手架,来提高产出.然而初中级的前端工程师对项目里的 webpack 封装和配 ...

  3. 用 WebRTC 打造一个音乐教育 App,要解决哪些音质难题?

    在去年疫情期间,在线教育行业获得了井喷式的发展,这背后的技术功臣非 RTC 莫属.本文将分享 RTC 技术在音乐教育场景下的实践经验. 作者| 逸城 审校| 泰一 音乐教育场景 - 在线陪练 2020 ...

  4. COOIS增强

    一.订单抬头增强 二.结构添加字段 添加ZGCWL字段 三.BADI增强 四.其他界面增强 不同的界面,选择不同的修改结构 抬头 ct_ioheader 组件 ct_ioopcomp 工序 ct_io ...

  5. Cpp 值的种类划分

    本博文会介绍移动语义的形式术语和规则.并且会正式的介绍值的类别,如 lvalue.rvalue.prvalue和 xvalue,并讨论了在绑定对象引用时的作用.也会讨论移动语义不会自动传递的细节,以及 ...

  6. Educational Codeforces Round 110 (Rated for Div. 2) (AB签到,C题双指针,D题DP好题)

    补题链接:Here 1535A. Fair Playoff 四名选手参加了季后赛.比赛按以下方案进行:第一名选手与第二名选手比赛,第三名选手与第四名选手比赛,然后两人中的获胜者进入决赛. 众所周知,在 ...

  7. S3C2440移植uboot之编译烧写uboot

    目录 移植环境 获取uboot 更新交叉编译工具 配置环境变量 移植环境 主 机:VMWare--ubuntu16.04 开发板:S3C2440 编译器:arm-linux-gcc-4.3.2.tgz ...

  8. C#设计模式02——原型模式的写法

    public class ProteType { private static ProteType _ProteType = new ProteType(); private ProteType() ...

  9. 入门 shell 从脚本开始 - lazy_find

    编写脚本实现在指定文件路径下查找文件夹或文件名.   脚本如下: #!/bin/sh # lazy find # GNU All-Permissive License # Copying and di ...

  10. Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息

    本文为博主原创,未经允许不得转载: 目录: 1.  自定义生产消息 kafkaTemplate 实例 2.  封装 kafka 发送消息的service 方法 3.  测试 kafka 发送消息ser ...