예제 #1
0
    //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);
        }
    }
예제 #2
0
    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;
    }
예제 #3
0
    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;
        }
    }