ScrollRect会干扰dragobject

时间:2017-02-24 15:27:48

标签: unity3d unity5

我正在我的游戏对象上实现一个拖动脚本,以便用户可以通过触摸屏幕旋转它们,我还有一个水平滚动条,其中包含用户可以选择显示相应对象的按钮,发生的是当用户滑动手指旋转对象滚动正在滚动对象,如何在旋转对象时阻止滚动滚动?

DragObject:

using UnityEngine;
using System.Collections;
public class DragObject : MonoBehaviour {
    private float m_RotationSpeed = 40f;
    void Start () {
    }

    void Update() {

        if (1 == Input.touchCount) {

            gameObject.transform.Rotate (Vector3.down, Input.touches [0].deltaPosition.x * m_RotationSpeed * Time.deltaTime);

            }
        }
}

scrollRect的:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

您应该使用UnityEngine.EventSystems中使用Update方法的接口。

这样就可以使用事件,而你的滚动矩形也不会移动。

如果您在执行此操作之前尚未使用它:

  1. 在Canvas中创建一个空的GameObject来填充 用户应该做出手势的空间。

  2. 创建一个继承自UnityEngine.UI.Graphic的新脚本(或向ImageText添加图形组件,在这种情况下继承自Monobehaviour像往常一样)并使用您感兴趣的界面,在您的情况下,我认为它们是,IBeginDragHandlerIDragHandlerIEndDragHandler

  3. 脚本的一个例子可能就是这个

    using UnityEngine;
    using UnityEngine.UI;
    using UnityEngine.EventSystems;
    
    public class EventsExample : Graphic, IBeginDragHandler, IDragHandler, IEndDragHandler {
    
        public GameObject movingObject; // I AM ROTATIN IF YOU DRAG!!
    
        private float m_RotationSpeed = 1f;
    
        public void OnBeginDrag(PointerEventData eventData)
        {
            Debug.Log("START DRAGGING, I ONLY GET CALLED ONCE PER FINGER");
        }
    
        public void OnDrag(PointerEventData eventData)
        {
            Debug.Log("I AM DRAGGING AND I AM GETTING CALLED EACH FRAME PER FINGER");
            movingObject.transform.Rotate(Vector3.down, eventData.delta.x * m_RotationSpeed * Time.deltaTime);
        }
    
        public void OnEndDrag(PointerEventData eventData)
        {
            Debug.Log("I END DRAGGING AND I AM GETTING CALLED ONCE PER FINGER");
        }
    }
    
    1. 将此脚本添加到您在Canvas中创建的空GameObject中,如果您从Monobehaviour继承,那么您还应添加一个图形组件,如图像或文本。

    2. 如果您希望用户能够拖动以在整个屏幕中旋转但滚动,则将空的游戏对象填充所有画布并将其设置为画布的第一个子画面,然后放在ScrollRect。在Unity UI中,画布的最后一个子节点就是它上面的对象,所以这样你的ScrollRect将位于空的GameObject之上,并且在拖动它时会捕获拖动事件。

    3. 应该这样做,如果你复制粘贴我的脚本,请务必将movingObject变量设置为你想要旋转的对象。