廢話不多說,直接上代碼:
using UnityEngine;
using System.Collections;
/// <summary>
/// 必須保證在NGUI創建的UIRoot下的子控件使用
/// </summary>
public class NewBehaviourScript : MonoBehaviour
{
private UIRoot m_Root = null;
private Collider m_Collider = null;
void Awake()
{
m_Root = NGUITools.FindInParents<UIRoot>(gameObject);
m_Collider = NGUITools.AddWidgetCollider(gameObject) as Collider;
}
#region OnDragStart, OnDrag和OnDragEnd是由UICamera觸發的函數事件,不能改變
void OnDragStart()
{
if (!enabled) return;
// 關閉碰撞是爲了在OnDragEnd檢測放開時觸摸的對象
if (m_Collider != null) m_Collider.enabled = false;
}
void OnDrag(Vector2 delta)
{
// 改變位置實現移動
if (m_Root)
transform.localPosition += (Vector3)delta * m_Root.pixelSizeAdjustment;
}
void OnDragEnd()
{
DropRelease(UICamera.hoveredObject);
if (m_Collider != null) m_Collider.enabled = true;
}
#endregion
// 用於處理拖拽結束事件
private void DropRelease(GameObject surface)
{
if (surface)
transform.parent = surface.transform;
transform.localPosition = new Vector3(0f,0f,0f);
}
}