一直困于这个问题,今天彻底解决了!就和大家分享一下!在Laya 3.0.4中运行正确。直接上代码:
下面这个类只要放在项目中,调用方法示例:objVisibleCtrl.showObj(this.meshs,0,3000) this.meshs是你要渐隐的MeshRenderer数组
---------------------------------------------------------------------------------------------------------------------------------------------
onst { regClass, property } = Laya;
@regClass()
export class objVisibleCtrl extends Laya.Script {
/**
* @param meshs 要改变透明度的MeshRenderer数组
* @param alpha 透明度的目标值
* @param duration 渐透明的过渡时间*/
public static showObj(meshs:[Laya.MeshRenderer],alpha:number,duration:number){
if (alpha>0.95) {
for (let i = 0; i < meshs.length; i++) {
for (let j = 0; j < meshs[i].materials.length; j++) {
let cr : Laya.Color = meshs[i].materials[j].getColor("u_DiffuseColor");
meshs[i].materials[j].materialRenderMode = Laya.MaterialRenderMode.RENDERMODE_TRANSPARENT;
Laya.Tween.to(cr,{a:alpha,update:new Laya.Handler(this,()=>{meshs[i].materials[j].setColor("u_DiffuseColor",cr)})},duration,null,Laya.Handler.create(this,()=>{
meshs[i].material.materialRenderMode = Laya.MaterialRenderMode.RENDERMODE_OPAQUE;
}))
}
}
}else if(alpha<0.1){
for (let i = 0; i < meshs.length; i++) {
for (let j = 0; j < meshs[i].materials.length; j++) {
let cr : Laya.Color = meshs[i].materials[j].getColor("u_DiffuseColor");
meshs[i].materials[j].materialRenderMode = Laya.MaterialRenderMode.RENDERMODE_TRANSPARENT;
Laya.Tween.to(cr,{a:alpha,update:new Laya.Handler(this,()=>{meshs[i].materials[j].setColor("u_DiffuseColor",cr)})},duration,null,Laya.Handler.create(this,()=>{
meshs[i].material.materialRenderMode = Laya.MaterialRenderMode.RENDERMODE_TRANSPARENT;
}))
}
}
}
}
}