예제 #1
0
    void Start()
    {
        // Use Simplex Terrain and our basic Marching Cubes algorithm
        terrGen = new SimplexTerrainGenerator ();

        // Generate the lookup table for the 256 first pass smoothed surface net possibilities
        SurfaceNetLookupTable.GenerateSmoothedPointLocations(Smoothing);

        // Set the MeshGenerator of your choice
        //meshGen = new RegularCubeMeshGenerator ();
        //meshGen = new MarchingCubesMeshGenerator();
        meshGen = new SurfaceNetsMeshGenerator();

        world = new WorldData (terrGen, meshGen, ChunkXSize, ChunkYSize);

        // Add chunks to the list of nearby chunks for instantiation during runtime
        // Reduces black screen load time
        nearbyChunks = new List<Chunk> ();
        for (int i=0; i<world.chunks.GetLength(0); i++) {
            for (int j=0; j<i+1 && j<world.chunks.GetLength(1); j++) {
                nearbyChunks.Add (world.chunks [i, j]);
            }
            for (int k=0; k<i; k++)
            {
                nearbyChunks.Add (world.chunks[k,i]);
            }
        }
    }
예제 #2
0
    void Start()
    {
        // Use Simplex Terrain and our basic Marching Cubes algorithm
        terrGen = new SimplexTerrainGenerator();
        meshGen = new MarchingCubesMeshGenerator();
        world = new WorldData(terrGen, meshGen);

        // Grab the meshfilter from our current object
        // Replace the mesh data with calculated mesh data from WorldData
        var meshfilter = GetComponent<MeshFilter>();
        Mesh mesh = new Mesh();
        Chunk testChunk = world.chunks[0,0];
        mesh.vertices = testChunk.vertices;
        mesh.uv = testChunk.uvRays;
        mesh.triangles = testChunk.triangles;
        meshfilter.mesh = mesh;
        //meshfilter.mesh.vertices = world.vertices;
        //meshfilter.mesh.uv = world.uvRays;
        //meshfilter.mesh.triangles = world.triangles;

        // Update the mesh collider to use the graphical mesh for the physics engine
        mesh.RecalculateNormals();
        var meshcollider = GetComponent<MeshCollider>();
        meshcollider.sharedMesh = mesh;
    }
 public WorldData(IGenerateTerrain terrGen, IMeshGenerator meshGen)
 {
     points = new bool[ChunkXSize,ChunkYSize,ZSize];
     TerrainGenerator = terrGen;
     MeshGenerator = meshGen;
     TerrainGenerator.GenerateTerrain(this);
     MeshGenerator.GenerateMesh(this);
 }
예제 #4
0
    public WorldData(IGenerateTerrain terrGen, IMeshGenerator meshGen)
    {
        chunks = new Chunk[numChunksX,numChunksY];
        TerrainGenerator = terrGen;
        MeshGenerator = meshGen;

        RegenerateWorld();
    }
예제 #5
0
    public WorldData(IGenerateTerrain terrGen, IMeshGenerator meshGen, int chunksX, int chunksY)
    {
        numChunksX = chunksX;
        numChunksY = chunksY;
        chunks = new Chunk[numChunksX,numChunksY];
        TerrainGenerator = terrGen;
        MeshGenerator = meshGen;

        RegenerateWorld();
    }
    void Start()
    {
        terrGen = new SimplexTerrainGenerator();
        meshGen = new MarchingCubesMeshGenerator();
        world = new WorldData(terrGen, meshGen);
        transform.Rotate(new Vector3(2, 2, 2));
        var meshfilter = GetComponent<MeshFilter>();
        Mesh mesh = new Mesh();
        mesh.vertices = world.vertices;
        mesh.uv = world.uvRays;
        mesh.triangles = world.triangles;
        //meshfilter.mesh.vertices = world.vertices;
        //meshfilter.mesh.uv = world.uvRays;
        //meshfilter.mesh.triangles = world.triangles;
        meshfilter.mesh = mesh;

        mesh.RecalculateNormals();
        var meshcollider = GetComponent<MeshCollider>();
        meshcollider.sharedMesh = mesh;
        //var thing = GetComponent<MeshRenderer>();
    }
예제 #7
0
 public Chunk(int xPos, int yPos, int xySize, int zSize, IGenerateTerrain terrGen, IMeshGenerator meshGen, WorldData world)
 {
     TerrainGenerator = terrGen;
     MeshGenerator = meshGen;
     XYSize = xySize;
     ZSize = zSize;
     XPosition = xPos;
     YPosition = yPos;
     upperLimit = new int[XYSize+2, XYSize+2];
     lowerLimit = new int[XYSize+2, XYSize+2];
     blocks = new Block[xySize+2, xySize+2, zSize];
     for(int i=0; i<blocks.GetLength(0); i++)
     {
         for (int j=0; j<blocks.GetLength(1); j++)
         {
             for (int k=0; k<blocks.GetLength(2); k++)
             {
                 blocks[i,j,k] = new Block();
             }
         }
     }
     this.world = world;
 }