示例#1
0
        void OnDestroy()
        {
            if (Camera.main)
            {
                FXVShieldPostprocess shieldPostrocess = Camera.main.GetComponent <FXVShieldPostprocess>();
                if (shieldPostrocess)
                {
                    shieldPostrocess.RemoveShield(this);
                }
            }

            if (inside)
            {
                Destroy(inside.GetComponent <MeshFilter>().mesh);
            }

            if (baseMaterial)
            {
                Destroy(baseMaterial);
            }
            if (postprocessMaterial)
            {
                Destroy(postprocessMaterial);
            }
            if (postprocessActivationMaterial)
            {
                Destroy(postprocessActivationMaterial);
            }
            if (activationMaterial)
            {
                Destroy(activationMaterial);
            }
        }
示例#2
0
        void Awake()
        {
            myRenderer              = GetComponent <Renderer>();
            activationTimeProperty  = Shader.PropertyToID("_ActivationTime");
            shieldDirectionProperty = Shader.PropertyToID("_ShieldDirection");

            if (Camera.main)
            {
                FXVShieldPostprocess shieldPostrocess = Camera.main.GetComponent <FXVShieldPostprocess>();
                if (shieldPostrocess)
                {
                    shieldPostrocess.AddShield(this);
                }
            }

            shieldActivationDir = 0.0f;

            if (shieldLight)
            {
                lightColor = shieldLight.color;
            }

            myCollider = transform.GetComponent <Collider>();

            if (shieldActive)
            {
                shieldActivationTime = 1.0f;
                myCollider.enabled   = true;
            }
            else
            {
                shieldActivationTime = 0.0f;
                myCollider.enabled   = false;
            }

            if (shieldLight)
            {
                shieldLight.color = Color.Lerp(Color.black, lightColor, shieldActivationTime);
            }


            if (renderSides == FXVRenderSidesOptions.OUTSIDE_AND_INSIDE || renderSides == FXVRenderSidesOptions.INSIDE_ONLY)
            {
                inside = new GameObject("inside");
                inside.transform.parent        = transform;
                inside.transform.localPosition = Vector3.zero;
                inside.transform.localScale    = Vector3.one;
                inside.transform.localRotation = Quaternion.identity;
                inside.layer = gameObject.layer;

                inside.AddComponent <MeshRenderer>();
                MeshFilter mf = inside.AddComponent <MeshFilter>();

                Mesh baseMesh = gameObject.GetComponent <MeshFilter>().mesh;

                string insideMeshName = baseMesh.name + "_inside";

                Mesh flippedMesh = null;
                if (insideMeshes.ContainsKey(insideMeshName))
                {
                    flippedMesh = insideMeshes[insideMeshName];
                }
                else
                {
                    //Debug.Log("create inside mesh " + insideMeshName);

                    flippedMesh = Instantiate(baseMesh);

                    Vector3[] normals = flippedMesh.normals;
                    for (int i = 0; i < normals.Length; i++)
                    {
                        normals[i] = -normals[i];
                    }
                    flippedMesh.normals = normals;

                    for (int m = 0; m < flippedMesh.subMeshCount; m++)
                    {
                        int[] triangles = flippedMesh.GetTriangles(m);
                        for (int i = 0; i < triangles.Length; i += 3)
                        {
                            int temp = triangles[i + 0];
                            triangles[i + 0] = triangles[i + 1];
                            triangles[i + 1] = temp;
                        }
                        flippedMesh.SetTriangles(triangles, m);
                    }

                    insideMeshes.Add(insideMeshName, flippedMesh);
                }

                mf.mesh = flippedMesh;

                insideRenderer = inside.GetComponent <Renderer>();
                insideRenderer.sortingOrder = insideRenderer.sortingOrder - 1;

                MeshCollider mc = inside.AddComponent <MeshCollider>();
                mc.sharedMesh = flippedMesh;
            }

            if (renderSides == FXVRenderSidesOptions.INSIDE_ONLY)
            {
                myRenderer.enabled = false;
            }

            SetMaterial(myRenderer.material);
            SetHitMaterial(hitMaterial);
        }