public void BuildNavMeshes() { GameObject navMeshRoot = GameObject.FindGameObjectWithTag(StaticGameDefs.NavMeshRootTag); NavMeshGenerator navMeshGenerator = navMeshRoot.GetComponent <NavMeshGenerator>(); navMeshGenerator.BuildNavMesh(); }
void Start() { GameObject CurrentTile = ColorTile[Random.Range(0, 5)]; player.transform.position = new Vector2(2, 2); for (int i = 0; i <= 11; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(20, i), Quaternion.identity)); } for (float i = 0; i <= 11; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(0, i), Quaternion.identity)); } for (int i = 0; i <= 20; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(i, 11), Quaternion.identity)); } for (int i = 0; i <= 20; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(i, 0), Quaternion.identity)); } for (int i = 0; i <= 3; i++) { // walls.Add(Instantiate(Platform, new Vector2(i+9, 5), Quaternion.identity)); walls.Add(Instantiate(Platform, new Vector2(i + 13, 3), Quaternion.identity)); walls.Add(Instantiate(Platform, new Vector2(i + 4, 3), Quaternion.identity)); } walls.Add(Instantiate(CurrentTile, new Vector2(10, 1), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(10, 2), Quaternion.identity)); walls.Add(Instantiate(Platform, new Vector2(1, 2), Quaternion.identity)); walls.Add(Instantiate(Platform, new Vector2(19, 2), Quaternion.identity)); // Generate bool array of the map bottomLeft = new Vector2(walls.Select(w => w.transform.position.x).Min(), walls.Select(w => w.transform.position.y).Min()); topRight = new Vector2(walls.Select(w => w.transform.position.x).Max(), walls.Select(w => w.transform.position.y).Max()); mapSize = new Vector2(topRight.x - bottomLeft.x + 1, topRight.y - bottomLeft.y + 1); bool[,] map = new bool[(int)mapSize.x, (int)mapSize.y]; foreach (GameObject w in walls) { Vector2 pos = (Vector2)w.transform.position - bottomLeft; map[(int)pos.x, (int)pos.y] = true; } // Generate NavMesh NavMeshGenerator.Offset = bottomLeft; Nodes = NavMeshGenerator.GenerateNavMesh(map); GameController.Nodes = Nodes; Vector3 spawn = SpawnPoint.transform.position; for (int i = 0; i < Bosses; i++) { var boss = Instantiate(KingMeowster, spawn, Quaternion.identity); boss.GetComponent <KingMeowster>().Target = player; } GameController.AliveBosses = Bosses; }
public void Initialise(Map map, int seed) { this.map = map; width = map.levelWidth; height = map.levelHeight; noiseMap = NoiseMapGenerator.Create(map, seed); wallMap = new int[width, height]; CreateWallMap(); ProcessMap(); MSMeshGenerator MSGen = GetComponent <MSMeshGenerator> (); Material[] mats = new Material[map.possibleTerrain.Length]; for (int i = 0; i < map.possibleTerrain.Length; i++) { mats [i] = map.possibleTerrain [i].terrainMaterial; } List <MeshFilter> walkables = MSGen.Generate(wallMap, map.tileSize, map.wallHeight, mats, map.wallMaterial); ObjectGenerator objGen = GetComponent <ObjectGenerator> (); List <GameObject> objects = objGen.GenerateObjects(map, noiseMap); NavMeshGenerator meshGen = GetComponent <NavMeshGenerator> (); meshGen.Initialise(); meshGen.BuildNavMesh(walkables, objects, wallMap.GetLength(0) * map.tileSize, wallMap.GetLength(1) * map.tileSize); StaticBatchingUtility.Combine(objects.ToArray(), objects [0].transform.parent.gameObject); Light worldLight = (Light)Instantiate(new GameObject(), Vector3.zero, Quaternion.Euler(map.lightOptions.angle), this.transform).AddComponent(typeof(Light)); worldLight.name = "World Light"; worldLight.type = LightType.Directional; worldLight.intensity = map.lightOptions.intensity; worldLight.color = map.lightOptions.lightColour; worldLight.shadows = LightShadows.Soft; worldLight.shadowStrength = 0.8f; if (map.postProcProfile != null) { Camera.main.GetComponent <PostProcessingBehaviour> ().profile = map.postProcProfile; } else { Debug.LogWarning("Map is missing a Post Processing Profile"); } }
//Not meant for real-time use public void ConstructGraph() { if (meshGraph == null) { Debug.Log("No mesh to operate on! Please set meshGraph before calling this function"); return; } //Create a sampler Gameobject to perform raycasts to neighboring nodes Sampler = new GameObject("Sampler"); List <int> neighbors; List <int> DeadVertices = new List <int>(); List <pathNode> DeadNodes = new List <pathNode>(); simpleGraph = new GraphSimple(); simpleGraph.AddNodes(meshGraph.vertexCount); float dist = 0; for (int i = 0; i < meshGraph.vertexCount; i++) { //if(DeadVertices.Contains(i)) //continue; neighbors = GetNeighbors(i); pathNode currentNode = simpleGraph.graph[i]; currentNode.position = transform.TransformPoint(meshGraph.vertices[i]); for (int j = 0; j < neighbors.Count; j++) { dist = Vector3.Distance(transform.TransformPoint(meshGraph.vertices[i]), transform.TransformPoint(meshGraph.vertices[neighbors[j]])); currentNode.neighbors.Add(simpleGraph.graph[neighbors[j]]); currentNode.weight.Add(dist); Sampler.transform.position = transform.TransformPoint(meshGraph.vertices[i]); if (Physics.Raycast(Sampler.transform.position, Vector3.Normalize(meshGraph.vertices[neighbors[j]] - meshGraph.vertices[i]), dist)) { if (!DeadVertices.Contains(neighbors[j])) { DeadVertices.Add(neighbors[j]); DeadNodes.Add(simpleGraph.graph[neighbors[j]]); break; } } } //Debug.Log(i); } foreach (pathNode node in DeadNodes) { simpleGraph.DeleteNode(node.ID); } //Rebuild mesh NavMeshGenerator.RemoveTriangles(meshGraph, DeadVertices); }
private void Awake() { if (instance != null) { Destroy(this); } else { instance = this; } }
void Awake() { NavMeshGenerator.Generate(); }
void Start() { int size = Random.Range(MinRoomSize, MaxRoomSize); GameObject CurrentTile = WallTiles[Random.Range(0, 5)]; GameController.RespawnPoint = new Vector2(Mathf.Round((-1 * size) / 2) + 1, 3); player.transform.position = GameController.RespawnPoint; float tracker = 0f; int sizeSides = Random.Range(MinSideSize, MaxSideSize); // Generate floor for (float i = Mathf.Round((-1 * size) / 2); i <= Mathf.Round(size / 2); i++) { float Percentage = Random.value; if (tracker == -2f) { walls.Add(Instantiate(Platform, new Vector2(i - 1, 1), Quaternion.identity)); } if (Percentage <= Straight) { walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); } else if (Percentage <= Straight + ONE && Percentage > Straight && tracker <= 1) { tracker += 1f; walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker - 1), Quaternion.identity)); } else if (Percentage <= Straight + ONE + ONE && Percentage > Straight + ONE && tracker >= -1) { tracker -= 1f; walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity)); } else if (Percentage < 1 && Straight + ONE + ONE < Percentage && tracker >= 0) { tracker -= 2f; walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker + 1f), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); } else if (Percentage < 1 && Straight + ONE + ONE < Percentage && tracker < 0) { tracker += 2f; walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker - 1f), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); } } // Generate walls for (int i = 0; i <= sizeSides; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(Mathf.Round((-1 * size) / 2) - 1, i), Quaternion.identity)); } for (float i = tracker; i <= sizeSides; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(Mathf.Round(size / 2) + 1, i), Quaternion.identity)); } for (int i = 1; i <= Mathf.Round(size / 2); i++) { walls.Add(Instantiate(CurrentTile, new Vector2(i, sizeSides), Quaternion.identity)); } for (int i = 1; i >= Mathf.Round((-1 * size) / 2); i--) { walls.Add(Instantiate(CurrentTile, new Vector2(i, sizeSides), Quaternion.identity)); } // Generate bool array of the map bottomLeft = new Vector2(walls.Select(w => w.transform.position.x).Min(), walls.Select(w => w.transform.position.y).Min()); topRight = new Vector2(walls.Select(w => w.transform.position.x).Max(), walls.Select(w => w.transform.position.y).Max()); mapSize = new Vector2(topRight.x - bottomLeft.x + 1, topRight.y - bottomLeft.y + 1); bool[,] map = new bool[(int)mapSize.x, (int)mapSize.y]; foreach (GameObject w in walls) { Vector2 pos = (Vector2)w.transform.position - bottomLeft; map[(int)pos.x, (int)pos.y] = true; } // Generate NavMesh NavMeshGenerator.Offset = bottomLeft; Nodes = NavMeshGenerator.GenerateNavMesh(map); GameController.Nodes = Nodes; // Spawn enemies var SpawnPoints = Nodes.Cast <Node>().Where(n => n.IsWalkable).Select(n => n.pos + NavMeshGenerator.Offset); for (int i = 0; i < Enemies; i++) { int CurrentPoint = Random.Range(0, SpawnPoints.Count()); var enemy = Instantiate(BolsjeDreng, new Vector2(SpawnPoints.ElementAt(CurrentPoint).x, SpawnPoints.ElementAt(CurrentPoint).y), Quaternion.identity); enemy.GetComponent <BolsjeDreng>().Target = player; } GameController.AliveEnemies = Enemies; }
protected virtual void Start() { randomMovementObject = new GameObject("RandomPosition").GetComponent <Transform>(); path = null; navMeshInstance = NavMeshGenerator.instance; }
// Use this for initialization void Start() { navMeshInstance = NavMeshGenerator.instance; }
void Start() { navGen = GetComponent <NavMeshGenerator>(); ResetMap(); }