示例#1
0
文件: Chunk.cs 项目: silantzis/swarm
 private void BuildColliders(ColliderBuffer buffer)
 {
     switch (_colliderType) {
     case ColliderType.BOX:
         BuildBoxColliders(buffer);
         break;
     case ColliderType.MESH:
         BuildMeshCollider(buffer);
         break;
     }
 }
示例#2
0
文件: Chunk.cs 项目: silantzis/swarm
    private void BuildMeshCollider(ColliderBuffer buffer)
    {
        Mesh mesh = _meshCollider.sharedMesh;

        if (mesh == null)
            mesh = new Mesh();
        else
            mesh.Clear();

        //get the arrays we have just created and assign them to the new mesh
        mesh.vertices = buffer.GetVertices();
        mesh.triangles = buffer.GetTriangles();
        mesh.RecalculateBounds();

        //clear our mesh buffer
        buffer.Clear();

        _meshCollider.sharedMesh = null;
        _meshCollider.sharedMesh = mesh;
    }
示例#3
0
文件: Chunk.cs 项目: silantzis/swarm
    private void BuildBoxColliders(ColliderBuffer buffer)
    {
        //fetch a list of colliders we already own
        BlockCollider[] colliders = GetComponentsInChildren<BlockCollider>();

        int colliderCount = colliders.Length;
        int currentCollider = 0;

        List<ColliderData> colliderData = buffer.GetColliderData();

        foreach (ColliderData data in colliderData)
        {
            BlockCollider collider = null;
            if (currentCollider < colliderCount)
            {
                collider = colliders[currentCollider];
            }
            else
            {
                //we don;t have enough children, get some from the pool,
                //if the pool is empty; new colliders will be created for us
                GameObject obj  = ObjectPool.instance.GetObjectForType("BlockCollider", false);

                if (obj)
                {
                    obj.hideFlags = 0;
                    obj.transform.parent = transform;
                    collider = obj.GetComponent<BlockCollider>();

                    collider.Init (this);

                    colliderCount++;
                }
            }

            if (collider)
            {
                collider.transform.localRotation = Quaternion.identity;
                collider.SetPosition(data.position);
                collider.SetSize(data.size);
                collider.enabled = true;

                currentCollider++;
            }
        }

        //release any excess children back into the pool
        for (int i=currentCollider; i<colliderCount; i++)
        {
            ObjectPool.instance.PoolObject(colliders[i].gameObject);
        }

        //clear our collider buffer
        buffer.Clear();
    }