2017-02-24 88 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