unity-----------------------使用BuildAssetBundle打包
我发现很多美工兄弟都爱问程序Unity3d为什么总丢材质? 我不排除U3d有BUG的情况下会丢材质?但是其实很多时候是人为操作而引起的。
1.不保存就在上传
这个操作太恐怖了,切记!!在 U3D里面你无论操作了什么,当你要上传svn的时候一定要先保存场景,Ctrl+S 切记切记!!如果不保存就上传很有可能就会丢材质。
2.我的电脑明明没事,怎么你哪里就丢材质?
我发现一个很有意思的现象,每次走到美术电脑前看它的svn工程时,我都会发现各种的“黄叹号”整个工程严重的冲突。然后程序和美术的对话就是:“这资源有用没?没用删了, 我重新更新。。。” 哈哈哈 我觉得可能只有程序员才会对冲突非常敏感吧,但我觉得这件事不能怪美术,美术是很抽象的东西,不向程序要具体到少一个分号就无法进行了。
3.管理好材质贴图
如果项目不管理好材质和贴图,后起你会发现有很多完全一样的图片只是名子不一样,但是还都在使用中。。这个很有可能是好几个美术同时在做,这样会造成资源的浪费。
4.特效丢材质
我举个实际的例子,我们项目场景和特效是两个人来做。之前总遇到场景特效莫名其妙丢材质的问题。原因就是做特效的人把特效修改了,但是做场景的又不知道,因为可能这个特效在好多场景上都在使用中。
如下图所示,在Preiject下面方的Prefab 如果拖入Hierarchy视图中,它俩是具有关联关系的,如果你直接在Project视图中修改了Prefab那么所有Hierarchy视图中关联它的Prefab都会得到修改。小改动这样是没问题的,如果发生一些比较大的改动,那么Hierarchy视图中Prefab可能就会丢失或者坏掉。但是假如你有很多场景都引用同一个Prefab,这么多场景会很难找到的。

正向在Hierarch视图中选择一个prefab,然后在右侧Inspector视图中点击Select会自动找到Project视图中的Prefab对象。那么反向如何从Project视图中找到Hierarchy视图中引用的Prefab呢?
如下图所示,Unity3d做了一个功能,在Project视图中选择一个Prefab,然后右键选择Find References In Scene ,那么此时Unity会自动帮你在当前场景中找到Hierarchy视图中引用这个Prefab的GameObject。

但是这个方法有点局限性,就是它只能找到当前场景的,假设你的这个Prefab在很多场景中都引用了,那么这样是找不到了,为了美术我决定写一个小小的工具,嘿嘿。
C#
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |  [MenuItem("Assets/Check Prefab Use ?")]  private static void OnSearchForReferences()  {    //确保鼠标右键选择的是一个Prefab  if(Selection.gameObjects.Length != 1)  {  return;  }  //遍历所有游戏场景  foreach(EditorBuildSettingsScene scene in EditorBuildSettings.scenes)  {  if(scene.enabled)  {    //打开场景  EditorApplication.OpenScene(scene.path);  //获取场景中的所有游戏对象  GameObject []gos = (GameObject[])FindObjectsOfType(typeof(GameObject));  foreach(GameObject go  in gos)  {    //判断GameObject是否为一个Prefab的引用  if(PrefabUtility.GetPrefabType(go)  == PrefabType.PrefabInstance)  {  UnityEngine.Object parentObject = EditorUtility.GetPrefabParent(go);  string path = AssetDatabase.GetAssetPath(parentObject);  //判断GameObject的Prefab是否和右键选择的Prefab是同一路径。  if(path == AssetDatabase.GetAssetPath(Selection.activeGameObject))  {  //输出场景名,以及Prefab引用的路径  Debug.Log(scene.path  + "  " + GetGameObjectPath(go));  }  }  }  }  }  }  public static string GetGameObjectPath(GameObject obj)  {  string path = "/" + obj.name;  while (obj.transform.parent != null)  {  obj = obj.transform.parent.gameObject;  path = "/" + obj.name + path;  }  return path;  } | 
如下图所示,我就可以找到哪个场景引用了这个Prefab。 这里我没有用GameObject和Prefab的名子来判断,我觉得最好也不要用名字,因为Hierarchy视图中的名子完全可以随意修改的,如果被改了的话就肯定找不到了,而且场景那么多完全有重名的情况。

是不是很简单呢?嘿嘿。
或者还有个办法,就是运行时动态的载入Prefab,但是有些场景特效其实万全没有任何意义,仅仅是展示而已,程序也无需对它进行操作。
有了这个小工具,那么以后美术改完Prefab的时候,运行一下连带的看看某些场景上是否正常的显示了?嘿嘿嘿嘿。
unity-----------------------使用BuildAssetBundle打包的更多相关文章
- Unity自己主动打包工具
		最開始有写打包工具的想法,是由于看到<啪啪三国>王伟峰分享的一张图,他们有一个专门的"工具程序猿"开发各种工具. (ps:说起来这个王伟峰和他的创始团队成员,曾经跟我是 ... 
- Unity 多场景打包
		本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50580641 作者:car ... 
- Unity中资源打包成Assetsbundle的资料整理
		最近在研究Unity中关于资源打包的东西,网上看了一堆资料,这里做个整合,说整合,其实也就是Ctrl-C + Ctrl-V,不是原创 首先为了尊重原创,先贴出原创者的文章地址: http://blog ... 
- Unity最新版打包AssetBundle和加载的方法
		一.设置assetBundleName二.构建AssetBundle包三.上传AssetBundle到服务器四.把AssetBundle放到本地五.操作AssetBundle六.完整例子七.Asset ... 
- unity调用安卓打包apk时的错误unable to convert classes into dex format
		出现这种问题一般是由于有重复的文件所致,看下unity报的错误那些文件重复了,把重复的文件删了即可 例如,将eclipse中的安卓工程bin\class导出jar包时,会将下面的.class文件打包, ... 
- Unity 利用UGUI打包图集,动态加载sprite资源
		今天做了一个UI界面,这个界面是好友界面,该界面上有若干个好友item. 需要对每个tem的头像对象(image)动态显示对应的头像.尝试利用UGUI的图集来加载,具体实现如下: 1.首先,需要知道S ... 
- Unity之AssetBundle打包
		AssetBundle Resources:表示U3D自动将资源打成一个AssetBundle包,所有放在Resources下的文件夹都会打成一个AssetBundle包,资源非常大,Resource ... 
- Unity 如何在打包的时候执行一些逻辑
		1.如果想让unity在打包的过程中,执行一些逻辑,那么该如何做呢?代码如下: using UnityEditor; using UnityEditor.Build; using UnityEngin ... 
- Unity 5 官方打包管理工具 Asset Bundle Manager
		http://blog.csdn.net/suifcd/article/details/51570003 Unity5在Asset bundle 打包管理上采用了全新的方式,不需要再对每个文件进行MD ... 
- Unity 分场景打包
		分场景打包步骤:导入unity中AB包后 1: 指定场景 2: 指定abname 3: 指定objinabname 4: 协同 5: 委托 void string unity 先引入命名空间 ... 
随机推荐
- javascript基础拾遗(九)
			1.class关键字 ES6引入了新的class关键字编写对象 function Language(name){ this.name = name this.score = 8.0 } Languag ... 
- python(48):re.split 多分隔符
			问题描述: 使用多个界定符分割字符串 问题 你需要将一个字符串分割为多个字段,但是分隔符(还有周围的空格)并不是固定的. 解决方案 string 对象的 split() 方法只适应于非常简单的字符串分 ... 
- 【MyBean-开源框架】进行简单的逻辑插件(演示在控制台中应用)
			[说明] 很多时候大家认为客户端插件一般是窗体.其实不然,很多功能都可以看成是插件,比如一个单据的审批功能,一个单据上面,单价的获取功能,都可以看成是插件,然后后期通过配置,可以灵活进行切换.MyBe ... 
- echarts的时间线图表
			<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ... 
- java版本DbhelperMysql
			package com.hebut.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P ... 
- Android MediaPlayer接口及状态迁移
			[时间:2016-09] [状态:Open] [关键词:android,mediaplayer,播放接口,播放状态图] 引言 本文内容相对简单,作为后续处理的起点,简要整理了Android Media ... 
- Python(一)之Python概述
			前言:最近学习Python基础,网上找了视频教程,本篇记录下Python概况,学习环境Python2.6. 学习Python首先得会获取Python自带的帮助信息,下面几个实用的内置函数,不管是工作或 ... 
- ASP.NET学习笔记(4)——上传图片
			说明(2017-10-8 23:03:43): 1. 后面的内容都是一些杂七杂八的,零零碎碎的,之前都直接略过了,不过其实还是挺重要的,这次重新学习要认认真真敲一遍. 2. 明天中午9号要回北京了,今 ... 
- MongoDB不支持批量插入
			mongodb的结构与关系型数据库不同,它类似树状结构,可以很方便对每个分支进行操作,但它没有像mysql那样insert(value.value.value...)那样的语法,也不支持transac ... 
- 腾讯云CentOS升级JDK1.8
			1.查看CentOS自带JDK是否已安装. yum list installed |grep java. 2.卸载原有JDK yum -y remove java-1.5.0-gcj.i686 3.查 ... 
