Ejemplo n.º 1
0
    public void Initiate()
    {
        image         = GetComponent <Image>();
        autodestroy   = GetComponent <Autodestroy>();
        startLifetime = autodestroy.destroyTimer;

        started = true;
    }
Ejemplo n.º 2
0
    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
    }