UNITY如何动态加载R素材?

Daydream/Unity技術:

Unity动态加载R素材-- 使用ScriptableObject和AssetBoudle

by 高煥堂

一、背景说明:
   如果您还不熟悉R素材与A素材,请您参阅:Real素材的有机次序
   大约半年前,我为了想参与与HTC 的Vive X加速器计划而设计了<VR+医疗MRI行业平台>。<R素材>概念和名词也是我当时提出的。这样的<VR行业平台>架构也适合于建立特性产业的素材和App平台。例如,台湾的莺歌镇是陶瓷/琉璃设计小城,台湾三义乡则是木雕艺术城市,这些木雕、陶瓷、琉璃设计的商业产品的虚拟化3D模型,都可以成为VR的R素材,管理在平台上,我又鼓励台北铭传大学传播系学生来帮忙做<VR+广告>的App以进行VR营销,就变成一个VR电商平台了。无意中,发现了很棒的校企产学合作机会,不亦乐乎。最近,台湾著名的IT杂志CTimes也专文报导这项VR行业平台的商业意义和经济价值。
   这项平台技术方案也公布于HTC Vive官方论坛上。请参阅HTC Vive开发者论坛文章:" 如何在Vive上开发<VR+行业>应用"

--- https://www.vive.com/cn/forum/chat.php?type=developer
     或者 --- https://www.vive.com/tw/forum/chat.php?type=general

二、<VR行业平台>的经济价值:
   记得半年前,我把素材区分为两种:A素材与R素材。一开始,我并不是基于客户的方便性(Artificial)与需要性(Real)而区分的。而是从系统(产品)角度来区分的。因为平台最关键在于强势型API的制定权在谁手上,例如Android平台的SDK/API制定权在Google的OHA联盟手上,即使HTC把手机终端产品和UI做得再好,都会因API受制于人。
   基于强势型API的制定权,就把素材分为两种,然后透过我定义的API在我的平台上自由组合成为VR App,也就俗称的VR内容(content)了。这就如同日光<灯座>与<灯管>之间的关系了。

从系统(产品)面来看,两者的区分在于:A素材是”Early-binding at development-time”就是在开发阶段就绑进去App(如房屋)里一起编译、连结,并和一起上传下载。而R素材是”Late-binding at run-time”,就是在App运行(房屋入住)阶段才透过API到平台上取得R素材来与装配上去。
   把它对应到<VR+教育>领域上,就<VR教育平台>而言,教育只是手段,专业知识(如烘焙)才是R素材。同样一份R素材,搭配百花齐放的A素材和硬件设备,就呈现出多种表现了。例如,烘焙R素材可用古老(有框)AR呈现,可用Hololens新(无框)AR呈现,也可用Daydream VR呈现之。由于传统VR应用开发者大多力求讨好更多用户,包括2C、2B,都是在追求复制性。而在我的平台上,开创一个新的复制面向:复制到360行业!
  所以我特别强调<行业>。帮行业的创作(R素材),找更多呈现,找更多客户群。也就是旧R素材(搭配A素材成新产品)、卖新客户。而不是传统上,在老掉牙的客户群,帮他找更多东东给他们(新产品卖旧客户)。因为VR的2C不行,C不会给更多$,我们却花更多成本,就赔$了,富贵远去了!
  反之,我则鼓励大家寻求更多C群,分担精致R素材的高成本,给予C中价位,高质量VRAR内容。创业者从单一行业(R素材)出发,逐渐复制技术(及A素材)到不同行业,也分担了技术及A素材的成本。一方面,透过更多C群,分担R素材成本。另一方面,透过更多行业,分担技术及A素材成本。因而A、R素材和技术都高质量,成本因分担而下降,创造了物美价廉。若因物美占有市场,若因物美而价高,富贵相随矣!

三、实践技术:使用Unity的ScriptableObject和AssetBundle方法
   其中,大家比较常问的是:R素材必须动态加载,而不能再开发段就绑入App里,如下:

其中,基本需求是:不要将红绿灯的构型绑入App,而直到用户运行VR App时才到伺服端实时取得红绿灯素材。那么,在实际的Daydream或HTC Vive体验平台上,又如何实现这项实实取得呢?
   其实践方法有许多种,如果您使用Unity编辑器,最简单的途径就是使用Unity的ScriptableObject技术。我们可以使用 ScriptableObject 在 Project view 建立专用的 Asset 来做设定,并将它存放在Resources文件夹中。当VR App运行中,需要用到时,才调用 Resources.Load()函数来取到设定值,若有任何修改的话,只要打开 Project view 内的 Resources文件夹修改一下即可。
   通常,一个行业的R素材资源是相当多的,而且会时常更新的,这些庞大资源全部绑入App里,本身就不合理。于是,就可以进一步将ScriptableObject打包成为AssetBundle。我们的VR App可以掌管主要逻辑或线程,当有需要某些资源(如R素材),才从外部的 AssetBundle 加载资源,这样我们常常只需要重新打包资源(R素材)的部份就能完成更新,而不需要重新编译App。
  如果不是使用Unity编辑器,也可采用其他技术,例如运用Android/Linux平台上的*.SO,或者Windows平台上的DLL来实践动态加载。其技术细节,之后再来帮您解释了。

高煥堂 教您架构思维,富贵藏在...

==>请看内容

~ end ~

时间: 2024-12-09 22:33:39

UNITY如何动态加载R素材?的相关文章

Unity的动态加载简单使用

Unity的动态加载简单使用Unity可以快速,轻量化的实现IOC,不用自已写类似反射代码来动态加载类或dll了使用Unity先要用nuget获取相关引用文件Unity可通过代码或config文件来配置要加动态加载的内容 使用示例 static void Main(string[] args) { Console.WriteLine("'Y' use Config Register Type,Otherwise use Code Register Type"); bool isUseC

Unity中 动态加载 Resources.Load()和Asset Bundle 的区别

版权声明:本文为博主原创文章,未经博主允许不得转载. 初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去.我们在编辑器里看到的Asset中的文件结构只是工作于编辑器环境下的,在游戏中unity会重新组织数据库.这是我们一定会遇到一个需求,即动态的加载我们自己的文件,而且想维护这个文件存储和加载的位置,并且是各种自定义的文件. 比如说你换装,需要动态从磁盘load一个模型,正常情况下如果这个模型没有被场景引用到,它都根本不会被打进

Unity使用脚本进行批量动态加载贴图

先描述一下我正在做的这个项目,是跑酷类音游. 那么跑酷类音游在绘制跑道上的时候,就要考虑不同的砖块显示问题.假设我有了一个节奏列表,那么我们怎么将不同的贴图贴到不同的砖块上去呢? 我花了好几个小时才搞清楚里面的门路,且听我慢慢道来. 首先我们建立一个地图,在上面新建一个Empty Object,将所有的Road砖块全部划分到这个分组里. 效果图如下: 我们得到了一些预制块,接下来我们要将其染上色. 首先的问题是,我们怎么遍历这些砖块呢?很简单,用Tag.我们将所有的砖块打上一个特别的tag,"r

unity 3D里有两种动态加载机制

unity 3D里有两种动态加载机制: 一是Resources.Load: 一是通过AssetBundle: 其实两者本质上没有什么区别.Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的.其实场景里所有静态的对象也有这么一个加载过程,只是Unity后台替你自动完成了. 1.    AssetBundles是什么? 在一些大型的网络游戏,或者加载比较多的一些场景时,如果要等

Unity 利用UGUI打包图集,动态加载sprite资源

今天做了一个UI界面,这个界面是好友界面,该界面上有若干个好友item. 需要对每个tem的头像对象(image)动态显示对应的头像.尝试利用UGUI的图集来加载,具体实现如下: 1.首先,需要知道SpriteAtlas的功能,可以保存一些关于要打包进去的sprite的设置.(详细参数设置的意义有待进一步研究),其中的Objects For Packing可以关联到需要打包进这个已创建图集的Sprite,或者文件夹,或者texture.目前这里的做法是关联到了文件夹. 2.此时,unity已经给

Unity学习笔记13——代码动态加载Prefab预设体

在进行一些功能开发的时候,我们常常将一些能够复用的对象制作成.prefab的预设物体,然后将预设体存放到Resources目录之下,使用时再动态加载到场景中并进行实例化.例如:子弹.特效甚至音频等,都能制作成预设体. 一.预设动态加载到场景: 一个预设体要能够通过代码控制在场景中进行显示,需要三个步骤,这里我们以动态加载怪物血条为例子分析一个常见的误区: 1.预设体资源加载: //加载预设体资源 GameObject hp_bar = (GameObject)Resources.Load("Pr

Android动态加载XML文件及控件来简单实现QQ好友印象的功能

在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态加载控件来简单实现QQ中好友印象的功能,其中也会提到如何来动态加载一个XML的配置文件. 那么要实现好友印象的功能,我们需要通过以下这几个步骤: 1.界面一开始需要加载一个EditText和Button控件,用于填写好友印象和添加好友印象: 2.需要新建一个arrays.xml,在xml文件中添加上

实现Android 动态加载APK(Fragment or Activity实现)

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38565345 最近由于项目太大了,导致编译通不过(Android对一个应用中的方法个数貌似有限制),所以一直琢磨着能否将某些模块的APK不用安装,动态加载,通过在网上查找资料和网友的帮助,终于实现了APK的动态加载,网络上介绍APK动态加载的文章非常多,但是我觉得写得非常好的就是这位大牛的,我基本上就是使用他的这种方案,然后加入了自己的元素.这位大牛是通过Activity实现的,我稍作修改

动态加载和动态注册类技术的深入探索

Delphi的包是Delphi IDE的核心技术,没有包也就没有了Delphi的可视化编程.包也可以用在我们开发的项目中,其好处是可以代码共享,减小工程尺寸,单纯通过替换包文件就能实现工程的升级和补丁.但是我们要加载包,就要知道包中已经存在的类.关于如何动态加载包的资料比比皆是我就不想就此问题讨论了.但是Delphi的IDE很是特殊,它无需事先知道你的包有哪些类就能注册组建,创建组建.但是Borland没有公开BPL文件的格式.我们自己是否可以实现IDE的功能呢?首先我们知道.一个组件包想要能在