选中脚本Selection<T>

  1. 项目中可能有很多选中的操作,需要对新选中的子节点做一些选中操作,对之前选中的子节点做从选中态到非选中态的转换操作
  2. 很多的操作是在子节点中建立一个委托,然后在父节点批量生成子节点的时候绑定事件,然后还要在父节点中建立一个子节点变量用来记录之前选中的是哪个,以便于后续的操作。
public class Parent : Monobehaviour
{
	Son previous = null;
	
	public void Init()
	{
		for(int i = 0; i < 10; i++)
		{
			Son s = new Son();
			s.SonSelected += sonSelected;
		}
	}
	
	public void sonSelected(Son s)
	{
		if(previous != null) previous.Deselected();
		s.Selected();
		previous = s;
	}
}

public class Son : Monobehaviour
{
	public event System.Action<Son> SonSelected;
	
	private void button_click
	{
		if(SonSelected != null) SonSelected(this);
	}
	
	public void Selected()
	{
		//todo
	}
	
	public void Deselected()
	{
		//todo
	}
}
  1. 现在我们可以把父类中持有的子节点和子类中声明的事件给提取出来,建立一个泛型类Selection
public delegate void SelectedHandle<T>(Selection<T> self, T oldItem, T newItem) where T : class;

public class Selection<T> where T : class
{
	public event SelectedHandle<T> Selected;
	
	private T _item;
	
	public T Item
	{
		get{ return _item;}
		set
		{
			var oldItem = _item;
			_item = value;
			
			if(Selected != null) 
				Selected(this, oldItem, _item);
				
			//CallSelected(oldItem);
		}
	}
	
	//private void CallSelected(T oldItem)
	//{
		//if(Selected != null) Selected(this, oldItem, _item);
	//}
}
  1. 这样我们用起来只需要在父类中创建Selection对象,绑定一次Selected事件。然后将这个Selection对象传递给子类,子类选中的时候子需要对Selection对象的Item属性赋值即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值