2017-02-24 156 views
0

我执行我的gameobjects拖累脚本,以便用户可以通过触摸屏幕旋转它们,我也有一个水平scrollRect的至极包含按钮,用户可以选择显示相应的对象是什么发生的事情是当用户滑动手指来旋转滚动正在一起滚动的对象时,如何在旋转对象时防止滚动滚动?scrollRect的干扰dragobject

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

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

这样使用事件并且您的滚动矩形不会移动。

如果你还没有使用它之前,请按照下列步骤操作:

  1. 创建画布内的空游戏物体,填补了 空间,用户应该使手势。

  2. 创建从UnityEngine.UI.Graphic继承了一个新的脚本(或添加图形组件,将其像ImageText,在这种情况下,从Monobehaviour像往常一样继承),并使用你所感兴趣的接口,你的情况我认为它们是,IBeginDragHandlerIDragHandlerIEndDragHandler

一个脚本的一个例子可以是这样

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"); 
    } 
} 
  • 将此脚本添加到您在Canvas中创建的空GameObject,如果您从Monobehaviour继承,则还应该添加一个图形组件,如图像或文本。

  • 如果您希望用户能够在整个屏幕上旋转而不是滚动,则将空的游戏对象填满所有画布并将其设置为画布的第一个孩子,然后放到ScrollRect以下。在Unity用户界面,画布的最后一个孩子是在它之上的对象,所以这样一来你的ScrollRect将高于你的游戏对象空并拖曳它时,会赶上拖动事件。

  • 应该这样做,如果你是复制粘贴我的剧本,一定要在movingObject变量设置为要旋转的对象。

  • +0

    感谢您的解释,它现在工作正常,但控制台显示错误:NotImplementedException:所请求的功能未实现。 EventDrag.OnEndDrag(UnityEngine.EventSystems.PointerEventData EVENTDATA)(在资产/ EventDrag.cs​​:31)我应该忽略? – AND4011002849

    +0

    这是因为你删除了onenddrag函数并没有删除IEndDragHandler –

    +1

    非常棒的人,很好的回答! – AND4011002849