Unity资源导出插件
一、关于插件
采用Unity插件方案的主要原因,主要是为了支持开发者在Unity资源商城中购买的资源可以无感的迁移到LayaAir IDE中进行相关的开发工作,Unity资源商城拥有一定数量的精美且高质量的美术资源,采用Untiy资源导出插件能将这些精美的美术资源迁移到LayaAir引擎的IDE中进行开发,对一些小而美的项目来说无疑是一种无形的帮助,更可以让有Unity经验的优质开发者可以更低学习成本进入HTML5和小游戏产业中来。
插件的下载地址:https://github.com/layabox/LayaAir3.0UnityPlugin/releases
(图1-1)
开发者下载最新版的插件即可。
二、导入LayaAir的Unity插件
Unity里有一个导入自定义包的功能,通过这个功能,可以在Unity里导入LayaAir引擎提供的专属功能包,用来导出Unity里编辑好的场景和资源,然后再用以LayaAir引擎3D的开发。在Unity里导入这个自定义的LayaAir功能包的过程,我们可以视为安装了一个LayaAir引擎资源导出的Unity插件。本小节会针对这个过程进行详细介绍。
2.1 创建一个空项目
除非是在已经安装过LayaAir3D插件的Unity项目上进行升级安装,否则,我们建议去创建一个新的空项目。
因为直接打开一个Unity已有项目进行插件的安装,可能会有冲突,会导致插件安装不成功。
如果想使用已有Unity项目的场景资源和编辑好的场景,建议先在一个Unity空项目里安装好LayaAir引擎的插件后,再把旧项目的资源目录(也就是Unity项目中的Assets目录)复制到新建的项目里。
Tips: 旧项目中的其他文件对于导出插件而言都用不上,只复制Assets目录即可
2.2 两种插件导入方式(项目中首次安装)
2.2.1 菜单式导入
在Unity的资源菜单Assets(如图2-1)或者资源面板的Assets(如图2-2),右键import Package-> custom Package
。
(图2-1)从菜单导入
(图2-2)从资源面板导入
以上的两种导入方式,任选一种点开后,选择之前下载好的LayaAir引擎unity插件(xx.unitypackage)打开,如图2-3所示。
(图2-3)
点击打开
后,如图2-4所示,会有插件包含的内容列表展示,如果有不想要的功能,比如在Unity里直接预览这个功能不想要,也可以把相关默认的勾选去掉,但是建议全部导入(默认是全选)。
所以,直接点击Import
按钮,开始全部导入,即可。
(图2-4)
导入完成后,可以看到菜单栏多出一个LayaAir3D
,如图2-5所示。此时说明,已经导入成功。
(图2-5)
2.2.2 拖拽式导入
拖拽式安装的操作方式是把下载好的插件(xx.unitypackage)直接拖拽到Assets面板下,如图2-6所示。其他后续操作与菜单式安装一样。就不重复介绍了。
(图2-6)
2.3 插件导入安装的提醒
对于Unity还不太熟悉的开发者,需要提醒的是,LayaAir引擎Unity资源导出插件,不是一次导入所有项目通用。在每次创建新的项目工程后,都要重复上面导入LayaAir插件包的过程。
另外需要注意:
1.关于颜色空间的提醒:
LayaAir为线性颜色空间,对于Unity颜色空间设置为Gamma的开发者可能会出现导出效果与LayaAir不一致的情况,开发者需要确认Unity是否设置为Linear颜色空间。
可以使用以下步骤查看Unity颜色空间的设置:Editor -> Project Setting -> Player -> Other Setting -> Color Space
,操作如图2-7所示。
(图2-7)
2.关于法线贴图的提醒
Unity的法线贴图经过了压缩,在导出的时候可能会存在LayaAir IDE预览与Unity不一致的情况,对于自定义Shader的用户需要注意法线的变换。
三、资源导出插件的功能
3.1 场景导出
(图3-1)场景导出面板
3.1.1 节点设置
忽略未激活节点:如果勾选此选项,类似图3-2中Camera这类未激活的节点将不会被导出。
(图3-2)
3.1.2 模型设置
忽略顶点UV:如果勾选此选项,导出的Mesh数据不存在UV信息。
忽略顶点颜色:如果勾选此选项,导出的Mesh数据不存在顶点颜色信息。
忽略顶点法线:如果勾选此选项,导出的Mesh数据不存在顶点法线信息。
忽略顶点切线:如果勾选此选项,导出的Mesh数据不存在顶点切线信息。
自动生成UV1:如果勾选此选项,导出的Mesh数据UV Set设置为UV1。
3.1.3 其他设置
自定义导出根目录:如果勾选此选项,如图3-3所示,可以设置插件导出的资源路径(文本框填取绝对路径)。
(图3-3)
3.2 预设导出
(图3-4)预设导出面板
3.2.1 节点设置
忽略未激活节点:如果勾选此选项,类似图3-5中Camera这类未激活的节点将不会被导出。
(图3-5)
批量导出一级节点:如果勾选此选项,类似图3-6中这类节点最终导出的为LayaMonkey根节点。
(图3-6)
3.2.2 模型设置
忽略顶点UV:如果勾选此选项,导出的Mesh数据不存在UV信息。
忽略顶点颜色:如果勾选此选项,导出的Mesh数据不存在顶点颜色信息。
忽略顶点法线:如果勾选此选项,导出的Mesh数据不存在顶点法线信息。
忽略顶点切线:如果勾选此选项,导出的Mesh数据不存在顶点切线信息。
自动生成UV1:如果勾选此选项,导出的Mesh数据UV Set设置为UV1。
3.2.3 其他设置
自定义导出根目录:如果勾选此选项,如图3-7所示,可以设置插件导出的资源路径(文本框填取绝对路径)。
(图3-7)
3.3 帮助 help
帮助菜单项里,下级菜单有学习文档Study
、问答社区Answsers
这些外链菜单项,方便开发者快速进入对应的官网页面中。还有插件版本About LayaAir
,如图3-8所示。
(图3-8)
四、场景对象导出支持列表
除了LayaAir引擎插件自身面板上的导出设置项,我们还要注意并且必须要了解Unity的功能面板有哪些是可以导出使用,哪些是不支持的。
因为LayaAir引擎的Unity插件并非是将Unity所有的功能全都支持导出。毕竟我们的LayaAir引擎设计与结构与Unity的引擎并不相同,虽然3D场景基于Unity编辑器进行编辑和导出,但我们需要按LayaAir引擎插件的支持规则来使用。
在本小节,我们就全面介绍LayaAir引擎与插件支持哪些Unity中的功能。如果在本小节支持清单中未提及的,都是当前不支持的。所以,如果是刚接触Unity的开发者,在学习Unity工具使用的时候,也不必要全部学习,可以把本小节中所涉及的支持内容,作为关键字搜索学习即可。
LayaAir引擎插件也会不断在更新,当升级新的引擎版本后,可以关注版本更新日志以及该文档的变化。
4.1 Inspector面板的基础属性
在Unity的Inspector面板中,可以查看和编辑Unity编辑器中几乎所有内容,下面,我们先了解一下Inspector面板的基础通用属性。
(图4-1)
在图4-1的基础属性里,LayaAir导出支持情况如下:
Unity的Inspector基础属性 | LayaAir是否支持导出的说明 |
---|---|
GameObject Name(节点名称) | 支持 |
Static(静态) | 只支持勾选 或 不勾选 |
Layer(层) | 只支持层的序号导出,开发者也可以在LayaAir引擎中设置Layer |
Position(位置) | 支持(包括:X、Y、Z) |
Rotation(旋转) | 支持(包括:X、Y、Z) |
Scale(缩放) | 支持(包括:X、Y、Z) |
对比上面的图和表格,我们看到
Tag
是不支持的。Static
与Layer
是部分支持。后续将不再提醒,关注表格中的支持状态即可。
这里特别说一下,静态Static勾选后是全选,也就是Everything,如图4-2所示。但实际上LayaAir引擎只支持了Lightmap Static和Batching Static,那开发者不选Everything,只勾选这两个行不行。当然是不行的,我们其实只认Static勾选或不勾选这个状态,如果此处单独选择,导出并没有效果。
(图4-2)
4.2 相机的属性
(图4-3)
在图4-3中的Unity相机属性里,LayaAir导出支持情况如下:
Unity的相机属性 | LayaAir是否支持导出的说明 |
---|---|
Clear Flags(清除标志) | 支持 (包括:Skybox天空盒(Background背景色)、Solid Color纯色(Background背景色)、Depth only仅深度、Don’t Clear不清除) |
Projection(投射方式) | 支持(包括:Perspective透视(Field of View视野范围),Orthographic正交(size视野大小)) |
Clipping Planes(剪裁平面) | 支持(包括:Near近点、Far远点) |
Viewport Rect(标准视图矩形) | 支持(包括:X、Y、W、H) |
Allow HDR(允许渲染高动态色彩画面) | 支持 |
Culling Mask在Unity中设置无效,但是layaAir引擎中是支持的,默认值相当于Unity中的Everything,也可以通过引擎的cullingMask进行设置层ID。
4.3 光照相关的属性
4.3.1 灯光的属性Light
(图4-4)
在图4-4中的Unity灯光属性里,LayaAir导出支持情况如下:
Unity的灯光属性 | LayaAir是否支持导出的说明 |
---|---|
Type(灯光类型) | 部分支持(包括:Spot聚光(Range照射范围、Spot Angle聚光灯锥形角度)、Directional平行光、Point点光(Range照射范围)) |
Color(灯光颜色) | 支持 |
Mode(灯光模式) | 支持(包括:Realtime实时灯光、Baked烘焙光照贴图、Mixed混合光源) |
Intensity(灯光强度) | 支持 |
Shadow Type(阴影类型) | 支持(包括:Soft Shadows、Hard Shadows) |
4.3.2 反射探针的属性 Reflection Probe
(图4-5)
当Unity中添加Reflection Probe(反射探针)组件后,在图4-5中的属性里,LayaAir导出支持情况如下:
Unity的反射探针相关配置属性 | LayaAir是否支持导出的说明 |
---|---|
Type(类型) | 部分支持(包括:Baked烘焙模式、Custom自定义模式) |
Runtime settings (运行时设置) | 部分支持(包括:Importance权重参数、Intensity亮度、Box projection盒式偏移反射、Box Size反射探针大小、Box Offset反射探针偏移) |
Cubemap capture settings(立方体贴图捕捉设置) | 支持 |
4.4 模型相关的属性
关于模型的属性,分别支持普通模型和骨骼模型。
4.4.1 普通模型
普通模型需要Mesh Filter组件Mesh Render组件,下面分别进行介绍。
网格过滤器Mesh Filter
(图4-6)
在图4-6中的Unity网格过滤器属性里,LayaAir导出支持情况如下:
Unity的蒙皮网格渲染属性 | LayaAir是否支持导出的说明 |
---|---|
Mesh(网格) | 支持 |
网格渲染器Mesh Renderer
(图4-7)
(图4-8)
在图4-7中Unity的Mesh Render组件属性里,LayaAir导出支持情况如下:
Unity的网格渲染属性 | LayaAir是否支持导出的说明 |
---|---|
Materials(材质) | 支持(包括:Size大小、Element材质球元素) |
Lightmap Static( 静态光照贴图) | 部分支持(包括:Lightmaps贴图(Baked Lightmap烘焙光照贴图(Lightmap Index、Tiling X、Tiling Y、Offset X、Offset Y))) |
4.4.2 骨骼模型
骨骼模型的Mesh与Mesh Renderer不再分开,合并在组件Skinned Mesh Renderer
里,如下图所示:
(图4-9)
在图4-9中Unity的Skinned Mesh Renderer组件属性里,LayaAir导出支持情况如下:
Unity的蒙皮网格渲染属性 | LayaAir是否支持导出的说明 |
---|---|
Mesh(网格) | 支持 |
Root Bone(骨骼根节点) | 支持 |
Bounds(包围盒) | 支持(包括:Center中心(X、Y、Z)、Extent范围(X、Y、Z)) |
Materials(材质) | 支持(包括:Size大小、Element材质球元素) |
4.4.3 材质
对于模型的材质,这里我们介绍一下常见支持的材质类型。
分类 | 材质 |
---|---|
Build in 管线 | Standard 材质 |
Ulit Color/Texture/Cut Out/ Transparent 材质 | |
URP 管线 | URP Lit材质 |
URP Ulit材质 | |
天空盒 | Procedural 程序化天空盒 |
6 Sideed | |
Panoramic 全景图 | |
旧版着色器(只做兼容考虑, 不建议) | Diffuse Fast |
Diffuse | |
Diffuse Detail | |
Bumped Diffuse | |
Bumped Specular |
除了上述提供的材质Shader外,Unity里的其他材质,都不能在LayaAir引擎中使用。
4.5 纹理的属性
在Assets(资源)
面板里,找到2D图片资源,可以为其设置纹理的属性。
(图4-10)
在图4-10中的Unity纹理属性里,LayaAir导出支持情况如下:
Unity的纹理属性 | LayaAir是否支持导出的说明 |
---|---|
Generate Mip Maps(生成Mipmap) | 部分支持(仅支持是否勾选的状态) |
Wrap Mode(循环模式) | 部分支持(包括:Repeat重复、Clamp强制拉伸) |
Filter Mode(过滤模式) | 支持(包括:Point点过滤、Bilinear双线性过滤、Trilinear三线性过滤) |
Aniso Level(各向异性等级) | 支持 |
4.6 动画的属性
在动画方面,LayaAir支持Animator
组件和关联的Animator Controller
面板的部分属性导出和使用。
4.6.1 Aniamtor组件
(图4-11)
在图4-11中的Unity动画属性里,LayaAir导出支持情况如下:
Unity的动画属性 | LayaAir是否支持导出的说明 |
---|---|
Controller(动画控制器) | 支持 |
Culling Mode( 剔除模式) | 部分支持(包括:Always Animate 总是播放、Cull Completely完全剔除) |
4.6.2 Animator Controller State
在Aniamtor组件属性中双击Controller打开动画控制器的面板,选中State
(状态),可以看到图4-12所示的面板。
(图4-12)
在图4-12中的Unity动画控制器State属性里,LayaAir导出支持情况如下:
Unity的动画控制器State属性 | LayaAir是否支持导出的说明 |
---|---|
Motion(选定动画) | 支持 |
Speed(动画播放速度) | 支持 |
4.7 预制体
如图4-13所示,Unity中的预制体支持导出,但是导出的预制体所包含的属性(灯光、材质等),必须是插件支持的属性,即本节所列出的属性。
(图4-13)
4.8 着色器Shader
4.8.1 unity内置的Shader
插件只支持了部分unity内置shader的导出,支持的shader如下:
Skybox:"Skybox/6 Sided"、"Skybox/Procedural"、"Skybox/Panoramic"、"SkyBox/Cubemap"
Particles:"Particles/Standard Surface"、"Particles/Standard Unlit"
- Unlit:"Unlit/Texture"、"Unlit/Transparent Cutout"、"Unlit/Transparent"、"Unlit/Color"
"Standard"
Legacy:"Legacy Shaders/Diffuse Fast"、"Legacy Shaders/Diffuse"、"Legacy Shaders/Diffuse Detail"、"Legacy Shaders/Bumped Diffuse"、"Legacy Shaders/Bumped Specular"
4.8.2 自定义的unityshader
这里要注意,插件导出的shader并不是将unity的.shader文件转化为LayaAir可用的.shader文件,它只是导出了shader在材质上的参数配置。因此,对于在unity中的自定义shader,在导出前,需要先把unityshader手动写成一个layashader,然后才能导出配置。
layashader的格式参考自定义Shader。
[!Tip]
Unity中的“Properties”对应LayaAir中的“uniformMap”;Unity中的“SubShader”对应LayaAir中的“shaderPass”。
导出自定义unityshader需要在插件里面找到MetarialPropData.json
文件,在里面添加自定义的shader的配置。
打开这个文件可以看到,里面已经有很多的shader配置了,这些就是上一节中提到的内置shader。如果想添加自定义的导出配置,需要按照以下格式:
"GAPH Custom Shader/Shader_IntegradedEffect": {
"targeName": "Shader_IntegradedEffect",
"textures": [
{
"uName": "_MainTex",
"layaName": "u_AlbedoTexture",
"defind": "ALBEDOTEXTURE"
},
......
],
"tillOffset": [
{
"uName": "_MainTex_ST",
"layaName": "u_TilingOffset"
},
......
],
"colors": [
{
"uName": "_TintColor",
"layaName": "u_TintColor",
"hdrName": "u_TintColorIntensity"
},
......
],
"floats": [
{
"uName": "_MaskOffsetFactor",
"layaName": "u_MaskOffsetFactor"
},
......
],
"defineds": [
{
"uName": "_SecondColor",
"layaName": "IS_USE_SECOND_COLOR",
"from": 0,
"deflat": 1.0
},
......
]
}
其中,
- "GAPH Custom Shader/Shader_IntegradedEffect"是定义unityshader的路径,如图4-14所示。
(图4-14)
- "targeName":对应layaShader中定义的名称,如图4-15所示。
(图4-15)
- "textures":需要导出的贴图配置。
{
"uName": unity 属性名,
"layaName": layaair 属性名,
"defind": defind
}
- "tillOffset":材质球贴图的参数。
{
"uName": unity 属性名,
"layaName": layaair 属性名,
}
- "colors":颜色。
{
"uName": unity 属性名,
"layaName": layaair 属性名,
"hdrName": unity 中是hdr颜色则laya会生成这个参数,否则不需要。
}
- floats:浮点数。
{
"uName": unity 属性名,
"layaName": layaair 属性名,
}
- defineds
{
"uName": unity 属性名,
"layaName": layaair 属性名,
"from": 0:浮点数,1:keyWorld,2:材质是否有属性,3:是否有贴图,
"deflat": 对应属性检查
}
- ......(开发者可以导出更多自定义的配置)
4.9 粒子
为实现快速将unity粒子资源导出到LayaAir-IDE场景,插件做了对unity粒子系统导出的支持。但是,导出的粒子在LayaAir内置的粒子系统中并不支持。
因此,LayaAir推出了CPU粒子系统,在这个版本的粒子系统上,支持unity粒子的参数导出。
说明:”CPU粒子系统“属于企业会员的功能。
五、模型的导出文件与加载显示
当了解完插件的功能和使用规则后,我们就可以在Unity中进行编辑并导出了,但是导出后的文件名分别代表着什么,又是怎么进行加载使用的。本小节开始为大家介绍。
5.1 导出文件类型的说明
文件的后缀 | 导出文件类型的说明 |
---|---|
.ls | 场景文件,选择导出场景Scene3D 类别时生成的文件类型。会导出完整的场景信息,其中包含了场景需要的各种数据、光照贴图、模型、位置等。所以,需要导出场景相关的设置时,必须要使用Scene3D类别导出,就可以看到.ls 后缀的文件。 |
.lh | 预设文件,选择导出预设Sprite3D 类别时生成的文件类型。相对于.ls 后缀的场景文件,会缺少环境光、环境反射、场景雾效等等与场景渲染相关的信息。 |
.lm | 模型数据文件,通常是FBX格式的转换而成。 |
.lmat | 材质数据文件,是在unity中为模型设置的材质信息。加载.ls 或.lh 文件时会自动加载.lmat文件来产生材质。可以使用 BaseMaterial 类来加载。 |
.lani | 动画数据文件,如果模型上有动画,导出后将生成的动画配置文件,其中包含了动画帧数据。加载可以使用 AnimationClip 类来加载。 |
.jpg | JPEG格式的纹理图片文件。 |
.png | PNG格式的纹理图片文件。 |
.hdr | 全景天空盒需要的HDR格式图片文件 |
5.2 加载显示
导出的Unity资源,在不考虑其它逻辑的情况下,要通过LayaAir引擎显示出来,就需要先加载资源。
5.2.1 场景的加载显示
当我们想导出整个场景时,可以选择场景,设置导出路径。如图5-1所示,导出路径建议设置为在LayaAir IDE项目工程目录下的assets
文件夹,至于是assets目录下的什么目录,由开发者自行决定。
(图5-1)
导出之后只需在IDE中打开其中的.ls
文件,即可加载场景。
打开场景后,导出的场景并不具有环境光sh信息,需要找到在Scene3D层级下的烘焙开关。如图5-2所示,点击烘焙
,对当前场景的环境光sh数据进行预计算,
这样烘焙完成后的效果就是我们想要的效果了。
(图5-2)
5.2.2 预设的加载显示
如图5-3所示,预设的导出,主要是用于当不需要完整导出使用整个场景,只需要某些节点资源。又或者某些节点资源需要独立导出复用或代码动态使用等需求。
(图5-3)