NodeCanvas Forums › General Discussion › [Feedback] Our AppleArcade Game
Hello,
I’m here to improve NodeCanvas, giving my feedback after 1 year and half working on a successfull AppleArcade game releasing in the end of this month.
I worked for 3 years now with NodeCanvas, with always sucessfull project because of it (really).
But I also found some things not working in my flow and for my project, and here are my feedback:
/////UPDATE 1/////
Hello again,
Thank you for your positive feedback as well as all your suggestions! š
1. Would making it cache and consume a flag instead of using YieldReturn (as we’ve previously discussed) would work for you? I was thinking of doing this as an option for all conditions that utilize YieldReturn.
2. Adding anchor points on connections is something already in the TODO list š
3. Can you please share a bit more information regarding this issue here?
4. In v3 there is the option to load graphs Async on a separate thread. This can work as an alternative solution to pooling, but of course not always possible or the same. Have you used the Async option (found on GraphOwner inspectors) as of yet?
5. Also in v3 :), there is the option to update graphs (GraphOwners) manually. With this option (GraphOwner inspector -> Update Mode -> Manual), the MonoManager is not used or required. Have you seen or used this option?
6. Yep, Async load of SubGraphs (instead of only root graphs) is in the roadmap.
7. This has been requested more than once in the past so maybe it is something people need after all.
8. Action OnExecute is indeed called before OnUpdate and on the same frame. Can you please clarify what is the issue you faced with this? š
9. I agree.
10. But why is that a problem considering that NC is a Unity asset and I don’t foresee the ability to use it outside of Unity.
11. Yes, more refactoring options (both as the new editor refactoring tool as well as with attributes is on the way (hopefully for the next version too).
12. Do you mean an FSM node that calls a list of actions when the FSM stops (or exits)? Regarding Parallel node in BT, do you mean a Parallel Sub-Graph BT node? In BTs there is also the Parallel Composite node, which can potentially be used to run children in parallel (be them anything, even Sub-BTs, or Sub-FSMs).
13. Thank you once again for your feedback and suggestions above!
Join us on Discord: https://discord.gg/97q2Rjh
Hey !
1. it will not work as explicated in my other thread. There are situations where the callback is not yet added, and you will miss the message. I strongly suggest a pool of incoming message, and check in this pool if the message was sent between 2 graph update. Care you can’t throw the pool after Graph update, because intern message will be directly throw and so not available for next update.
You need 2 buffer, 1 buffer for last sent messages, 1 for current available messages, each time you send a message, you add them to the last sent message. Before updating a graph, you need to swap buffer from last sent message to current available messages. It’s a bit a mess, but it ‘sĀ what we found to be order independant.
And if you want all graph to be order independant, you need to do the swap right before ALL graph update (so MonoManager can do that.. I suppose ^^).
3. Dirty blackboard in scene don’t have newly added variables. Causing a lot of problem. Same things if you delete variables, reorganize or whatever. There are all strange and non intuitive behaviour (some times, all variable values are shift from variables). What I personaly expect: each blackboard variables have an ID (like a script have), reorganizing the blackboard doesn’t dirty those variables, adding a value doesn’t dirty other variables, deleting is the same… What we had to do to support level designer to override/modify value, is to have a script which can override a blackboard value on Awake. Dirtying the script doesn’t matter for Unity.
4. Yes I used it with the pooling system (best of 2 worlds). And hacked NestedFSM to get from pool. But to be sure NestedFSM / SubBT are working with pooling, I hacked all of them to retrieve Graph from the pool.
5. Yes there is that option. And in fact we would have to create our own FSMOwner. But Graph still had reference to runtime, when it really don’t have to (I cut all dependency between Graph and Runtime).
8. Yes this is a touchy point. To secure execution order, what I believe is the best is to have this sort of architecture :
-All entering Action during this update are executed
-All updating Action during this update are executed
– All exiting Action during this update are executed
A bit like Unity does with Awake/Start/Update during a frame.
Instead of :
-For every graph update -> execute OnEnter/OnUpdate/OnExit
Maybe this point is difficult to have because BT are not the same as FSM and so we can’t do this.
10. Some of us want to have this on a server without Unity. But yes throw this point, it’s not really a blocking point.
12. Yes for the first point. For BT, we can have parallel sub graph And parallel ActionTask, like FSM. In fact, all graph have to be defined with some parallel Node, and parallel Graph running with them. It’s a good principle when working with this sub graph pattern.
I added other points in the first message(^^)
Hello,