0

我想找出用于移动 2D 游戏的触摸控制的最佳实践方法是什么,特别是为突围/打砖块风格的游戏拖动一个拨片。如果没有简单的 Unity 内置工具来执行此操作,我会感到惊讶,因为鉴于手机游戏的流行,我认为这将是一个标准功能。任何建议或教程链接,尤其是拖动游戏对象,将不胜感激。谢谢。

4

2 回答 2

0

一个简单的解决方案是导入现在的标准(Unity 5?)“DragRigidbody”脚本并将其附加到您的游戏对象。只需确保您的对象附有 RigidBody 组件(我假设您的桨对象已经有)。

于 2016-10-26T00:55:48.540 回答
0

我的建议是使用如下脚本使用统一 UI 功能(在 Unity 4.6 中引入):

public class DragControl : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    private bool m_Used;
    private Vector3 m_MouseStartPosition;
    private Vector3 m_ItemStartPosition;

    public void Start()
    {
        m_Used = false;
    }

    public void Update()
    {
        if(m_Used)
        {
            GetComponent<RectTransform>().anchoredPosition = new Vector2(m_ItemStartPosition.x + (Input.mousePosition.x - m_MouseStartPosition.x), m_ItemStartPosition.y + (Input.mousePosition.y - m_MouseStartPosition.y));
            // or you can set the y value to m_ItemStartPosition.y only if you don't want the paddle to move on Y axis
        }
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        m_Used = true;
        m_MouseStartPosition = Input.mousePosition;
        m_ItemStartPosition = GetComponent<RectTransform>().anchoredPosition;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        m_Used = false;
    }
}

为此,您必须启用 UI 项目光线投射(保持“光线投射目标”选中),并且在 UI 层中没有任何东西阻止光线投射在您的项目上。

另请注意,如果您不需要它,您可以使用Input.multiTouchEnabled = false;.

于 2016-10-24T08:21:48.287 回答