【问题标题】:Unity: Map Input.GetButtonDown("Jump") in iOS touchUnity:iOS 触摸中的 Map Input.GetButtonDown("Jump")
【发布时间】:2014-01-14 10:13:44
【问题描述】:

在Unity中,我可以默认使用Input.GetButtonDown("Jump")获取密钥Space。如何将屏幕触摸映射到 iOS 中的“跳转”动作?

在这个documentation 中,它只解释了在JavaScript 中获取触摸。而在这个video tutorial 中,它只提到了Button。有没有办法将屏幕触摸/手势直接映射到预定义的动作(如跳转)?

注意:我使用单声道 C# 脚本。

【问题讨论】:

  • 为什么不简单地创建一个按钮并将其连接到该按钮?否则,您必须使用 Input.touches/Input.GetTouch 并映射特定区域。
  • 这个问题似乎没有表现出对编程的基本理解,但您的代表表明我们不在同一页面上。你能澄清一下吗?首先尝试阅读名称中带有“Touch”的 Input 类成员的所有文档。
  • @Bart 我目前正在开发的游戏的用户界面不涉及按钮。事实上,透明按钮也不能应用在当前项目中。
  • @Jessy 等等。文档没有提到将移动操作映射到输入管理器中的默认输入(如“跳转”操作)。如果你有 Unity 的经验,你就会知道我在说什么。输入管理器仅接受鼠标、键盘和操纵杆作为输入。
  • 输入管理器自 2005 年之前就没有更新过;它不处理 Touch 结构。但是,如果说每个触摸事件都是“跳跃”,这又有什么意义呢?

标签: c# mono unity3d


【解决方案1】:

有不止一种方法可以统一获取 Touch 事件:

if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
    //Your stuff here
}

以上演示使用Input.GetTouch

不过,还有一个我更喜欢的替代方案:

if(Input.GetMouseButtonDown(0))
{
    //Your stuff here
}

或

if(Input.GetMouseButtonUp(0))
{
    //Your stuff here
}

上面分别使用了Input.GetMouseButtonDown和Input.GetMouseButtonUp,不仅在鼠标左键点击时触发,在iOS和Android的触摸事件上也会触发。正如名称所暗示的,GetMouseButtonDown 在您第一次触摸屏幕时触发,GetMouseButtonUp 在您的手指松开时触发。您显然需要在其中添加一些额外的检查,例如确保用户没有尝试拖动某些东西,或者他的手指是否一直按在屏幕上等。

但是请记住,只要包含它们的脚本处于活动状态,无论您在何处单击,上述内容都会触发。因此,如果您的游戏也有按钮(我猜会的),您可以检查点击/触摸是否在某个区域,或者您可以在相机前面和按钮后面添加一个透明平面,然后检查这样的点击:

if(Input.GetMouseButtonDown(0))
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
    if(Physics.Raycast(ray,out hit) && hit.collider.gameObject.name == "myObjectName")
    {
        //Your stuff here
    }
}

只有当您左键单击具有您选择的名称的游戏对象(也有一个对撞机)并且它和相机之间没有其他东西时,才会触发上述情况。一个透明的平面会捕捉到您的所有点击,让您可以在其上方粘贴其他元素。

如果我解释得不够清楚,或者您还有其他问题,请让我知道,我会尽力详细说明。

【讨论】:

  • 在使用GetTouch(0)之前,我们是否应该检查存在多少次触摸,例如类似if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.TouchBegan)?
  • 另一方面,我们可以在 Unity 的输入管理器中本地映射它吗?
  • @ShivanRaptor 是的,忘记了 touchcount 位。我不确定您是否可以将 Touch 映射到跳转,但您可能可以将鼠标左键映射到它,如答案中所述,它在智能手机上兼作触控。
  • @Steven Mills .name 是 UnityEngine.Object 的属性,而不仅仅是 GameObject。
  • @Jessy 我想hit.collider.name 会给出相同的名称,但我只是觉得在那里某处看到一个游戏对象更放心。如果有对它的引用,您甚至可以比较实际的 GameObject,但名称可能更容易。
猜你喜欢
  • 2020-09-11
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 2013-03-26
  • 2010-12-02
相关资源
最近更新 更多