嗨大家需要你的帮助我遇到了通过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();
}
}
答案 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元素时,你的攻击才会开始