예제 #1
0
        private void RefreshColliders()
        {
            // Initialize new collider array
            Collider[] grabColliders = new Collider[1];
            grabColliders = NonConvexMeshCollider.Calculate(gameObject);

            // If there is no OVRGrabbable, we can't make these colliders meaningful
            PublicOVRGrabbable ovr = GetComponent <PublicOVRGrabbable>();

            if (ovr == null)
            {
                ovr = gameObject.AddComponent <PublicOVRGrabbable>();
            }
            ovr.M_GrabPoints = grabColliders;
        }
예제 #2
0
    private void generateSingleSplinter(int[] tris, Transform parent)
    {
        Vector3[] v = new Vector3[3];
        Vector3[] n = new Vector3[3];
        int[]     t = new int[6];

        v[0] = Vector3.zero;
        v[1] = vertices[tris[1]] - vertices[tris[0]];
        v[2] = vertices[tris[2]] - vertices[tris[0]];

        n[0] = normals[t[0]];
        n[1] = normals[t[1]];
        n[2] = normals[t[2]];

        t[0] = 0;
        t[1] = 1;
        t[2] = 2;
        t[3] = 2;
        t[4] = 1;
        t[5] = 0;

        Mesh m = new Mesh();

        m.vertices  = v;
        m.normals   = n;
        m.triangles = t;

        GameObject obj = new GameObject();

        obj.transform.position = new Vector3(vertices[tris[0]].x * transform.localScale.x + transform.position.x, vertices[tris[0]].y * transform.localScale.y + transform.position.y, transform.position.z);
        obj.transform.RotateAround(transform.position, transform.up, transform.rotation.eulerAngles.y);
        obj.transform.localScale = transform.localScale;
        obj.transform.rotation   = transform.rotation;
        obj.layer = layer.value;
        obj.name  = "Glass Splinter";
        if (destroySplintersTime > 0)
        {
            Destroy(obj, destroySplintersTime);
        }


        if (preCalculate == true)
        {
            obj.transform.parent = parent;
        }

        if (hideSplintersInHierarchy)
        {
            obj.hideFlags = HideFlags.HideInHierarchy;
        }
        splinters.Add(obj);

        MeshFilter mf = obj.AddComponent <MeshFilter>();

        mf.mesh = m;

        NonConvexMeshCollider col = obj.AddComponent <NonConvexMeshCollider>(); // changed: FW: was:  col = obj.AddComponent<MeshCollider>();

        //col.inflateMesh = true; // changed: FW
        //col.convex = false; // changed FW
        if (destroyPhysicsTime > 0 && destroyColliderWithPhysics)
        {
            Destroy(col, destroyPhysicsTime);
        }

        Rigidbody rigid = obj.AddComponent <Rigidbody>();

        rigid.centerOfMass = (v[0] + v[1] + v[2]) / 3f;
        if (addTorques && preCalculate == false)
        {
            rigid.AddTorque(new Vector3(Random.value > 0.5f ? Random.value * 50 : -Random.value * 50, Random.value > 0.5f ? Random.value * 50 : -Random.value * 50, Random.value > 0.5f ? Random.value * 50 : -Random.value * 50));
        }
        if (destroyPhysicsTime > 0)
        {
            Destroy(rigid, destroyPhysicsTime);
        }

        MeshRenderer mr = obj.AddComponent <MeshRenderer>();

        mr.materials = GetComponent <Renderer>().materials;
    }