Unity3d ScrollRect干扰dragobject

Unity3d ScrollRect干扰dragobject,unity3d,unity5,Unity3d,Unity5,我在我的游戏对象上实现了一个拖动脚本,这样用户可以通过触摸屏幕来旋转它们,我还有一个水平滚动条,其中包含用户可以选择显示相应对象的按钮,发生的是当用户滑动手指旋转对象时,滚动条一起滚动,旋转对象时如何防止scrollrect滚动 排水口: using UnityEngine; using System.Collections; public class DragObject : MonoBehaviour { private float m_RotationSpeed = 40f;

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

排水口:

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:


您应该使用UnityEngine.EventSystems中的接口,而不是使用更新方法

这样就可以使用事件,并且滚动条不会移动

如果您以前没有使用过,请执行以下步骤:

  • 在画布中创建一个空的游戏对象,填充 用户应在其中做出手势的空间

  • 创建一个新脚本,该脚本继承自(或向其中添加一个图形组件,如
    图像
    文本
    ,在这种情况下,像往常一样继承自
    monobhavior
    ),并使用您感兴趣的界面,在您的情况下,我认为它们是,以及

  • 脚本的一个例子是

    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");
        }
    }
    
  • 将此脚本添加到画布内创建的空游戏对象中,如果继承自MonoBehavior,则还应添加图像或文本等图形组件

  • 如果您希望用户能够拖动鼠标在整个屏幕上旋转,但不能拖动scrollrect,则将空的游戏对象填满所有画布,并将其设置为画布的第一个子对象,然后将其放置在
    scrollrect
    下方。在Unity UI中,画布的最后一个子对象是位于其上方的对象,因此,通过这种方式,
    ScrollRect
    将位于空游戏对象上方,并在拖动时捕捉拖动事件

  • 这应该可以做到,如果您要复制粘贴我的脚本,请确保将movingObject变量设置为要旋转的对象


  • 感谢您的解释,它现在工作正常,但是控制台显示一个错误:NotImplementedException:请求的功能未实现。EventDrag.onendrag(UnityEngine.EventSystems.PointerEventData eventData)(位于Assets/EventDrag.cs:31)我应该忽略它吗?这是因为您删除了onendrag函数而没有删除IEndDragHandler