prefab的用处(unity3d开发2d游戏中Assetbundle有什么作用)
本文目录
- unity3d开发2d游戏中Assetbundle有什么作用
- unity3d的prefab有什么用
- Unity中Instantiate一个prefab时需要注意的问题
- unity3d prefab对象坐标不是原来的值 归零了 怎么回事
- prefab是什么单词的缩写
unity3d开发2d游戏中Assetbundle有什么作用
在unity3d开发2d游戏中,Assetbundle 是Unity Pro提供提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法使用起来很便利。在如下几个方面的作用明显: 1.预设 Assetbundle可以将Prefab封装起来,这是多么方便啊! 而且我也强烈建议大家将Prefab封装成Assetbundle,因为Prefab可以将游戏对象身上带的游戏游戏组件、游戏脚本、材质都封装在一起。当从服务器上将Assetbundle下载以后直接Instantiate就可以放入游戏中。 试想一下,如果只能将原始的二进制资源文件放在服务器上下载,当资源文件下载完毕后,需要动态的创建游戏对象、然后动态的将脚本绑定在游戏对象、动态的将贴图赋予游戏对象等等各种动态的操作。。所以强烈建议使用Prefa,不解释!!!!! 另外,我在举个例子,因为模型有可能会带很多动画文件,那么这样一组模型资源就可能是多个FBX 文件 和 若干png贴图文件 材质文件。这时我只需要把原始模型放入Prefab中,它就会包含这个模型的所有组件、甚至包括它的动画资源、贴图。那么如下图所示,Mode就是模型的Prefab文件,那么我仅仅只需要把Mode这个预设打包成Assetbundle即可。 当我在服务器上下载这个Assetbundle并且载入游戏中就可以直接使用了,切换动画、换贴图都可以。。 2.二进制文件 也并不是Assetbundle中全都要用预设,Assetbundle它也可以将二进制文件直接封装在里面,比如图片、声音、文本信息等等。 3.场景文件 在Unity中可以将一个场景保存在Scene中,Scene就会包含这个场景中的所有,那能不能把Scene也封装成Assetbundle中?答案是能,但是它不能在移动平台上用,因为移动平台上是不能更新脚本的,换句话来说就是即使将脚本绑定在Prefab中,然后下载Assetbundle后,所有脚本是不会执行的,后面说另外一种巧妙用法。 4.移动平台 上面MOMO已经将Assetbundle 的使用原理大致介绍了一下 ,我们在谈谈移动平台。脚本不能更新是移动平台下最大的伤,这就意味着开发者无法绕过App store和 google Play这种在线商店升级应用程序。唯一能做到的就是更新资源、举个例子,游戏中在处理版本升级时,一般会有个大版本号和一个小版本号,大版本号就是 2.0、3.0这种 版本需要在AppStore中更新,大版本主要是升级游戏脚本,然后当小版本号,比如2.0.1 或2.0.2这种只是更新游戏中的资源,通过自己游戏的服务器就可以完成,通过Assetbundle在自己服务器上下载,然后适应在游戏中。如果非要更新脚本,或不得不更新脚本那么只能在Appstore或者google Play去更新大版本。 移动平台上不能更新脚本,那么Prefab上绑定的脚本怎么办?在任何平台上都可以把脚本添加到Prefab上,然后打包成Assetbundle,只有移动平台上有点特殊,比如将Test.cs这条脚本绑定在Prefab中,最后程序通过服务器下载这个Assetbundle ,当载入工程中这条脚本是不会被执行的。 但是如果本地工程有Test.cs这条脚本,那么Unity会自动将这条脚本绑定在下载的Prefab中,并且他们执行的非常好。如果本地工程中没有Test.cs这条脚本,那么Prefab上的脚本是永远都不会执行的。有时我们会在脚本中写一些Public的变量,有可能不同的Prefab上绑定的是相同的脚本,只是Inspector 脚本中的public参数不同。别担心这一点Assetbundle 中的Prefab也是没问题,所以说只要大版本中的脚本没问题,在小版本中只更新游戏资源是一点问题都么有的。 5.移动优化 之前我们说过可以将游戏中的某个游戏对象封装成Assetbundle,也可以将游戏中的整个场景也封装成Assetbundle。但是我认为需要巧妙的使用封装场景,因为场景中肯定有很多公用的模型,如果打包场景的话那么内存与size就是 公用模型的size * N个场景,想想其实挺恐怖的。其实我们可以巧妙的使用,首先把场景中公用的部分和私有的部分统统放入Unity, 然后烘培整个场景。 当场景烘培完毕后把公用的模型部分在拿出去,场景只只保留私有的模型。还可以做一个工具将公用模型在场景中的坐标保存在XML中(每个场景文件会对应一个公用模型的XML信息),最后在将公用的模型分别封装在别的Assetbundle中。 服务器上提供每个场景的Assetbundle ,和公用模型的Assetbundle,一般公用模型的Assetbundle可以放在常驻内存中(可能使用频繁、根据项目的不同而定)场景Assetbundle下载完毕后,现载入场景然后在根据场景对应的XML信息将公用模型部分动态的在添加到场景中,这样就完成了一个场景的构建。
unity3d的prefab有什么用
当你场景中有大量相似的物体,如游戏中的小怪时就可以用prefab来对这些物体进行统一管理,这样当你需要修改物体属性时,只要修改一个物体,然后apply给prefab其他的物体也就一起改好了。还有当你需要用代码动态创建物体时也是用prefab的。
Unity中Instantiate一个prefab时需要注意的问题
在调用Instantiate()方法使用prefab创建对象时,接收Instantiate()方法返回值的变量类型必须和声明prefab变量的类型一致,否则接收变量的值会为null. 比如说,我在脚本里面定义: publicGameObject myPrefab; 那么在使用这个myPrefab做Instantiate()的时候,接收返回值变量的类型也必须是GameObject,如下: GameObject newObject = Instantiate(myPrefab) as GameObject; 注意Instantiate()后面的as也要是GameObject。 又比如我们的prefab类型是我们自定义的UserObject, publicUserObject prefab; 那么在使用Instantiate()时我们需要写成: UserObject newObject = Instantiate(myPrefab) as UserObject; 比较容易犯的一个错误是我们声明的类型是: publicGameObject myPrefab; 在Instantiate()返回值却想要用Transform,如下: Transform newObject = Instantiate(myPrefab) as Transform; 这个时候就会出现newObject为null的问题。 附注官方API资料: Object .Instantiate 实例static function Instantiate ( original : Object, position : Vector3 , rotation : Quaternion) : Object Description 描述Clones the object original and returns the clone. 克隆原始物体并返回克隆物体。 Clones the object original, places it at position and sets the rotation to rotation, then returns the cloned object. This is essentially the same as using duplicate command (cmd-d) in Unity and then moving the object to the given location. If a game object, component or script instance is passed, Instantiate will clone the entire game object hierarchy, with all children cloned as well. All game objects are activated. 克隆原始物体,位置设置在position,设置旋转在rotation,返回的是克隆后的物体。这实际上在Unity和使用复制(ctrl+D)命令是一样的,并移动到指定的位置。如果一个游戏物体,组件或脚本实例被传入,实例将克隆整个游戏物体层次,以及所有子对象也会被克隆。所有游戏物体被激活。
unity3d prefab对象坐标不是原来的值 归零了 怎么回事
没懂你的意思。是实例化后归零了 还是你放在scene里的object开始游戏时归零了
prefab是什么单词的缩写
prefab,本身就是全写。n. 预制件;组合式预制房; adj. 预制的;组合式的; vt. 预先制造;预先构想prefabricatedadj. 预制构件的; v. 预先建造组合(prefabricate的过去分词)
本文相关文章:
微信小程序低代码开发(微信小程序如何开发没有技术基础的人是不是比较适合用第三方)
2024年9月26日 15:55
c++单元测试工具(c++开发必备:最好用的单元测试工具:Parasoftc++Test9.0,该如何解决)
2024年9月7日 06:45
head first java英文版电子书(推荐几本适合java开发者必看的书,并且拍个序,先看什么后看什么谢谢~~)
2024年9月6日 10:05
linux内核视频教程(哪家的S5PV210开发板有视频教程呢主要是Linux和Android部分)
2024年9月6日 02:15
java编程游戏推荐(《java程序设计》实训——网络三子棋游戏开发)
2024年9月4日 19:35
java开发工程师需要具备的能力(合格的Java开发人员应该具备的能力)
2024年9月3日 10:55
swift playground(swift playground里怎么开发ui界面)
2024年8月30日 18:20
java容器的概念(java开发中很多都提到了容器,容器到底里什么概念,详细点说一下,谢谢)
2024年8月28日 07:10
安卓系统属于系统软件吗(请问 安卓系统是硬件还是软件开发后使用也需要服务器吗怎么开发的)
2024年8月28日 04:35
xamarin安卓开发(用xamarin和原生开发有什么区别)
2024年8月27日 22:50
更多文章:
计算机是如何计算时间的?Excel中日期和时间也能计算哟,不信你看
2024年5月6日 08:10
plsql连接oracle怎么导出数据(PLSQL怎样导出oracle表结构和数据)
2024年7月23日 13:24
java调用python模型(机器学习中python训练出来的模型 java能加载吗)
2024年6月30日 13:06
五个页面的网页如何制作(求网页制作作业1、五个栏目,五个页面,首页名为index.html 2、首页要有班级、学号、姓名等)
2024年6月30日 22:46
indirect函数r1c1用法(Excel INDIRECT公式使用方法)
2024年7月2日 22:36
《java入门到精通》介绍(《head first Java》和《Java从入门到精通》第三版怎么样)
2024年7月9日 21:18
activated翻译(already activated your account 翻译下)
2023年8月22日 15:20
position的中文(be in a position to是什么意思)
2024年6月29日 05:03
excel表格制作档案管理步骤(excel表格上怎么弄档案盒标签)
2024年7月2日 17:16
define(C语言中的#define是什么意思,有什么作用,怎样用)
2024年6月29日 22:40
数据库新增一万条数据(数据库要给表里所有物品的数量都增加10000个,这个sql要怎么写)
2024年6月16日 02:02
如何在阿里云服务器上搭建PHP环境?如何本地搭建PHP服务器环境
2024年6月27日 05:43
assisted(安乐死(Euthanasia)和协助自杀(Assisted suicide)有什么区别)
2024年4月30日 21:21
online update是什么意思(logic可以加载xln audio addictive keys吗)
2024年7月14日 03:09