EasyTouch Broadcast messages选项在js和c#下的用法

easytouch传递消息到脚本中的方法:


如果使用js写代码,需要勾选Broadcast messages选项,other receiver选择接收消息的gameobject。因为在js里没法像c#那么方便的使用delegate,所以必须使用unity的内部消息机制来向绑定js脚本的gameobject发消息。

如果是c#代码,就不要勾选Broadcast messages选项,否则当disable c#脚本时,easytouch依然能向脚本发消息(因为指定了other receiver,只要选择了 Broadcast messages方式就会使用unity内部消息机制了)。

官方的解释:

EasyTouch is set by default to send messages by C # events. In javascript it 's impossible or very

difficult to use C# Delegates, we must use the internal broadcast messages of Unity. 



具体表现是,我勾选了Boradcast messages选项,指定了消息接收gameobject。

c#脚本如下


void OnEnable()
	{
		EasyTouch.On_TouchStart += On_TouchStart;
		Debug.Log("OnEnable");
	}
	// Unsubscribe
	void OnDisable()
	{
		EasyTouch.On_TouchStart -= On_TouchStart;
		Debug.Log("OnDisable");
	}
	// Unsubscribe
	void OnDestroy()
	{
		EasyTouch.On_TouchStart -= On_TouchStart;
		Debug.Log("OnDestroy");
	}
	// Touch start event
	public void On_TouchStart(Gesture gesture)
	{
		Debug.Log( "Touch in " + gesture.position);
	}


取消这个脚本后(OnDisable执行了),touch事件依然能收到(On_TouchStart依然执行)。


看下EasyTouch.cs里CreateGesture()方法里的这两句:

if (useBroadcastMessage){
				SendGesture(message,gesture);
			}
			if (!useBroadcastMessage || isExtension){
				RaiseEvent(message, gesture);
			}

如果选择Broadcast messages选项了,则走第一个分支(unity的sendmessage机制),否则走的是event机制(c#的delegate机制)。

这块如果不看文档还真是容易用岔了,也是因为easy touch支持js c#两种模式导致的。



明显感觉还是c#的机制好,首先Broadcast messages只能指定一个receiver,如果消息要发到多个对象里去还要做其他处理。其次event模式更加灵活些,不需要在editor里指定目标,回调在代码里指定,易于绑定/解绑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值