Laya3D小项目中的踩坑历程
.lh or .ls
测试Unity导出的Scene(仅包含3D球架)在导入Laya后的显示,发现若导出.lh文件,在Laya创建的Scene中挂载脚本运行时会报“cannot read ‘_addCamera’ of undefined”错误,解决此问题时选择重新导出.ls文件
相应脚本:
1 |
|
导出文件说明:
ls — 场景文件: Json文件,包含场景中所有节点的数据信息,包含光照贴图信息
lh — 层级文件: Json文件,包含场景中所有节点的数据信息,不包含光照贴图信息
lt — 地形文件: Json文件,包含地形中的数据信息
lm — 网格文件: 二进制文件,包含模型所有顶点的数据信息
lmat — 材质文件: Json文件,包含光照,贴图,渲染模式等基本材质信息
lsani — 蒙皮动画文件:二进制文件,包含骨骼动画帧率信息
lrani — 刚体动画文件:二进制文件,包含刚体动画帧率信息
lav — 新版动画节点文件:Json文件,只包含Animator组件下节点的数据信息
lani — 新版动画文件:二进制文件,包含Animator动画帧率信息
Mesh Collider 和 Box Collider的选择:
篮筐处有两个Trigger,一个在篮筐一个在篮网,篮筐环附近用Box Collider(元碰撞器),篮网用Mesh Collider(网格),后者渲染时消耗资源比前者大很多
如何进一步操作导入的Scene中的子对象?
测试时在Laya.Scene3D.load的call中添加:
1 |
|
可在运行时查看scene中的子对象个数
其他类似操作代码如下:
1 |
|
关于Laya.Handler.create
Handler是事件处理器类
create(caller:*, method:Fuction, args:Array = null, once:Boolean = true): Handler
caller:* -执行域(this)
method:Function -回调方法
args:Array -携带的参数
once:Boolean -是否只执行一次,默认为true
注意once后或者Handler.recover()后不要再使用此对象
流程
GolbalDataScene -> StartScene -> LoadingScene -> GameScene
GolbalDataScene/GameStaticController/ConfigController中控制加载Assets/Resources/Config中的BallsData和StageData
一些说明
每个Scene中的UIController是用相同的BSK Manager脚本,即,所有场景能用到的UI相关的管理控制都放在这个脚本,其他通用的Cotorller也如此
reset球的函数在BSKGameController -> resetBalls,设置了篮球的初始化位置,Rotation,layer,放到balls列表(但是没有设置其物理属性如重力、碰撞)
给篮球(balls)获取BSKBall组件、添加刚体、并且siKinematic = true使物理影响刚体在BSKShooter中的Update函数中(Update每一帧都调用)
在Laya中创建的对应脚本的类型的选择要考虑Unity中对应脚本是否有Update等逐帧刷新的功能
对Unity中具有Update等逐帧刷新的Component(Monobehavior),在Laya中创建对应脚本所选类型要考虑是否有相同逐帧刷新的内置函数
BSKBall -> Start函数:
1 |
|
篮球资源是如何加载进去的:在BSKGameController声明一个GameObject对象-BallPrefab,然后在Unity的Inspector中可以直接选取需要的“lanqiu”资源
将Unity中的Scene导入Laya时,games_bg不能导入,因为不支持Sprite Renderer