如何防止鼠标点击通过GUI控件和在Unity3D中播放动画

时间:2018-03-18 14:52:00

标签: unity3d

描述

嗨大家需要你的帮助我遇到了通过Unity中的UI面板点击鼠标的问题,也就是说,我创建了暂停菜单,当我点击“恢复”按钮时,游戏取消暂停,播放器播放攻击动画,这是不受欢迎的。我想要的是当我点击“恢复”按钮时,不应播放“攻击动画”。同样的问题,如果我只是点击面板不一定是一个按钮,我点击UI面板越多,我退出暂停菜单后播放更多的攻击动画。此外,我已经搜索了这个问题的解决方案,并建议使用事件系统和事件触发器,但由于我对Unity的知识处于初级水平,我无法正确实现它。如果不清楚,请大家帮帮忙,对不起我的英语。)以下是我使用的代码:

代码:

using UnityEngine;
using UnityEngine.EventSystems;

public class PauseMenu : MonoBehaviour {

    public static bool IsPaused = false;
    public GameObject pauseMenuUI;
    public GameObject Player;
    private bool state;

    private void Update() {
        //When Escape button is clicked, the game has to freeze and pause menu has to pop up 
        if (Input.GetKeyDown(KeyCode.Escape)) {
            if (IsPaused) {
                Resume();
            }
            else {
                Pause();
            }
        }
    }

    //Code for Resume button
    public void Resume() {
        //I was suggested to use event system but no result Attack animation still plays once I exit pause menu
        if (EventSystem.current.IsPointerOverGameObject()) {
            Player.GetComponent<Animator>().ResetTrigger("Attack");
        }
        pauseMenuUI.SetActive(false);
        Time.timeScale = 1f;
        IsPaused = false;
    }

    //this method is responsible for freezing the game and showing UI panel
    private void Pause() {
        pauseMenuUI.SetActive(true);
        Time.timeScale = 0f;
        IsPaused = true;
    }

    //The code for Quit button
    public void QuitGame() {
        Application.Quit();
    }
}

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,但听起来就像你的代码中的某个位置,当玩家左键单击时你会发动攻击。

现在你的问题是当玩家点击UI元素时也会执行此代码,例如在这种情况下是Resume按钮?

你尝试通过重置动画师的攻击触发器来解决这个问题,我认为这是一个更好的解决方案,可以防止攻击开始,而不是以后尝试重置攻击。

如果鼠标位于UI元素上,EventSystem.current.IsPointerOverGameObject()将返回true。

因此,您可以使用它来修改您开始攻击的代码:

... add this check in your code where you want to start the attack
if(EventSystem.current.IsPointerOverGameObject() == false)
{
// add your code to start your attack
}
...

现在,只有当你没有超过UI元素时,你的攻击才会开始