//private float curDissolveVal = 0; void CreateGhost() { if (meshRender == null) { return; } for (int i = 0; i < meshRender.Length; i++) { Mesh mesh = new Mesh(); if (meshRender[i] == null) { continue; } meshRender[i].BakeMesh(mesh); GameObject go = new GameObject("Ghost_" + this.gameObject.name); go.layer = 1;//transFX go.hideFlags = HideFlags.HideAndDontSave; MeshFilter filter = go.AddComponent <MeshFilter>(); filter.mesh = mesh; MeshRenderer meshRen = go.AddComponent <MeshRenderer>(); meshRen.material = meshRender[i].material; InitMaterial(meshRen.material); /* * meshRen.material = meshRender[i].material; * meshRen.material.shader = ghostShader;//设置xray效果 * meshRen.material.SetFloat("_Intension", Intension);//颜色强度传入shader中 * meshRen.material.SetVector("_RimColor", RimColorOutSide * Mathf.Pow(2f,2.8f));//颜色强度传入shader中 * //meshRen.material.SetVector("_EmissionColor", Color.white * 4.2354f); * meshRen.material.SetVector("_RimColor2", RimColorInSide * Mathf.Pow(2f,1.7169f));//颜色强度传入shader中 * //meshRen.material.SetVector("_EmissionColor", Color.white * 1.7169f); * meshRen.material.SetFloat("_Power", Power);//颜色强度传入shader中 * meshRen.material.SetVector("_DisColor", coDissolveCol * Mathf.Pow(2f, 1.5f)); * //固有值(取值请见xray_distortion的prefab) * meshRen.material.SetFloat("_DistortionForce", 0.02f); * meshRen.material.SetFloat("_DistortionScale", 0.18f); * meshRen.material.SetFloat("_RefractionForce", 0.05f); * meshRen.material.SetFloat("_DisTortionSpeed", 0.1f); * meshRen.material.SetFloat("_InnerDarkness", 1f); */ go.transform.localScale = meshRender[i].transform.localScale; go.transform.position = meshRender[i].transform.position; go.transform.rotation = meshRender[i].transform.rotation; GhostItem item = go.AddComponent <GhostItem>();//控制残影消失 item.SetDataAndRun(mfDissolveTime, Time.time + mfDissolveTime + mKeepTime, mKeepTime, meshRen); } }
private void GenGhostLifeCycle(GameObject ghost, Mesh copyMesh, Material source) { GhostItem item = ghost.AddComponent <GhostItem>(); item.deleteTime = Time.time + duration; MeshFilter filter = ghost.AddComponent <MeshFilter>(); filter.mesh = copyMesh; MeshRenderer render = ghost.AddComponent <MeshRenderer>(); render.material = source; render.material.shader = ghostShader; render.material.SetFloat("_Intension", intension); item.meshRenderer = render; }
void Update() { //人物有位移才创建残影 if(lastPos == this.transform.position) { return; } lastPos = this.transform.position; if (Time.time - lastTime < interval) {//残影间隔时间 return; } lastTime = Time.time; if (meshRender == null) { return; } for (int i = 0; i < meshRender.Length; i++) { Mesh mesh = new Mesh(); meshRender[i].BakeMesh(mesh); GameObject go = new GameObject(); go.hideFlags = HideFlags.HideAndDontSave; GhostItem item = go.AddComponent <GhostItem>();//控制残影消失 item.duration = duration; item.deleteTime = Time.time + duration; MeshFilter filter = go.AddComponent <MeshFilter>(); filter.mesh = mesh; MeshRenderer meshRen = go.AddComponent <MeshRenderer>(); meshRen.material = meshRender[i].material; meshRen.material.shader = ghostShader;//设置xray效果 go.transform.localScale = meshRender[i].transform.localScale; go.transform.position = meshRender[i].transform.position; go.transform.rotation = meshRender[i].transform.rotation; item.meshRenderer = meshRen; } }