public void BuildDecal(DecalBuildInfo decalInfo, string decalAltasName = "DecalDefault") { Material decalMat = null; if (decalInfo.decalMat == null) //没有专门指定材质球 { if (decalAltasName != "" && decalMatPool.ContainsKey(decalAltasName)) { decalMat = decalMatPool[decalAltasName]; } else { Shader decalShader = AssetBundleManager.GetShader("Decal/Default"); decalMat = new Material(decalShader); decalMatPool.Add(decalAltasName, decalMat); } } else { decalMat = decalInfo.decalMat; } decalMat.mainTexture = decalInfo.decalSprite.texture; Decal decal = CreateDecalObj(decalInfo.decalPos, decalInfo.decalEulerAngle, decalInfo.decalScale); decal.SetMaterial(decalMat); decal.DecalSprite = decalInfo.decalSprite; //淡入淡出 decal.decalFadeInTime = decalInfo.decalFadeInTime; decal.decalFadeTime = decalInfo.decalFadeTime; decal.decalFadeOutTime = decalInfo.decalFadeOutTime; BuildDecalMesh(decal); }
/// <summary> /// 播放特效 /// </summary> public override void PlayEffect(bool bEnemy, int HostEntityID, Vector3 srcPosition, Vector3 dstPosition, int mask = 0) { if (!PerformaceOk && !DebugMode) { Debug.LogError("特效超标,不予以播放,请特效检查特效预制体:" + gameObject.name); return; } //没有激活不播放 if (bPlay || !gameObject.activeInHierarchy) { return; } GameObject go = getTargetCache(); go.transform.SetParent(transform); go.transform.SetPosition(dstPosition); currDstObj = go; go = getTargetCache(); go.transform.SetParent(transform); go.transform.SetPosition(srcPosition); currSrcObj = go; PlayEffect(bEnemy, HostEntityID, currSrcObj.transform, currDstObj.transform, mask); if (false && this.hasMarkDecal) { Vector3 decalDir = this.decalOffsetDir; decalDir.z = 0; Vector3 decalPosition = new Vector3(); if (DecalSystem.Instance.CheckHitDecal(this.transform.position + decalDir, this.transform.forward, ref decalPosition)) { DecalBuildInfo info = new DecalBuildInfo(); info.decalPos = decalPosition; info.decalEulerAngle = this.transform.eulerAngles; info.decalEulerAngle.z = this.decalAngle; info.decalScale = this.decalScale; info.decalFadeInTime = this.decalFadeInEndTime - this.decalFadeInStartTime; info.decalFadeTime = this.decalFadeOutStartTime - this.decalFadeInEndTime; info.decalFadeOutTime = this.decalFadeOutEndTime - this.decalFadeOutStartTime; info.decalMat = this.decalMat; info.decalSprite = this.decalSprite; if (this.decalDelayTime > 0) { DecalSystem.Instance.DelayBuildDecal(this, info, this.decalDelayTime); } else { DecalSystem.Instance.BuildDecal(info); } } } }
public void DelayBuildDecal(EffectNode node, DecalBuildInfo decalInfo, float delayTime, string decalAltasName = "DecalDefault") { this.delayTime = delayTime; if (delayTime > 0) { delayCoroutine = GameUtil.StartCoroutineHelper(node, DelayFunc(decalInfo, decalAltasName)); } else { BuildDecal(decalInfo, decalAltasName); } }
private IEnumerator DelayFunc(DecalBuildInfo decalInfo, string decalAltasName) { yield return(new WaitForSeconds(delayTime)); BuildDecal(decalInfo, decalAltasName); }