【问题标题】:Unity touch event for SpriteSprite 的 Unity 触摸事件
【发布时间】:2019-08-28 20:08:41
【问题描述】:

我正在尝试检查 Sprite 的触摸事件,但只能让此代码在 UI 元素上工作。我已经看到了鼠标事件的示例,但我想同时捕获鼠标和触摸,因为这个游戏将是多平台的

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class PlayButton : MonoBehaviour, IPointerDownHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("play");
    }
}

【问题讨论】:

  • 你的精灵需要有一些Collider,必须有一个PhysicsRaycaster连接到相机(或者如果它是一个2D游戏,则相应的2D等效项),最后需要有一个ofc EventSystem.

标签: c# unity3d


【解决方案1】:

要将IPointerDownHandler 与非UI 元素一起使用,您需要将碰撞器添加到Sprite 并将PhysicsRaycaster 添加到相机。

或者添加一个碰撞器并使用OnMouseDownOnMouseUp 在移动设备上工作正常,只要您只对单次触摸感兴趣 - 您可能会这样做。由于“性能问题”,Unity 不建议使用它——但我不认为这些性能问题非常重要,至少对于大多数项目而言。如果您有许多带有这些回调的对象,您可能会在低端设备上遇到问题,但我在追溯到 iPhone 3GS 的项目中从未遇到过这种情况。

另一种方法是使用Input.touches 数组来检查触摸是否在您的精灵中。这需要更多的工作 - 所以我建议从 OnMouseDown 开始,看看你的进展如何。

【讨论】:

  • 对不起,我试过OnMouseDown,但仍然没有回应。我认为这也仅适用于 GUI 元素
  • 这些函数只有在对象上附加了一个碰撞器时才起作用,所以请确保你有一个碰撞器
  • IPointerDownHandler is only for UI input so can't be used with Sprites. 这不是真的。精灵需要一个对撞机,您需要将 PhysicsRaycaster(或它们各自的 2D 版本)添加到相机 - ofc 还有一个 EventSystem-
  • @yes - 谢谢你,我忘记了。我已经修改了答案。
猜你喜欢
  • 1970-01-01
  • 2014-10-25
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多