代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class RoomGenerator : MonoBehaviour
{
public enum Direction { up, down, left, right };
public Direction direction;
[Header("room info")]
public GameObject roomPrefab;
public int roomNumber;
public Color startColor, endColor;
private GameObject endRoom;
[Header("position control")]
public Transform generatorPoint;
public float xOffset;
public float yOffset;
//repeat room check layer
public LayerMask roomLayer;
//room list
public List<GameObject> rooms = new List<GameObject>();
void Start()
{
for (int i = 0; i < roomNumber; i++)
{
rooms.Add(Instantiate(roomPrefab, generatorPoint.position, Quaternion.identity));
//change position
ChangePointPos();
}
rooms[0].GetComponent<SpriteRenderer>().color = startColor;
//compare the longest distance as the end room
endRoom = rooms[0];
foreach (var room in rooms)
{
//the begin room is 0,0,0
if (room.transform.position.sqrMagnitude > endRoom.transform.position.sqrMagnitude)
{
endRoom = room;
}
}
endRoom.GetComponent<SpriteRenderer>().color = endColor;
}
// Update is called once per frame
void Update()
{
if (Input.anyKeyDown)
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
public void ChangePointPos()
{
//check repeat
do
{
direction = (Direction)Random.Range(0, 4);
switch (direction)
{
case Direction.up:
generatorPoint.position += new Vector3(0, yOffset, 0);
break;
case Direction.down:
generatorPoint.position += new Vector3(0, -yOffset, 0);
break;
case Direction.left:
generatorPoint.position += new Vector3(-xOffset, 0, 0);
break;
case Direction.right:
generatorPoint.position += new Vector3(xOffset, 0, 0);
break;
}
} while (Physics2D.OverlapCircle(generatorPoint.position, 0.2f, roomLayer));
}
}
按照数量随机生成不同的房间在各个位置,开始和结束颜色不同