unity -移动触摸控制拖动游戏对象在2D游戏

本文关键字:游戏 对象 2D 拖动 控制 移动 触摸 unity | 更新日期: 2023-09-27 18:14:36

我想找出用于手机2D游戏的触摸控制的最佳实践方法,特别是在breakout/arkanoid类型游戏中拖动桨。如果Unity中没有简单的内置功能来做到这一点,我会感到惊讶,因为我本以为考虑到手机游戏的流行,这应该是一个标准功能。任何建议或教程的链接,特别是拖动游戏对象,将非常感激。谢谢。

unity -移动触摸控制拖动游戏对象在2D游戏

我的建议是使用unity 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;

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