拖拽

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class TestData
{
    public int _Id;
	public int _Num;
}
public class DragManager
{
	private static DragManager _DragManager;

	public static DragManager GetInstance()
	{
		if (null == _DragManager)
		{
			_DragManager = new DragManager();
		}
		return _DragManager;
	}

	DragItem _DragItem = null;
}


//  在item身上 - 拖拽出另一个item ,没有下阵一说 
public class Item : MonoBehaviour {
	
	public UISprite _Item; // 要拖拽的item  身上要加
	UIEventListener _UIEventListener = null;
	
	TestData _TestData = null;
	
	void Start () {
		_UIEventListener = _Item.gameObject.GetComponent<UIEventListener>();
		if(_UIEventListener == null)
		{
			_Item.gameObject.AddComponent<UIEventListener>();
			_UIEventListener = _Item.gameObject.GetComponent<UIEventListener>();
		}
		if (_UIEventListener != null)
		{
			_UIEventListener.onPress = Press;
			_UIEventListener.onDrag = Drag;
		}
	}
	/// <summary>
	/// 根据data设置数据
	/// </summary>
	private void SetData(TestData data)
	{
		_TestData = data;
	}
	
	private void Drag(GameObject obj, Vector2 delta)
	{
		DragManager.GetInstance()._DragItem.OnDragDropMove(delta);
	}
	
	private void Press(GameObject obj, bool isPressed)
	{
		if (isPressed)
		{
			// 开始拖拽
			DragManager.GetInstance()._DragItem.OnDragStart(obj, _TestData);
		}
		else
		{
			// 拖拽完毕
			DragManager.GetInstance()._DragItem.OnDragEnd();
		}
	}
}


//  上阵,下阵一说
public class ZhenRongItem : UIDragDropItem {
	
	public UITexture _Head; // 要拖拽的item  身上要加
	UIEventListener _UIEventListener = null;
	
	public long _HeroGuid = -1;
	public int _Pos = -1;
	
	void Start () {
		_UIEventListener = _Head.gameObject.GetComponent<UIEventListener>();
		if(_UIEventListener == null)
		{
			_Head.gameObject.AddComponent<UIEventListener>();
			_UIEventListener = _Head.gameObject.GetComponent<UIEventListener>();
		}
		if (_UIEventListener != null)
		{
			_UIEventListener.onPress = Press;
		}
	}
	/// <summary>
	/// 根据data设置数据
	/// </summary>
	private void Flush(int pos, long heroGuid)
	{
		_Pos = pos;
		_HeroGuid = heroGuid;
	}
	
	private void Press(GameObject obj, bool isPressed)
	{
		if (isPressed) // 设置拖拽的时候 - icon的显示隐藏
		{
			_Head.depth += 2;
		}
		else
		{
			_Head.depth -= 2;
		}
	}
	
	protected override void OnDragDropStart()
	{
		base.OnDragDropStart();
	}
	// 拖拽结束处理
	protected override void OnDragDropRelease(GameObject surface)
	{
		base.OnDragDropRelease(surface);
		List<int> layers = new List<int>();
		layers.Add(LayerMask.NameToLayer(LayerManger.UI));
		List<RaycastHit> hits = RayCast.GetHitResultByScreenPoint(UICamera.currentTouch.pos, layers, UICamera.currentCamera);
		for (int i = 0; i < hits.Count; i++)
		{
			// 判断为未移动,不交换也不下阵
			if (hits[i].collider.transform.parent == gameObject.transform.parent && hits[i].collider.gameObject != gameObject)
			{
				transform.localPosition = Vector3.zero;
				return;
			}
		}
		ShouchengHeroIcon heroIcon = surface.GetComponent<ShouchengHeroIcon>();
		if (heroIcon == null)
		{
			//下阵
			transform.localPosition = Vector3.zero;
			Flush(_Pos, -1);
			// 发送下阵消息
			ClientEvent eve = new ClientEvent();
			eve.AddParameter(_HeroGuid);
			ClientEventManager.GetInstance().ActiveEvent(NTFrame.GameEvent.GameEventID.GEAddShouchengHeroInfo, eve);
			
			return;
		}
		// 换阵
		transform.localPosition = Vector3.zero; 
		long tempHeroId = _HeroGuid;
		Flush(_Pos, heroIcon._HeroGuid);
		heroIcon.Flush(heroIcon._Pos, tempHeroId);
		
		// 发送换阵容消息
		ClientEvent eve1 = new ClientEvent(); 
		eve1.AddParameter(_Pos);
		eve1.AddParameter(_HeroGuid);
		eve1.AddParameter(heroIcon._Pos);
		eve1.AddParameter(heroIcon._HeroGuid);
		ClientEventManager.GetInstance().ActiveEvent(NTFrame.GameEvent.GameEventID.GEExchangeShouchengHeroInfo, eve1);
	}
}

public class DragItem : MonoBehaviour {
	
	private UIRoot _Root;
	
	private UITexture _HeadIcon = null; // icon 这个信息和你拖拽的item一样东西
	
	TestData _TestData = null;
	
	void Awake()
	{
		_Root = NGUITools.FindInParents<UIRoot>(transform.parent);
	}
	/// <summary>
	/// 开始拖拽 - 设置数据
	/// </summary>
	public void OnDragStart(GameObject obj, TestData data)
	{
		if (obj == null)
		{
			return;
		}
		_TestData = data;
		// 拖拽item初始位置是被拖拽的位置
		transform.localPosition = obj.transform.localPosition + obj.transform.parent.localPosition + obj.transform.parent.parent.localPosition + obj.transform.parent.parent.parent.localPosition;
		UITools.setActive(gameObject, true);
		// 下面-根据具体情况-设置数据 
	}
	/// <summary>
	/// 拖拽中 - 更新item位置
	/// </summary>
	public void OnDragDropMove(Vector2 delta)
	{
		transform.localPosition += (Vector3)(delta * _Root.pixelSizeAdjustment);
	}
	/// <summary>
	/// 拖拽结束 - 更新结果
	/// </summary>
	public void OnDragEnd()
	{
		UITools.setActive(gameObject, false); //隐藏obj
		UITools.ClearTexture(_HeadIcon);// 清楚UI
		// 拖拽完毕 刷新结果
		List<int> layers = new List<int>();
		layers.Add(LayerMask.NameToLayer(LayerManger.UI));
		List<RaycastHit> hits = RayCast.GetHitResultByScreenPoint(UICamera.currentTouch.pos, layers, UICamera.currentCamera);
		Item _Item = null;
		for (int i = 0; i < hits.Count; i++) // 鼠标点击的位置 - 检测射线 - 
		{
			_Item = hits[i].collider.GetComponent<Item>();
			if (_Item != null)
			{
				break;
			}
		}

		if (_Item == null)
		{
			return;
		}
		// 拖拽成功 
		// 需要怎么设置就怎么设置数据了
	}
	
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值