【unity】9.右键单击添加旗子(Button Right Click事件) 您所在的位置:网站首页 unity代码添加按键 【unity】9.右键单击添加旗子(Button Right Click事件)

【unity】9.右键单击添加旗子(Button Right Click事件)

2024-07-16 02:26| 来源: 网络整理| 查看: 265

上一篇:【unity】8.深度优先搜索

修改点击监听事件

在之前的代码中,我们将给每个按钮设置监听事件写在了GameLogic中初始化按钮的地方,现在把这一段注释掉

void InitButton(GameObject _button, int _row, int _col, int _buttonSize) { //前略 /* //这里原本是给按钮设置listerner的地方,现在注释掉 _button.GetComponent().onClick.AddListener( delegate{ ClickMine(_button); } );*/ } 将左右键点击函数设为public

然后新增函数SetFlag并将ClickMine函数修改为public:

public Sprite flagImage; public Sprite noFlagImage; public void ClickMine(GameObject _button) { //以下略 } public void SetFlag(GameObject _button) { MinesweeperButton _mineSweeperButton = _button.GetComponent(); int _row = _mineSweeperButton.GetRow(); int _col = _mineSweeperButton.GetCol(); //有旗的格子右键后设为无旗,无旗的格子右键后设为有旗 _mineSweeperButton.SetHasFlag(!_mineSweeperButton.GetHasFlag()); if (_mineSweeperButton.GetHasFlag()) { _button.GetComponent().sprite = flagImage; } else { _button.GetComponent().sprite = noFlagImage; } } 添加旗子图像

其中flagImage和noFlagImage是有雷和没有雷的图像,在unity中选中GameLogic进行修改 在这里插入图片描述 flag图标自己画了一张,存放在Image文件夹下,UISprite直接使用unity自带的即可 在这里插入图片描述

将左右键监听事件写在button里

然后在MineSweeperButton.cs中添加如下代码,这段代码参考了这篇文章:

public class MinesweeperButton : MonoBehaviour, IPointerClickHandler { //前略 GameLogic gameLogic; bool hasFlag = false; public void SetHasFlag(bool _hasFlag) { hasFlag = _hasFlag; } public bool GetHasFlag() { return hasFlag; } public UnityEvent leftClick; public UnityEvent rightClick; private void Start() { leftClick.AddListener(new UnityAction(ButtonLeftClick)); rightClick.AddListener(new UnityAction(ButtonRightClick)); gameLogic = FindAnyObjectByType(); } public void OnPointerClick(PointerEventData eventData) { if (eventData.button == PointerEventData.InputButton.Left) leftClick.Invoke(); else if (eventData.button == PointerEventData.InputButton.Right) rightClick.Invoke(); } private void ButtonLeftClick() { gameLogic.ClickMine(gameObject); } private void ButtonRightClick() { gameLogic.SetFlag(gameObject); } }

这段代码中,使用hasFlag来标记该格子中是否标记过旗子,然后把左右键的事件监听都放在按钮身上,在点击后调用GameLogic中的ClickMine和SetFlag函数。为了能调用GameLogic的函数,这里在初始化时使用FindAnyObjectByType函数在游戏里寻找了这个类型。

注意必须要继承IPointerClickHandler类才能使用OnPointerClick相关功能。

有旗子的格子额外处理

为了让已经标了旗子的格子无法再使用左键点击,在GameLogic的ClickMine中添加判断:

public void ClickMine(GameObject _button) { int _row = _button.GetComponent().GetRow(); int _col = _button.GetComponent().GetCol(); //没标记过旗子才能进行点击事件 if (_button.GetComponent().GetHasFlag() == false) { if (bombList.Contains(_row * maxCol + _col)) { _button.GetComponent().color = Color.red; _button.GetComponent().enabled = false; } else { DFSMine(_row, _col); } } } 运行效果

代码运行效果如下: 在这里插入图片描述

下一篇:【unity】10.胜利判定



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有