SRPG游戏开发(五十五)第十一章 地图动作与地图事件 - 四 地图菜单(Map Menu)

本文详细介绍了在SRPG游戏开发中如何实现地图菜单,包括主菜单和角色单位菜单的设计,以及如何处理点击事件。内容涵盖菜单文本的管理、UI面板的初始化、菜单的打开与关闭,以及不同类型的菜单选项和对应的点击事件处理逻辑。
摘要由CSDN通过智能技术生成

返回总目录

第十一章 地图动作与地图事件(Map Action and Map Event)

我们已经有了剧本,而且可以运行剧本,但我们还缺少对地图的操作控制。

我们这一章来完成地图上的操作,地图的操作将全部由MapAction控制。



四 地图菜单(Map Menu)

就像上一节我们说的,游戏菜单分为主菜单和角色菜单。主菜单主要是提供一些公共的功能,例如所有角色的列表;而角色菜单提供一些角色独有的功能,例如移动、状态和攻击等。

你可以按照自己的喜好布局,并发送点击事件,让MapAction接收事件。不过我这里使用一个SubUIButtonLayoutGroup来控制它们,所有的回调直接让MapAction控制。

而这需要一个UI面板UIMapMenuPanel

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace DR.Book.SRPG_Dev.UI
{
   
    using DR.Book.SRPG_Dev.Framework;
    using DR.Book.SRPG_Dev.Models;

    public class UIMapMenuPanel : UIBase
    {
   
        private SubUIButtonLayoutGroup m_ButtonLayoutGroup;

        // TODO
    }
}

Map Menu

  • 图 11.1 Map Menu

1 菜单文本(Menu Text)

按钮文本可以直接写在Unity的UI中,不过为了更好的控制,我将它们放入了TextInfoConfig中,这样就需要它们的标识,称为MenuTextID,它是一个枚举类型,而值是在TextInfoConfig中的id

        /// <summary>
        /// id in TextInfoConfig
        /// </summary>
        public enum MenuTextID
        {
   
            // Main
            Unit = 100,
            Item = 101,
            Data = 102,
            Skill = 103,
            Config = 104,
            Save = 105,
            TurnEnd = 106,

            // Common
            Close = 110,

            // Player
            Move = 120,
            Holding = 121,
            Talk = 122,
            Attack = 123,
            Status = 124
        }

而我们的TextInfoConfig.txt中:

//id	text
0	测试对话0
1	测试对话1:Hello World!Hello 是你好的意思。
2	测试对话2:Bottom Hello World!
5	测试对话5
8	测试对话8
100	作战单位
101	物品
102	数据
103	技能
104	设置
105	存档
106	回合结束
110	关闭
120	移动
121	待机
122	对话
123	攻击
124	状态

有了这些之后,我们在打开菜单时,只需要传入需要打开的值就可以了。

再添加一些帮助方法:

        /// <summary>
        /// 获取所有主菜单的按钮文本
        /// </summary>
        /// <returns></returns>
        public static HashSet<MenuTextID> GetDefaultMainMenuTextIds()
        {
   
            return new HashSet<MenuTextID>()
            {
   
                MenuTextID.Unit,
                MenuTextID.Item,
                MenuTextID.Data,
                MenuTextID.Skill,
                MenuTextID.Config,
                MenuTextID.Save,
                MenuTextID.TurnEnd,
                MenuTextID.Close
            };
        }

        /// <summary>
        /// 获取所有角色菜单按钮文本
        /// </summary>
        /// <returns></returns>
        public static HashSet<MenuTextID> GetDefaultUnitMenuTextIds()
        {
   
            return new HashSet<MenuTextID>()
            {
   
                MenuTextID.Move,
                MenuTextID.Attack,
                MenuTextID.Holding,
                MenuTextID.Talk,
                MenuTextID.Status,
                MenuTextID.Close
            };
        }

2 初始化UI面板与点击事件(Initialize UIMapMenuPanel and Click Event)

我们每一个按钮需要回调一个MenuTextIDMapAction,这其实相当于每一个按钮都做了同样的事。

        private Action<MenuTextID> m_OnItemClickAction;

        private void Button_onClick(MenuTextID menuTextID)
        {
   
            UIManager.views.CloseView();
            if (m_OnItemClickAction != null)
            {
   
                m_OnItemClickAction(menuTextID);
                m_OnItemClick
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值