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以及材质球的类型。
如有错误,还望多指正…
待续…