最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity中对物体有几种施加压力的方式
在初学Unity的过程中,我们会发现,当打包发布程序后,Unity会自动将场景需要引用到的资源打包到安装包里,未被引用的资源则不会被包含进去。我们在编辑器里看到的Asset中的文件结构仅适用于编辑器环境,在游戏运行时,Unity会重新组织资源数据库。这时,我们常常会遇到一个需求,即动态加载自定义文件,并维护这些文件的存储和加载位置。
例如,在换装系统中,需要从磁盘动态加载一个模型。如果该模型未被场景引用,正常情况下它不会被打进安装包。再比如,我们想存储自定义的配置文件,并将其放在磁盘的特定位置以便动态读取。要满足这些需求,就需要使用动态加载资源的方法。
1. Unity资源类型总结
Unity中的资源主要有以下几种类型:
- Unity内置常用资源:如FBX模型、JPG图片等。这些是常见的外部导入资源,在项目开发中广泛使用。
- TextAsset:对应TextAsset类,可用于存储文本或二进制数据,常见的文件格式有TXT、二进制文件等。通过该类可以直接读入文本或二进制字节流,常用于存储一些配置信息或简单的数据。此外,TextAsset还常用于资源的加密处理。
- ScriptableObject:这是一种序列化的Object实例。可以将一个Object实例保存为ScriptableObject,读入后直接在内存中恢复为该实例。与TextAsset不同的是,ScriptableObject需要对应程序中定义好的类型。
- Asset Bundle:是一个资源压缩包,里面可以包含多个资源。使用Asset Bundle可以将资源进行有效的组织和管理,方便进行分包发布和版本更新。
通常,我们自定义的文件类型可以通过TextAsset或ScriptableObject来存储。区别在于,TextAsset是字节或文本流,而ScriptableObject需要对应程序中定义的类型。
2. 动态加载资源的途径
通过Resources模块
调用Resources模块的load函数,可以直接加载并返回某个类型的Object。但前提是要将资源放在以“Resources”命名的文件夹下。无论该资源是否被场景引用,Unity都会将其全部打入安装包。不过,这种方式会将所有资源都包含在安装包中,不利于游戏的分包发布(微端)和版本升级(patch)。因此,Unity并不推荐使用这种方式。
通过Asset Bundle形式
将资源打包成Asset Bundle,存放在服务器或本地磁盘,然后使用WWW模块将其下载下来,再从这个Bundle中加载所需的Object。这种方式可以将资源分成多个小的Bundle,根据需要加载,实现分包发布和版本更新。在开发过程中,频繁更新资源并重新打包Asset Bundle会比较繁琐,因此在Editor环境下可以使用AssetDatabase进行模拟。这通常需要封装一个动态资源加载模块(Dynamic Resource Loader),在不同环境下实现不同的加载逻辑。
通过AssetDatabase.loadasset
这种方式仅在Editor范围内有效,游戏运行时没有该函数,通常用于开发过程中的调试。
3. 动态资源的存放
有时我们需要将一些自定义文件存放在磁盘上。Unity提供了Streaming Assets的概念,用于提供存储接口的访问。我们可以在编辑器中创建一个名为“StreamingAssets”的文件夹,将需要存放在客户磁盘上的动态文件放在该文件夹下。安装后,这些文件会被放置在用户磁盘的指定位置,该位置可以通过Application.streamingAssetsPath获取。
综上所述,在Unity开发中,合理选择资源类型和动态加载方式,能够有效管理资源,提高开发效率,并为游戏的发布和更新提供便利。