laya的开发文档 - 陈徐永

时间:2024-02-18 12:59:10

laya的开发文档

2018-09-14 08:55  陈徐永  阅读(3975)  评论(0编辑  收藏  举报

一、 先在unity3d里面做好游戏 为了保证和laya显示一致,所有材质的shader选择LayaAir3D/Blinnphong 材质 如图所示

 

二、 导出舞台和所需prefab

1)     首先设置导出选项 如图所示

 

 

分2种情况导出:

1、导出场景只保留相机和灯光或者需要一开始就需要显示的prefab

2、导出prefab 只保留prefab 场景和灯光需要删除,这些prefab作为动态加载使用

 

三 在laya创建项目

1) 新建空白项目如图所示 根据自己要用的语言选择 这里选择AS3版本

 

2) 创建完毕后 文件树如下

 

LayaSample.as为启动文件 可以在.actionScriptProperties修改启动文件

              在构造函数中 需要设置设配方式 如何是竖屏设置高适应

Laya.stage.scaleMode = "fixedheight";

横屏设置宽适应

Laya.stage.scaleMode = "fixedWidth";

所有的适配方式可以在stage类的scaleMode方法里面找到

 

四 在laya中加载场景和prefab

1)一般使用预加载的方法

Laya.loader.create([{url:"res/LayaScene_Main/Main.ls","type":Scene},{url:"res/LayaScene_Model/Model.lh","type":Sprite3D}],Handler.create(this,this.onCreateComplete));

加载完成后会回调onCreateComplete 如果需要分包则需要加入baseurl设置成网络地址同时设置本地已有资源白名单

Laya.URL.basePath = "https://XXX.com";//请把XXX换成自己的真实网址;

MiniAdpter.nativefiles = ["wxlocal","res/atlas/houzi.atlas"];//白名单

       加载场景和获取场景元素 示例

scene = Laya.loader.getRes("res/LayaScene_Main/Main.ls");

Laya.stage.addChild(scene);

mainCamera = scene.getChildByName("Env").getChildByName("Main Camera") as Camera;

动态加载prefab示例

Sprite3D.instantiate((Laya.loader.getRes("res/LayaScene_Model/Model.lh")

.getChildByName(spName) as Sprite3D));

parent.addChild(obj);

注意:

1、laya的3d坐标系和unity3d的不一样 X轴相反 laya遵循右手坐标系

2、Vector使用部分预制在特定情况下会有意外的bug 比如Vector.Zero,使用new Vector(0,0,0)则不会

3、没有unity3d自带的domove,dorotate等transform相关的tween方法 需要自己实现或者使用第三方类库 自己实现参考如下

Tween.to(pos,{y:1.5,complete:Handler.create(this,OnTriggerEnterWithJumpMid),update:new Handler(this,onUpdatePosY)},100);

private function onUpdatePosY():void{

            if( (owner as Sprite3D)!=null && (owner as Sprite3D).transform!=null){

            ((this.owner as Sprite3D).getChildByName("GameObject") as Sprite3D).transform.localPosition=pos;

            }

        }

4、Laya.timer类里面所有的delay都是毫秒为单位 unity3d是秒为单位

5、Laya 挂脚本方式为 my.addComponent(Class); 获取组件方式或者调用挂在脚本的函数

方式为(my. getComponentByType(Class) as Class).callFunction();

6、需要做物理检测相关的类 需要继承自Script,相当于uniyt3d里面的MonoBehaviour

里面的生命周期 基本一致

7、laya里面 没有unity3d里面的tag概念 只能通过名字判断

8、laya转出的模型 无论之前在unity3d里面是那个layer 在laya里面都是默认的default

9、raycastHit中的distance数据为 距离/检测的射线长度 同样的还有 颜色值/255 ,角度/180,弧度/PI

 

PS Laya的注意事项需要更多的人来完善 如果有纰漏或者改善的 欢迎更新文档