统一 - 移动触控在2D游戏中拖动游戏对象

时间:2016-10-24 02:18:06

标签: c# mobile unity3d touch breakout

我想找出用于移动2D游戏的触控控制的最佳练习方法,特别是拖拽用于突破/ arkanoid风格游戏的划桨。如果没有简单的内置Unity工具可以做到这一点会让我感到惊讶,因为我认为这将成为移动游戏普及的标准功能。 任何建议或教程链接,特别是拖动游戏对象,将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

我的建议是使用像这样的脚本使用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项目光线投射(选中“Raycast Target”),并且不会阻止光线投影覆盖UI图层中的项目。

另请注意,如果您不需要,可以使用Input.multiTouchEnabled = false;禁用mutli touch输入。

答案 1 :(得分:0)

一个简单的解决方案是导入现在标准(Unity 5?)&#34; DragRigidbody&#34;脚本并将其附加到您的游戏对象。只要确保你的对象附有一个RigidBody组件(我认为你的桨对象已经存在)。