更新 Hierarchy
从 Hierarchy 中删除了 RoomPrefab,然后增加了 Map Generator,并在 Map Generator 上面挂载了 MapGenerator 脚本
MapGenerator 脚本
这个脚本的作用是配置地图上的房间信息(每一列有 min ~ max 个房间,这些房间可以是什么类型),然后在 Awake 的时候获取当前屏幕的高度和宽度,算出每一列的宽度,在 CreateMap 方法里将房间绘制上去
using UnityEngine;
public class MapGenerator : MonoBehaviour
{
public MapConfigSO mapConfig;
public Room roomPrefab;
private float screenHeight;
private float screenWidth;
private float columnWidth;
private Vector3 generatePoint;
private void Awake()
{
// 获取屏幕的高度和宽度
screenHeight = Camera.main.orthographicSize * 2;
screenWidth = screenHeight * Camera.main.aspect;
// 获取一列的宽度,为了防止最后一列显示在屏幕外面,所以分母加1
columnWidth = screenWidth / (mapConfig.roomBlueprints.Count + 1);
}
public void CreateMap()
{
for (int colume = 0; colume < mapConfig.roomBlueprints.Count; colume++)
{
var blueprint = mapConfig.roomBlueprints[colume];
var amount = Random.Range(blueprint.min, blueprint.max + 1);
for (int i = 0; i < amount; i++)
{
var room = Instantiate(roomPrefab, transform);
}
}
}
}
MapConfigSO
这是一个 ScriptableObject,它的作用是规定每一列上面最少和最多有多少个房间,以及这些房间分别可以是哪些类型
代码如上所示,MapConfigSO 就是整张地图,RoomBlueprint 就是每列的房间信息。这里需要特别注意 RoomType 这个类型,它是一个可以多选的 enum,原因是它上面添加了[Flags]
标签
创建一个 MapConfigSO 到 Game Data/Settings 上
然后配置地图信息,如下图所示
上图表示,地图中一共有 7 列,第0列上面有 2 - 5 个房间(只有小怪),第1列上面有 2 - 5 个房间(有小怪和精英怪),第2列上面有 2 - 5 个房间(有精英怪、商店、休息室),……
项目相关代码
代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git
标签:03,配置,mapConfig,房间,地图,private,public,colume,MapConfigSO From: https://www.cnblogs.com/hellozjf/p/18048034