c# - Unity 中的鼠标弹起与触摸弹起

标签 c# ios .net unity-game-engine

我有点问题。我似乎找不到一种好方法来区分 Unity 是触发鼠标弹起事件还是触发触摸弹起事件。触摸抬起是指用户在触摸显示屏上触摸某物后从屏幕上松开手指。

问题是这样的:我在游戏逻辑上遇到了一个问题,即用户同时松开他们用鼠标选择的内容并同时触摸/释放他们的触摸以单击 UI 按钮(换句话说,我尝试仅检测鼠标释放,或仅检测触摸释放 - 我该怎么做?)。我试过同时使用 Input.GetMouseButtonUp(0)Input.GetMouseButton(0),但如果触摸或鼠标按钮,两者都会改变它们的状态向上事件。

那么如何正确区分两者呢?我什至尝试使用 Touch.fingerId 属性,该属性可以很好地跟踪/区分仅触摸事件,但是,问题是我仍然无法区分仅使用 Input.GetMouseButton(0 ) 因为即使在触摸时它也会触发。

有没有人碰巧知道在 Unity 中分别检测鼠标释放或触摸释放的正确方法是什么?

编辑:

有人不明白手头的问题,所以让我们暂时假设您有一台支持触摸的桌面设备。添加此脚本:

void Update () {
    if (Input.GetMouseButtonDown(0))
        Debug.Log("Mouse button down.");
    if (Input.GetMouseButtonUp(0))
        Debug.Log("Mouse button up.");
}

如果您用鼠标单击并按住,在按住时,您可以用手指触摸并松开,这将记录鼠标按钮弹起。尽管您没有松开鼠标按钮。如何区分鼠标松开和触摸松开?

最佳答案

对于桌面:

  • 鼠标按下 - Input.GetMouseButtonDown
  • 鼠标松开 - Input.GetMouseButtonUp

例子:

if (Input.GetMouseButtonDown(0))
{
    Debug.Log("Mouse Pressed");
}

if (Input.GetMouseButtonUp(0))
{
    Debug.Log("Mouse Lifted/Released");
}

对于移动设备:

  • 触地 - TouchPhase.Began
  • 润色 - TouchPhase.Ended

例子:

if (Input.touchCount >= 1)
{
    if (Input.touches[0].phase == TouchPhase.Began)
    {
        Debug.Log("Touch Pressed");
    }

    if (Input.touches[0].phase == TouchPhase.Ended)
    {
        Debug.Log("Touch Lifted/Released");
    }
}

现在,如果您遇到通过 UI 对象点击其他对象的问题,请参阅 this发布如何正确检测对任何类型的游戏对象的点击。

关于c# - Unity 中的鼠标弹起与触摸弹起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48433588/

相关文章:

c# - 如何在 .NET 项目的解决方案级别禁用警告

c# - 返回 bool 的异步方法

ios - 如何在 WKWebView 上的指定位置获取消息?

c# - 在与报表文件不同的数据库上运行时,Crystal Report 加载速度非常慢

.net - ibm.data.informix 没有从数据库中获取正确的数据

c# - 如何影响 C# 中动态创建的标签文本的格式

c# - 如何正确定义类属性?

ios - 从 Swift 4 中的 UICollectionView 获取单元格图像

ios - Grand Central Dispatch 无障碍

c# - 将 Lambda LINQ 语句作为 Func<> 传递时出现问题