egret-docs-master/Engine3D/Egret3DExport/Unity3d/README.md

156 lines
5.5 KiB
Markdown
Raw Permalink Normal View History

2024-06-19 13:32:32 +08:00
## 需要的环境 ##
1.安装unity3d 4.x版本推荐4.7.1,暂时不兼容5.x版本。
2.运行环境配置将Setting目录内DLL解压缩将包中Dll文件置于C:\Windows\System32目录下。
3.对应Egret3D引擎代码为3.2.0如果低于此功能会有部分功能无法使用或者出现bug。
## unity示例场景 ##
1.打开插件内容Egret3D/Example内示例场景Example。
## Mesh导出 ##
1.将场景中Example_Mesh的active勾选为为可见如下图所示
![](Img_0.png)
2.进行导出前需要注意的是由于unity shader的多样性很难完全适配所以推荐使用Egret3D下的shader对相应导出场景进行替换也在MaterialShader中添加自己
所需要对应的类型diffuseTexture支持Tiling和Offset功能(仅支持单张贴图)。
![](Img_1.png)
3.点击工具栏,选取场景导出按钮,即可导出。
![](Img_2.png)
4.导出内容将自动保存在Egret3D/Egret3DSence目录下可以点击查看导出内容。
![](Img_3.png)
5.Egret3D引擎使用示例资源展示。
![](Img_4.png)
6.注意事项:
a.由于引擎的不同导出mesh对象的scale缩放值不能小于0。
b.关于尺寸大小的调节如果为fbx文件导入unity推荐使用Import Setting中scale factor的大小进行缩放
c.由于unity中坐标单位是米故导入Egret3D相关参数已经已经进行了缩放处理。
d.支持多Material导出
## SkinnedMesh导出##
1.将场景中Example_SkinnedMesh勾选为为可见如下图所示
![](Img_5.png)
2.调整模型shader可以参考mesh的调整方案。调整完毕后点击SkinnedMeshRendererExport按钮每个导出的shinnedmesh都包含动画列表skinned列表
根骨骼列表和骨骼binding列表。其中根骨骼必须拖选少选或者不选会造成错误。骨骼binding是可选根据需求进行绑定。这里我们演示手指绑定一个cube。
![](Img_6.png)
3.确认无误后导出运行至Egret3D引擎如下所示
![](Img_7.gif)
4.注意事项:
a.现阶段骨骼动画支持animator组件暂不支持animation组件请确认后导出。
b.可以指定多个根节点。
c.骨骼的scale缩放暂时还不支持需要置一后才能导出。
d.现阶段骨骼binding仅支持绑定mesh资源其他内容需要拓展。
e.支持资源换装处理。
f.导出资源将自动重置坐标至(0,0,0)坐标点。
5.代码示例 Class_SkeletonAnimationEx
module egret3d {
export class Class_SkeletonAnimationEx extends Class_View3D {
protected role: Role;
protected view1: View3D;
protected cameraCtl: LookAtController;
public constructor() {
super();
this.view1 = new View3D(0, 0, window.innerWidth, window.innerHeight);
this.view1.camera3D.lookAt(new Vector3D(0, 100, -100), new Vector3D(0, 0, 0));
this.view1.backColor = 0xff888888;
this._egret3DCanvas.addView3D(this.view1);
this.cameraCtl = new LookAtController(this.view1.camera3D, new Object3D());
this.cameraCtl.distance = 150;
this.cameraCtl.rotationX = 60;
this._egret3DCanvas.start();
this._egret3DCanvas.addEventListener(Event3D.ENTER_FRAME, this.update, this);
var roleLoader: RoleLoader = new RoleLoader();
roleLoader.addEventListener(LoaderEvent3D.LOADER_COMPLETE, this.onLoadComplete, this);
roleLoader.load("resource/0_0122_huanghunshibing/RoleConfig.json");
}
protected onLoadComplete(e: LoaderEvent3D): void {
this.role = e.data.role;
this.view1.addChild3D(this.role);
this.role.skeletonAnimation.play();
}
public update(e: Event3D) {
this.cameraCtl.update();
}
}
}
## 地形和光照导出 ##
1.将场景中Example_Terrain勾选为为可见如下图所示
![](Img_8.png)
2.确认无误后导出运行至Egret3D引擎如下所示
![](Img_9.png)
3.注意事项:
a.unity地形中绘制的花草是无法被导出的。
## uv动画 ##
1.选中UV动画对象(可以多选)点击工具栏选取MarkUvAnimation按钮如图所示。
![](Img_10.png)
2.查看修改对应参数:
a. uv_0,不可为空,单张UV。
b. uv_1,暂时不可用。
![](Img_11.png)
3.运行效果可以在场景内运行unity查看效果
![](Img_12.gif)
4.注意事项:
a.支持unity中预览滚动效果以实际在Egret3D效果为准。
## shader说明 ##
1."Egret3D/dns" 其中dns分别指的是
a. d=>diffuseTexture
b. n=>normalTexture
c. s=>specularTexture
![](Img_13.png)
2. 如果需要使用transparent的透明效果可以调节Egret3D目录下shader的cutAlpha值进行实现。
## 资源导入 ##
1.将导出资源文件夹放入如图所示位置:
![](Img_14.png)
2.使用maploader进行读取使用
![](Img_15.png)
## Alpha错乱问题 ##
1.点击工具栏选取InitEgretLayer按钮如图所示。
![](Img_16.png)
2.设置存在问题对象的layer层次如图所示完毕后导出即可。
![](Img_17.png)
## Shader调节示例 ##
1.选中如图所示mesh。
![](Img_18.png)
2.调节颜色值可以看到显著变化。当前版本unity显示与Egret3D引擎内会存在色差问题建议以Egret3D为准对颜色进行调整
![](Img_19.png)
![](Img_20.png)
3.对于如何扣除图片的透明像素的处理方法我们可以使用cutalpha功能进行实现。
![](Img_21.png)
![](Img_22.png)