开发平台:Unity
开发语言:CSharp 6.0
开发工具:Visual Studio 2022
问题背景
public void OnTriggerEnter(Collider collider)
{
output.OnInteractionNoticed += () => OnInteractionTriggered?.Invoke();
}
public void OnTriggerExit(Collider collider)
{
output.OnInteractionNoticed -= () => OnInteractionTriggered?.Invoke();
}
在完成 “订阅 + 注销” 后,订阅响应仍然存在。
问题解决 | 匿名委托
问题根源:匿名委托
lambda 表达式本质是 实例化新的委托类型。导致 订阅 + 注销 均不属于同一实例对象。
使用显式委托实例
public void OnNoticed() => OnInteractionTriggered?.Invoke();
对应的订阅如下:
public void OnTriggerEnter(Collider collider) => output.OnInteractionNoticed += OnNoticed;
public void OnTriggerExit(Collider collider) => output.OnInteractionNoticed -= OnNoticed;