我希望脚本按如下方式工作: 识别出光标指向UI按钮,然后单击该按钮. 当我点击出用户界面按钮时,光标应该会消失.

目前,它的工作方式如下: 当我在游戏开始后第一次点击UI按钮时,它工作正常.它正在点击按钮.在我点击另一个位置后,光标消失了,这也是正确的.在我按下Esc按钮后,光标出现,之后我不能再点击我的UI按钮.它不被识别.

请帮帮忙.我有recorded video个来显示什么是错误的,下面是我使用的代码.

using UnityEngine;
using UnityEngine.EventSystems;

public class ClickBlockDemo : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("GetMouseButtonDown");
            // Check if the mouse was clicked over a UI element
            if (EventSystem.current.IsPointerOverGameObject())
            {
                Debug.Log("Button Clicked");
                Invoke("CursorIsActive", 0.1f);

            }
            else 
            {
                Debug.Log("CursorLockMode.Locked");
                Cursor.lockState = CursorLockMode.Locked;
            }
        }        
    }
    void CursorIsActive()
    {
        Debug.Log("CursorIsActive");
        Cursor.lockState = CursorLockMode.None;
    }
}

目前,它的工作方式如下: 当我在游戏开始后第一次点击UI按钮时,它工作正常.它正在点击按钮.在我点击另一个位置后,光标消失了,这也是正确的.在我按下Esc按钮后,光标出现,之后我不能再点击我的UI按钮.它不被识别.

推荐答案

按Esc键后,游戏窗口将失go 焦点,这就是为什么您可以看到光标.当你再次点击游戏窗口时,它获得焦点,光标恢复到它的状态:CursorLockMode.Locked,这是你最后设置的状态.

您需要决定何时更改光标的状态,例如,如果您希望在按Esc键后将光标状态更改为CursorLockMode.None,则需要编写代码.

if (Input.GetKeyDown(KeyCode.Escape))
{
    Cursor.lockState = CursorLockMode.None;
}

Csharp相关问答推荐

如何将Kafka消息时间戳转换为C#中的日期和时间格式?

如何在没有额外副本的情况下将存储在IntPtr下的原始图像数据写入WinUI3中的Image控件?

用C#从Word文档中删除重复的节控件和文本内容控件

在EF Core中,有没有什么方法可以防止在查询中写入相同的条件,而代之以表达式?

BlockingCollection T引发意外InvalidOperationException

在C#中反序列化/序列化具有混合元素顺序的XML时出现问题

未在数据流块之间传播完成

如何将MemberInitExpression添加到绑定中其他Lambda MemberInitExpression

.NET:从XPath定位原始XML文档中的 node

当使用Dapper映射DBNull时,我可以抛出异常吗?

在使用StringBuilder时,如何根据 colored颜色 设置为richTextBox中的特定行着色?

升级后发出SWITCH语句

当try 测试具有协变返回类型的抽象属性时,类似功能引发System.ArgumentException

如何使用Npgsql从SELECT获得所有查询结果

在';、';附近有错误的语法.必须声明标量变量";@Checkin";.';

用于获取字符串的最后12个字符的正则表达式(空格除外)

使用LibraryImport在多个dll中导入相同的函数

最小API定义的Swagger标头参数

为什么INTEGER在通过反射调用时对空对象返回TRUE,而在INTEGER上调用时返回FALSE?

为什么LoadLibrary无法加载由vcpkg构建的OpenCV_world DLL,而不是预构建的二进制版本?