Unity 中的鼠标弹起与触摸弹起
Mouse up vs. touch up in Unity
我有点问题。我似乎找不到一种好方法来区分 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.");
}
如果您用鼠标单击并按住,在按住时,您可以用手指触摸并松开,这将记录 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 对象击中其他对象的问题,请参阅 post 了解如何正确检测对任何类型游戏对象的点击。
我想通了。
我错过了这个电话:Input.simulateMouseWithTouches = false;
如果你只在 Start() 事件上设置它似乎有效(我可能是错的,你可能需要在第一个 Input
更新访问器,我想测试一下)。否则,Unity 会从触摸事件中模拟鼠标事件。我只能推测他们这样做是为了让游戏开发者更容易编写一次并跨平台玩。
注意:一旦设置,就是全局设置,因此即使在稍后加载的不同场景中也需要取消设置。
我有点问题。我似乎找不到一种好方法来区分 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.");
}
如果您用鼠标单击并按住,在按住时,您可以用手指触摸并松开,这将记录 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 对象击中其他对象的问题,请参阅
我想通了。
我错过了这个电话:Input.simulateMouseWithTouches = false;
如果你只在 Start() 事件上设置它似乎有效(我可能是错的,你可能需要在第一个 Input
更新访问器,我想测试一下)。否则,Unity 会从触摸事件中模拟鼠标事件。我只能推测他们这样做是为了让游戏开发者更容易编写一次并跨平台玩。
注意:一旦设置,就是全局设置,因此即使在稍后加载的不同场景中也需要取消设置。