public void Initiate() { image = GetComponent <Image>(); autodestroy = GetComponent <Autodestroy>(); startLifetime = autodestroy.destroyTimer; started = true; }
public void LaunchEmc(Vector3 origin, GameObject targetObj) { Debug.Log("createEMC"); depth = (Material)Resources.Load("Materials/Extrustion/Ext01") as Material; origin = targetObj.transform.position + origin; targetObj = targetObj.transform.Find("emc").gameObject; //Debug.DrawRay(targetObj.transform.position,targetObj.transform.position + origin, Color.red,50f); Mesh targetMesh = targetObj.GetComponent <MeshFilter>().mesh; Vector3[] targetVertices = new Vector3[targetMesh.vertexCount]; targetVertices = targetMesh.vertices; Vector3[] newVerticeOrigin = new Vector3[4]; Vector3[] newVerticeDestination = new Vector3[4]; int[] triangleNumbers = targetMesh.triangles; for (int t = 0; t < 4; t++) { if (t % 3 == 0) { Vector3[] verts = new Vector3[3] { targetMesh.vertices[targetMesh.triangles[t]], targetMesh.vertices[targetMesh.triangles[t + 1]], targetMesh.vertices[targetMesh.triangles[t + 2]], }; Vector3 transformedVertice; Vector3 direction; for (int v = 0; v < verts.Length; v++) { transformedVertice = targetObj.transform.TransformPoint(verts[v]); direction = Vector3.Normalize(transformedVertice - origin); direction = direction * shadowSize; newVerticeOrigin[v] = transformedVertice; newVerticeDestination[v] = transformedVertice + direction; } for (int i = 0; i < verts.Length; i++) { Vector3[] planeVertices = new Vector3[4]; int j = i + 1; if (i == 0) { j = 2; } if (i == 2) { j = 0; } planeVertices[0] = newVerticeOrigin[i]; planeVertices[1] = newVerticeOrigin[j]; planeVertices[2] = newVerticeDestination[i]; planeVertices[3] = newVerticeDestination[j]; GameObject plane = new GameObject("EmcPlane_" + targetObj.transform.parent.name); MeshFilter meshFilter = (MeshFilter)plane.AddComponent(typeof(MeshFilter)); meshFilter.mesh = CreateMesh(planeVertices); meshFilter.mesh.RecalculateBounds(); //application des materails MeshRenderer renderer = plane.AddComponent(typeof(MeshRenderer)) as MeshRenderer; int matNum = 8; Material[] allMat = new Material[matNum]; renderer.materials = new Material[matNum]; for (int m = 0; m < matNum; m++) { Material newMat = (Material)Instantiate(depth) as Material; newMat.SetFloat("_Amount", 0.05f * m); allMat[m] = newMat; } renderer.materials = allMat; plane.transform.parent = targetObj.transform; plane.transform.Translate(0, 0, -0.05f); plane.transform.tag = "SafeZone"; plane.AddComponent <MeshCollider>().sharedMesh = meshFilter.mesh; Autodestroy ad = plane.AddComponent <Autodestroy>(); ad.destroyDelay = destroyAfter; if (Network.isClient && targetObj.renderer.isVisible == false) { plane.renderer.enabled = false; } } } // end %3 } // end triangles loop }