03. 设计地图配置表

更新 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

标签:20240301_2127

posted @   hellozjf  阅读(154)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示