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); } }
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); }