From 6ee18886c8af3858de5e97599b23086823d9f320 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 27 Jan 2021 16:30:19 +0800 Subject: =?UTF-8?q?*=E6=9B=B4=E6=96=B0Behaviour=20Designer=E7=89=88?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E5=9C=A8=E6=9C=80=E4=B8=8B=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9C=89BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/Conditionals/HasReceivedEvent.cs | 25 ++++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'Client/Assets/Behavior Designer/Runtime/Conditionals/HasReceivedEvent.cs') diff --git a/Client/Assets/Behavior Designer/Runtime/Conditionals/HasReceivedEvent.cs b/Client/Assets/Behavior Designer/Runtime/Conditionals/HasReceivedEvent.cs index b9c16252..4ce69fba 100644 --- a/Client/Assets/Behavior Designer/Runtime/Conditionals/HasReceivedEvent.cs +++ b/Client/Assets/Behavior Designer/Runtime/Conditionals/HasReceivedEvent.cs @@ -1,5 +1,3 @@ -using UnityEngine; - namespace BehaviorDesigner.Runtime.Tasks { [TaskDescription("Returns success as soon as the event specified by eventName has been received.")] @@ -20,14 +18,18 @@ namespace BehaviorDesigner.Runtime.Tasks public SharedVariable storedValue3; private bool eventReceived = false; + private bool registered = false; - public override void OnAwake() + public override void OnStart() { // Let the behavior tree know that we are interested in receiving the event specified - Owner.RegisterEvent(eventName.Value, ReceivedEvent); - Owner.RegisterEvent(eventName.Value, ReceivedEvent); - Owner.RegisterEvent(eventName.Value, ReceivedEvent); - Owner.RegisterEvent(eventName.Value, ReceivedEvent); + if (!registered) { + Owner.RegisterEvent(eventName.Value, ReceivedEvent); + Owner.RegisterEvent(eventName.Value, ReceivedEvent); + Owner.RegisterEvent(eventName.Value, ReceivedEvent); + Owner.RegisterEvent(eventName.Value, ReceivedEvent); + registered = true; + } } public override TaskStatus OnUpdate() @@ -37,6 +39,13 @@ namespace BehaviorDesigner.Runtime.Tasks public override void OnEnd() { + if (eventReceived) { + Owner.UnregisterEvent(eventName.Value, ReceivedEvent); + Owner.UnregisterEvent(eventName.Value, ReceivedEvent); + Owner.UnregisterEvent(eventName.Value, ReceivedEvent); + Owner.UnregisterEvent(eventName.Value, ReceivedEvent); + registered = false; + } eventReceived = false; } @@ -91,6 +100,8 @@ namespace BehaviorDesigner.Runtime.Tasks Owner.UnregisterEvent(eventName.Value, ReceivedEvent); Owner.UnregisterEvent(eventName.Value, ReceivedEvent); Owner.UnregisterEvent(eventName.Value, ReceivedEvent); + + eventReceived = false; } public override void OnReset() -- cgit v1.1-26-g67d0