public GameObject getGameObject() { voxelGroup = new VoxelGroup(texture); GameObject rootObject = new GameObject("SpriteObject"); //rootObject.AddComponent<Rigidbody>(); MeshCollider meshCollider = rootObject.AddComponent <MeshCollider>(); meshCollider.convex = true; Material material = new Material(GameManager.getGameManager().itemMaterial); material.mainTexture = texture; Mesh colliderMesh = new Mesh(); List <CombineInstance> meshs = new List <CombineInstance>(); for (int _d = 0; _d < 6; _d++) { Direction direction = (Direction)_d; prepareMesh(direction); Mesh mesh = getItemMesh(direction); if (mesh.vertices.Length > 0) { GameObject o = new GameObject(direction + ""); o.AddComponent <MeshFilter>().sharedMesh = mesh; o.AddComponent <MeshRenderer>().sharedMaterial = material; o.transform.SetParent(rootObject.transform); CombineInstance ci = new CombineInstance(); ci.mesh = mesh; ci.transform = o.transform.localToWorldMatrix; meshs.Add(ci); } } colliderMesh.CombineMeshes(meshs.ToArray()); meshCollider.sharedMesh = colliderMesh; rootObject.tag = "Item"; return(rootObject); }
public bool isVisible(VoxelGroup group, Voxel voxel) { Vector v = voxel.getVectorInGroup(); if (v.getX() <= 0 && direction == Direction.WEST) { return(true); } if (v.getX() >= group.width - 1 && direction == Direction.EAST) { return(true); } if (direction == Direction.DOWN && v.getY() <= 0) { return(true); } if (direction == Direction.UP && v.getY() >= group.height - 1) { return(true); } if (v.getZ() <= 0 && direction == Direction.SOUTH) { return(true); } if (v.getZ() >= group.depth - 1 && direction == Direction.NORTH) { return(true); } Voxel next = voxel.getRelative(group, direction); if (next == null) { return(true); } return(next.transparent); }
internal Voxel getRelative(VoxelGroup group, Direction direction) { Vector v = loc.add(direction.toVector()); return(group.getVoxel((int)v.getX(), (int)v.getY(), (int)v.getZ())); }