Laya使用记录知识点

Laya材质material

Laya.UnlitMaterial()
此材质不受光照影响,对于一些模型材质要求跟贴图无色差的推荐使用这一个。
官网解释:Unlit不受光材质。这种材质最大的特点就是不受光照影响,且最省性能。这种材质是直接显示原贴图的样式。

####### unlitMat.albedoTexture = texture;里面这只反照率贴图的资源貌似不能打包成图集(我猜的)?因为我在设置图集里面的单个资源为贴图时,贴图加载出来的却是整个图集的png,之后把图集去除,单个加载图片资源就么问题了


unity导出3D场景:
1、导出的场景的亮度在Laya里面跟在unity里面相比较会显得暗一些?(不知是不是我操作的问题),于是我吧亮度调得相对亮以至于才laya里面达到预期效果。
2、若后续项目要求需要在3D场景里面添加节点放置新的元素,可以在Unity导出场景里面预先放置节点(因为Unity的坐标系(左手)跟Laya的坐标系(右手)不一样,对于放置对象的坐标信息处理相对麻烦),可以打印场景里面某节点坐标信息,会发现Unity里面跟Laya里面不一致(不仅x取反,y,z也有差别)。提前放置后就可以后续进行微调了。


关于射线检测以及动态生成模型材质赋值等:
**射线检测的前提添加时待检测对象需要有碰撞盒(collider)!**关于被检测的3D对象可以是Unity里面导出来的模型等,也可以是在后续程序中使用Laya创建的简单3D对象,然后重点就来了

使用laya创建简单3D对象再给对象赋值纹理材质的时候可以使用以下两种方法:
一种为设置贴图:

for(let i = 1;i<6;i++){
            var str = "tabel/group3/card_" + i;
            var tableCard = GameUtils.findObj(str, loadScene) as Laya.Sprite3D;
            // 3D显示用active  2D显示用visible
            tableCard.active = false;
            var pos: Laya.Vector3 = tableCard.transform.position;
            var box = new Laya.MeshSprite3D(Laya.PrimitiveMesh.createBox(0.0263, 0.0001, 0.0362));
            var boxCollider: Laya.PhysicsCollider = box.addComponent(Laya.PhysicsCollider) as Laya.PhysicsCollider;
            boxCollider.colliderShape = new Laya.BoxColliderShape(0.0263, 0, 0.0362);
            loadScene.addChild(box);
            box.transform.position = new Laya.Vector3(pos.x, pos.y, pos.z);
            box.transform.rotate(new Laya.Vector3(0,0,0), false, false);
            box.name = "card_"+ i;
            // 设置指定材质
            var unlitMat = new Laya.UnlitMaterial();// 不受光照影响
            var texture: Laya.Texture2D = Laya.loader.getRes("Reference/cardtest.png");
            unlitMat.albedoTexture = texture;
            box.meshRenderer.material = unlitMat;
        }

另一种为更换创建的对象的mesh以及material:

for(let i = 1;i<6;i++){
            var str = "tabel/group3/card_" + i;
            var tableCard = GameUtils.findObj(str, loadScene) as Laya.Sprite3D;
            var pos: Laya.Vector3 = tableCard.transform.position;

            var box = new Laya.MeshSprite3D(Laya.PrimitiveMesh.createBox(1, 1, 1));
            var boxCollider: Laya.PhysicsCollider = box.addComponent(Laya.PhysicsCollider) as Laya.PhysicsCollider;
            // 碰撞和的大小需要是未添加材质(sharedMesh, material)时的真实大小(方法testTextureMaterial里面的大小)
            boxCollider.colliderShape = new Laya.BoxColliderShape(0.0263, 0, 0.0362);
            loadScene.addChild(box);
            box.transform.position = new Laya.Vector3(pos.x, pos.y, pos.z);
            box.transform.rotate(new Laya.Vector3(0,0,0), false, false);
            box.name = "card_"+ i;
            var objParent: Laya.Sprite3D = Laya.loader.getRes("res3d/LayaScene_CardAndChip/Conventional/CardAndChip.lh");
            var strMesh = "cardSign/polySurface" + (20+i);
            var cardOne = GameUtils.findObj(strMesh, objParent) as Laya.MeshSprite3D;
            var meshFielt = cardOne.meshFilter.sharedMesh;
            box.meshFilter.sharedMesh = meshFielt;
            box.meshRenderer.material = cardOne.meshRenderer.material;
        }

请注意两种方法的创建模型以及添加碰撞盒的部分代码的区别。
然后在创建射线检测的时候,第一种方法设置贴图所创建的对象是真实的大小,而第二种的对象大小是以mesh以及material为标准的缩放, collider不受此影响,上述两种方式都能够完成射线检测,效果一致。


关于阴影2.6.0beta版本
阴影在微信小游戏显示不出来,官方给与回答:手机端微信小游戏不支持webgl2以及WEBGL_depth_texture这个扩展,导致阴影无法绘制。
设置模型显示阴影时,模型的材质球Render Queue为Transparent时,是不会显示阴影效果的。影响模型产生阴影的材质球因素有Render Queue、Rendermode以及材质球的类型。

如有错误,还望多指正…
待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值