位置: 编程技术 - 正文

unity3d meshBaker教程(一) 基本的使用(unity mesh bounds)

编辑:rootadmin

推荐整理分享unity3d meshBaker教程(一) 基本的使用(unity mesh bounds),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity mecanim,unity中的mesh,unity中的mesh,unity meal,unity nav mesh,unity meshfilter,unity中的mesh,unity meshcollider,内容如对您有帮助,希望把文章链接给更多的朋友!

ps:(原本使用的3.6,结果发现那个版本貌&#;有些问题)unity3d版本:4.作用:本人项目中,从drawCall 左右 降到了 十几个,优化利器。。

最基本的使用一.搭建场景

如上图场景,新建4个材质,分别附上这4个贴图,贴图是MeshBaker自带的。

运行后

二.使用meshBaker1.创建对象,GameObject->CreateOther->MeshBaker->Mesh And MaterialBaker

unity3d meshBaker教程(一) 基本的使用(unity mesh bounds)

上面有2个组件,注意,3.6版本的结构和这个有点区别点击Open Tools For Adding Objects,弹出如下窗口List Shaders In Scene 按钮是可以打印当前场景中物体使用的shader,lightmapping,等一些信息,可以做参考

选中需要合并的物体,点击Add Selected Meshes,一定要选中物体输出如下信息点回MeshBaker0会看到Objects To。。。里面已经有4个物体了,也就是我们刚才选中的物体,当然,你自己手动拖进去也是可以的。接下来点击Create Empty Assets For Combined Material弹出如下窗口,选好路径,自定义名字保存即可,这个主要是用来储存合并材质和合并信息的之后点击Bake Materials Into Combined Material等待操作完成后,找到下面这个脚本,点击Bake就可以了会生成一个 CombinedMesh-MeshBaker0-mesh 的对象然后点击Disable Renderers on Source Objects,就是隐藏原来物体的Render组件运行后可以看到 DrawCalls 从 5 降到 2 了完 And MaterialBaker2.点击Open Tools For Adding Objects,弹出如下窗口3.点开Show Tools4.点击 select folder for Combined Material Assets 就是选择一个目录给存放材质这些资源5.选择Lightmapping 为 Preserve Lightmapping,就是保留,选忽略的话那就是没有lightmapping了6.Included object Must Be Static 是否必须是静态物体,我们这个场景中没有静态物体,那我们取消勾选7.点击Generate Mesh Bakers8.控制台会输出Created 1 bakers. Added 4 objects,同时场景中多了一个MeshBaker-Diffuse-LM-1物体,我们这个场景内容较少,shader类型也少所以只有一个物体,如果内容多的话,会有多个物体。9.点击Bake EveryMeshBaker In Scene,处理完成后会生成CombinedMesh-MeshBaker-Diffuse-LM-1-mesh效果和教程一是一样的,但是比较方便PS:如果你发现生成后,你的场景样式不对,那你尝试把CombinedMesh-XXXXX-Diffuse-XXX叫Diffuse这个给隐藏掉看看是否正确。

Mesh Renderer,然后Bake4.在运行,你就能发现物体在移动了5.注意,可能你在场景中漫游的时候会发现物体突然消失了。你可以调meshBaker生成出来网&#;的Bounds,调到适当大小即可最好不要勾选Update When Offscreen 比较耗

Package->Character Controller2.新建场景,把3rd Person Controller拖到场景中,移除上面除Animation的其他所有脚本3.把他拖到自己的文件夹内,当成一个新的预设4.创建对象,GameObject->CreateOther->MeshBaker->Material Only Baker5.点击Open Tools For Adding Objects,弹出如下窗口6.选中3rd....点击Add Selected Meshes7.物体已经添加进入,然后点Create Empty Asset.....创建一个预置的材质信息。8.然后 Bake Materials Into Combined Material这样预置材质就创建好了,当然你可以添加N个物体一起后面讲解如何使用。

Person Controller这个预置,并且保证drawCalls1.创建对象,GameObject->CreateOther->MeshBaker->Mesh And MaterialBaker 命名为MeshBakerEnemy(随意拉。。),为了方便管理,可以把这个MeshBaker当成只负责合并敌人场景由另一个来负责2.选择Material Bake Result 这个就是我们 教程四 制作的预置材质,Combined mesh Material也一样3.下面来编写代码,首先来看下使用前和使用后的对比前后[csharp] view plaincopyusing UnityEngine; using System.Collections; using System.Collections.Generic; public class EnemyMaker : MonoBehaviour { //我们的水管工人预置 public GameObject prefab; //用来管理敌人的网&#; public MB3_MeshBaker meshBaker; //用来记录已经生成的预置 private List<GameObject> prefabs; // Use this for initialization void Awake () { prefabs = new List<GameObject> (); } // Update is called once per frame void Update () { } void OnGUI(){ if(GUI.Button(new Rect(0,0,,),"增加预置")){ Vector3 pos = new Vector3(Random.Range(-2,2),1,Random.Range(-2,2)); Quaternion dir = Quaternion.Euler(new Vector3(0,Random.Range(0,.0f),0)); //生成一个 工人预设 GameObject worker = Instantiate(prefab,pos,dir) as GameObject; GameObject firstMeshRenderer = null; //获取对象身上的所有renderer组件对象 List<GameObject> needAddList= getRenderers(worker,ref firstMeshRenderer); meshBaker.AddDeleteGameObjects(needAddList.ToArray(),null); meshBaker.Apply(); //由于一个物体身上SkinnedMeshRenderer和MeshRenderer一起合并的话不知道为什么人物无法移动, //但是把某个MeshRenderer启用就可以移动了, //不知道是什么原因,如果你知道为什么,请留言~~~谢谢 if(firstMeshRenderer){ firstMeshRenderer.transform.renderer.materials = new Material[0]{}; firstMeshRenderer.transform.renderer.enabled = true; } prefabs.Add(worker); } if(GUI.Button(new Rect(,0,,),"删除第一个")){ if(prefabs.Count>0){ GameObject worker = prefabs[0]; GameObject firstMeshRenderer = null; List<GameObject> needDelList = getRenderers(worker, ref firstMeshRenderer); meshBaker.AddDeleteGameObjects(null,needDelList.ToArray()); meshBaker.Apply(); Destroy(prefabs[0].gameObject); prefabs.RemoveAt(0); } } GUI.Label (new Rect(0,,,),"当前预设数量:"&#;prefabs.Count); } List<GameObject> getRenderers(GameObject obj,ref GameObject firstMeshRenderer){ List<GameObject> needAddList = new List<GameObject>(); SkinnedMeshRenderer[] smrs = obj.GetComponentsInChildren<SkinnedMeshRenderer>(); for (int i = 0; i < smrs.Length; i&#;&#;) { needAddList.Add(smrs[i].gameObject); } MeshRenderer[] mr = obj.GetComponentsInChildren<MeshRenderer>(); for (int i = 0; i < mr.Length; i&#;&#;) { if(i == 0){ firstMeshRenderer = mr[i].gameObject; } needAddList.Add(mr[i].gameObject); } return needAddList; } } 核心代码参数1,需要增加的对象参数2,需要删除的对象meshBaker.AddDeleteGameObjects(needAddList.ToArray(),null);meshBaker.Apply();Cannot add objects. Resulting mesh will have more than k vertices. Try using a Multi-MeshBaker component. This will split the combined mesh into several meshes. You don't have to re-configure the MB2_TextureBaker. Just remove the MB2_MeshBaker component and add a MB2_MultiMeshBaker component.UnityEngine.Debug:LogError(Object)DigitalOpus.MB.Co如果遇到这个报错,使用MB3_MultiMeshBaker替换MB3_MeshBaker需要创建GameObject->CreateOther->MeshBaker->Multi-Mesh And MaterialBaker 操作和 meshBaker一样由于一个物体身上SkinnedMeshRenderer和MeshRenderer一起合并的话不知道为什么人物无法移动,但是把某个MeshRenderer启用就可以移动了,不知道是什么原因

Unity DEBUG DLL(C#) ManypeoplearewritingreusablecodecomponentsinexternalDLLfiles,anddeploythemintheirUnityproject.UsingUnityVS,it'salsopossibletodebugthem.PleasenotethatUnityVScurrentlyonlysupportsdebuggingmanagedDLLs.Na

unity 3D初学习 之 Ninja 这是一个简单的忍者跑酷的2D游戏,玩家操纵一个忍者翻越各种障碍,然后可以获取一些得分的物品,也有来攻击的小怪。是一款适合初学者的简单游戏

类似愤怒小鸟的星球引力效果 在Unity中的物理学:有一个真实的物理行为,你的游戏对象一定受到碰撞、重力和各种其他力的影响。为模拟此物理功能是由Unity的物理引擎提供的

标签: unity mesh bounds

本文链接地址:https://www.jiuchutong.com/biancheng/381435.html 转载请保留说明!

上一篇:Unity MeshBaker 合并网格和材质

下一篇:Unity DEBUG DLL(C#)(unity dllimport)

  • 购买土地缴纳的费用
  • 物业公司车位出租能开具什么发票
  • 油库存油租赁
  • 小规模纳税人未开票收入如何填申报表
  • 税控盘及服务费会计分录
  • 房地产开发企业销售自行开发的房地产项目
  • 土地出让金返还政策文件
  • 证券准备包括什么
  • 营业外收入期末结转
  • 存货卖出亏损会怎么样
  • 废料账务处理
  • 股权内部转让交增值税吗
  • 实发工资比计提多汇算清缴要怎么处理
  • 存款取款业务记入那个日记账?
  • 应交税费里的应交企业所得税意思是交了吗
  • 印花税是不是不用计提
  • 股票收入要交所得税吗
  • 食用油从商业流入的原因
  • 对公账户开通网银有什么好处
  • 应税劳务、服务清单
  • 四项服务加计扣除政策2023
  • 税收筹划节税基金有哪些
  • 为什么wifi有信号没网络
  • u盘做的启动盘在哪里
  • kb4586853更新
  • 补缴社保费可以投诉,也可以申请仲裁吗
  • 挂靠借用资质账务处理?
  • 所得税贷款利息扣除
  • php查询数据库语句
  • 补提坏账准备为什么不调整应纳税
  • 阿查法拉亚盆地牡蛎
  • 解决安装后软件icon一圈白边问题
  • php时间戳相减
  • thinkphp框架介绍
  • 以前年度损益调整在利润表中怎么填
  • 城市维护建设税减免税优惠政策
  • 人工智能大模型体验报告3.0
  • python中的count函数
  • 应收账款转回坏账怎么办
  • 个体工商户开普通发票需要交税吗
  • 固定资产处置怎么计算
  • 子公司分公司和办事处账务上的区别有哪些
  • 什么叫资本退出
  • 增值税发票货物名称要求
  • php屏蔽ip
  • 进口增值税是什么意思
  • 现金日记账一般采用什么格式
  • 使用sql server查询不到会返回什么
  • 营业收入的构成分析主要包括
  • 库存现金月末是怎么样结账的
  • 资产减值损失是什么意思
  • 小规模纳税人收入会计分录
  • 以非现金偿还债务的情形
  • 广告费应归于什么费用
  • 计提固定资产折旧怎么做会计科目
  • 垃圾清运费的收费标准乱要钱怎么办
  • 进项税转出补税按多少补税
  • 行政事业单位基本户核算内容
  • sql server 导出
  • window10 uwp
  • linux 命令帮助
  • linux 详解
  • mmc不能打开文件services.msc
  • win7怎么打开程序
  • linux进程和线程底层实现原理一样吗
  • 电脑找不到关机选项了怎么关机
  • win10系统环境设置
  • 删除隐藏文件命令
  • ubuntu查cpu信息
  • win10系统怎么快速启动
  • [置顶]bilinovel
  • perl使用保留字引用什么模块
  • nodejs socket hang up
  • linux搭载服务器
  • js点击表格行获取当前行信息
  • Python装饰器基础详解
  • jquery点击方法
  • 外部js获取当前vue实例
  • 辽宁事业单位职测考试时间多长
  • 简述纳税人与负税的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设