コード例 #1
0
        private void CalculateWalkableTiles()
        {
            var player   = PlayerActor.Instance;
            var distance = player.stats.currentStats.speed;
//            var pos = GridUtil.GridToWorld(player.GridPosition);


            // var VBuffer = new List<Vector3>();


            var walkableTiles = Astar.Area(player.GridPosition, distance);


            var vol = GenerationLib.makeVolume(
                new float[3][] {
                new float[] { -distance - 1, distance + 1, 1f },
                new float[] { 0, 1, 1f },
                new float[] { -distance - 1, distance + 1, 1f }
            }, (x, y, z) => {
                if ((int)y < 0.5f)
                {
                    return(0);
                }
                return(walkableTiles.Contains(new NVector2((int)x + player.GridPosition.x, (int)z + player.GridPosition.y)) ? 1 : 0);
            });

            List <int>     iBuffer;
            List <Vector2> uvs;
            List <Vector3> vBuffer;

            SurfaceNets.GenerateSurfaceMesh(vol, 0.5f, out vBuffer, out iBuffer, out uvs);

            var delta = ((distance + 1) - (-distance - 1)) / 2.0f + 0.5f;

            vBuffer = vBuffer.Select(v => new Vector3(v.x - delta, 0.0f, v.z - delta)).ToList();

            this.walkableTiles = new HashSet <NVector2>(walkableTiles);

            mesh.Clear();
            mesh.SetVertices(vBuffer);
            mesh.SetIndices(iBuffer.ToArray(), MeshTopology.Quads, 0);
            mesh.uv = uvs.ToArray();

            mesh.RecalculateNormals();
            mesh.RecalculateBounds();
        }