Search Unity

A new open source GOAP (Goal Oriented Action Planner) for AI

Discussion in 'Assets and Asset Store' started by CrashKonijn, Sep 7, 2017.

  1. CrashKonijn

    CrashKonijn

    Joined:
    Mar 4, 2010
    Posts:
    245
    Hi all!

    For our game we decided to use GOAP to make the AI, but most systems didn't fully comply with our needs so I decided to make our own. The GOAP can be seen in action here.

    The game is a fast paced brawler and it's decision making had to be realtime, unlike the other GOAP systems I found which seemed to be optimized for making decisions every once in a while.

    It's multi-threaded and includes a visualizer to easily see what's going on.

    https://github.com/crashkonijn/GOAP

    I hope it's useful to someone :)

    2017-09-05_10-41-43.png
     
  2. Stevepunk

    Stevepunk

    Joined:
    Oct 20, 2013
    Posts:
    205
    Not sure why this doesn't have more interest..
     
    CrashKonijn likes this.
  3. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,697
    I suspect the issue is that most people here are individuals or small teams who already wear too many hats and are looking for drop-in AI that exhibits the behavior they need straight out of the box. I see that the github has a couple issues reported, so at least some people are using this generous open source gift to the community.
     
    CrashKonijn likes this.
  4. zenGarden

    zenGarden

    Joined:
    Mar 30, 2013
    Posts:
    4,538
    It looks like another Unity Hidden Gem :)
    Does it allow to create individual graphs per AI prefab ?
     
    madrobotMK and CrashKonijn like this.
  5. CrashKonijn

    CrashKonijn

    Joined:
    Mar 4, 2010
    Posts:
    245
    You all are too kind, thanks for making my day!

    Yes, each instance has it's own graph.
     
    eterlan likes this.
  6. SuhelB

    SuhelB

    Joined:
    Nov 4, 2017
    Posts:
    1
    This is great , exactly what I was looking for. Thank you very much for making it available.
     
    CrashKonijn likes this.
  7. IsaiahKelly

    IsaiahKelly

    Joined:
    Nov 11, 2012
    Posts:
    418
    Thanks for sharing all your hard work with the community. I've been wanting to experiment with GOAP in a fast paced prototype of my own, so this will probably come in very handy. Thanks!

    Just out of curiosity, does anyone think the new playables API could be used to create a similar system? It would seem like a perfect fit to me, but I don't know enough about GOAP and playables to be certain.



    Oh and perhaps this thread would have been more successful in the Scripting forum? I also don't know why we don't have a dedicated AI forum. They should really turn Navigation into that, or make it a sub-forum of AI.
     
    Last edited: Feb 27, 2018
  8. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    Does anyone use this? I see that the test doesn't have implemented actions, just a skeleton so I wonder how actions are implemented, and how to keep the precondition stuff unity API free so as to keep it ninja thread friendly.
    Also how is movement implemented? In other goap, move is a precondition of proximity and handled by the core GOAP thing.
     
    bugfinders likes this.
  9. CrashKonijn

    CrashKonijn

    Joined:
    Mar 4, 2010
    Posts:
    245
    I haven't had time to take a look at the playables API but looking at the picture I think something like that would achieve the opposite of what problem GOAP tries to solve; with GOAP you let the system generate the action graph, instead of creating it yourself.

    Unfortunately I'm not aware of any game that actually uses this, other than my own game. I would love the hear if anyone uses it!

    I really should create a better scene, if you have any small game idea that I could quickly prototype with this please let me know!

    The functions used here are all thread save, the result of the preconditions are cached for use during calculations.

    Also, I should probably add this image explaining the life cycle somewhere in the docs as well.

    A GoapAction has a requiredRange variable that's being used to find the best action and the Perform() method will only be called if it's in that range, otherwise it will call the Move() method/callback on the agent until it's within that range :)
     
    one_one likes this.
  10. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    So you use GOAP for a smasher, that's interesting I've only seen utility AI or BT for that sort of games, what type of action chain do you see created by the planner?

    Oh great, GOAP is well suited for building games like Banished so the classical test for that is a logger, a sword smith and a miner. The logger needs an axe to cut trees, the miner needs a pick axe to mine meal, the smith needs wood and metal to forge pick axe and axe.

    Fantastic, it helps a lot! Add the methods in that graph for quick lookup ;)
    What is "clone" in your sword action?
    When you make your game, how do you unit test all that to ensure the actions are using thread safe stuff?

    Where is the a* that finds the best chain of action?
     
  11. IsaiahKelly

    IsaiahKelly

    Joined:
    Nov 11, 2012
    Posts:
    418
    That's actually why I thought playables might be super useful here. From the Unity Manual:

    Advantages of using the Playables API
    • The Playables API allows users to dynamically create blending graphs and control the blending weights directly frame by frame.

    • A PlayableGraph can be created at runtime, adding playable node as needed, based on conditions. Instead of having a huge “one-size-fit-all” graph where nodes are enabled and disabled, the PlayableGraph can be tailored to fit the requirements of the current situation.
    However, I also haven't had much time to study the API yet. So still not sure if it's actually suitable for something like GOAP.

    Yeah, that's exactly how I've seen other GOAP systems demo it, and it works pretty well. The Unity Labs Behavioral AI Research talk also has a nice demo which I love because it basically models the behavior of a game developer (work, eat, sleep). :)

     
    Last edited: Mar 8, 2018
    laurentlavigne likes this.
  12. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    It's weird they'd use GOAP for that sort of Sims behaviour, it's usually handled far more simply by utility AI. GOAP is good for stuff that need planning, reacting to needs is reactive.
     
  13. CrashKonijn

    CrashKonijn

    Joined:
    Mar 4, 2010
    Posts:
    245
    I was anticipating that we needed more actions that what we actually had to use in the end, the example of the visualizer is actually a screenshot of everything we needed for the basic AI. In the end even these couple of actions where more then enough in combination with GOAP to create strong and engaging AI for our particular game. However, certain levels did require some one or two extra actions to be able to handle certain gameplay element, which is where I was extremely happy I choose to use GOAP. Just drop in a couple extra actions on the fly and the system will do it's magic.

    Good idea, I'll see if I can find some time to make a simple version of this with the GOAP as a proper example scene.

    Great idea!

    The GoapAgent has a pool of possible actions that are used to generate the tree. When the GoapAgent generates the action tree for each GoapGoal it will clone that GoapAction with it's settings for actual usage.

    Tbh I didn't, we never got taught any of that during our education. Luckily remembering the difference between what's thread save and what's not is quite easy with unity. Unity will also bestow a great deal of errors on you when you do mix it up. Anyway, in general the functions that are/should be used when customizing a GoapAction should all be thread save.

    It does sound interesting, gonna take a look at it when I find some time.

    Nice, I will definitely a look at this talk!

    Edit:
    I created some tasks based on this topic.
     
    Last edited: Mar 11, 2018
  14. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    Yeah when I was testing GOAP I really liked that part. I'm BT-ing at the moment... :eek: to program and zero surprise.
    How do you encode game state? In a game with only 5 characters GOAP doesn't need clever partitioning I suppose, with 1K unit it was having a bit of trouble, firing up all these distance checks.
     
  15. IsaiahKelly

    IsaiahKelly

    Joined:
    Nov 11, 2012
    Posts:
    418
    It's just a demonstration, but I don't think there's anything weird about using it that way either, and I've seen others do sims like behaviors with GOAP too. There's no real right or wrong way to do these sorts of things. Some may be simpler yes, but there's always trade-offs and the "best" choice is somewhat subjective. Also, how is that kind of simulation any different from say a logger or sword smith?

    You do need to keep performance in mind when using GOAP, and there are a number of ways to optimize it, but it really deepens on your type of game. This system was also obviously designed for small scale scenarios with a focus on speed of actions, and was not optimized for large scale simulation. So keep that in mind.

    There's also some talk about GOAP optimization in the GDC video below. It's also the most hilariously awkward talk I've ever seen. My favorite part is when someone asks a question and the french guy points to himself and says "Me?" :D Love those guys.

     
    Last edited: Mar 12, 2018
  16. CrashKonijn

    CrashKonijn

    Joined:
    Mar 4, 2010
    Posts:
    245
    I don't really encode it, it does however perform best if most data is cached/stored in a DataSet. I have in no way designed/tested it for use in 1k agents, if you have any ideas or would like to create a pull request I'd be happy to work on it with you.

    It has indeed been designed for per-frame decision making, but if some adjustments would improve performance in other cases as well I'd be happy to make some adjustments!

    Nice! Also added to my must watch list ;)
     
    laurentlavigne likes this.
  17. zenGarden

    zenGarden

    Joined:
    Mar 30, 2013
    Posts:
    4,538
    Move your Update calls to a tick() function, that function will be called each number of frames you want per Update().
     
  18. CrashKonijn

    CrashKonijn

    Joined:
    Mar 4, 2010
    Posts:
    245
    You mean number of times per second perhaps? I guess I could move the contents of FixedUpdate() to a Tick() function, one could then easily overwrite FixedUpdate() to remove the Tick() call and call Tick themselves?
     
  19. zenGarden

    zenGarden

    Joined:
    Mar 30, 2013
    Posts:
    4,538
    You can do as you like, on Update() you can call tick with time interval you want , it can be frames per second or some millisecond.
    Some heavy process don't need to be called each frame, for example low level functionality like detection process, raycast etc ...It's a common way to avoid calling process each frame when it is not really needed to get better performance.
     
    laurentlavigne likes this.
  20. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    Very cool. I haven't done anything with it yet because I learn by example, as soon as you put something I can see moving, even simple, I'm sure I'll be able to get started.
     
  21. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    The game I make is a simulation, what optimizations do you think are needed to GOAP 1K animals and about 40 smart agents. By smart I mean able to string together more than 3 actions to reach a goal.
    The video is really educational, and surreal to watch, as my girlfriend commented, they look like video game characters.
    Interesting to see that 20 of actions are used 80% of the time, what a waste, maybe some actions were made to tackle corner cases bugs and the rest to deal with animation transitions. I bet that a sim game uses actions more evenly.
     
  22. IsaiahKelly

    IsaiahKelly

    Joined:
    Nov 11, 2012
    Posts:
    418
    Again, it all depends on your game. There is no simple answer or magic bullet to this. However, the first thing to look at is probably how often you're running the planner. Planning can be expensive, so you should only do it when absolutely necessary (e.g. once every x seconds, instead of every frame). Twitchy games will need to run the planner more often, since the world state is always changing, but large simulation games can probably do it much less frequently.

    I believe the more actions you have in use, the more expensive GOAP gets. So the fewer actions in use the better. I also don't think your view on the number of actions vs intelligence is correct. Besides, AI is all about the perception of intelligence. Players don't actually know or care what's happening behind the scenes. And as Sid Meier once said "There's no point in making smart AI because the player will always assume it's just cheating." :)

    The 20/80 rule basically applies to everything in life, and I don't really view it as a waste here because we're not talking about some huge behavior tree some developer spent hours making by hand. The planner just uses what it needs. ;)
     
    Last edited: Mar 13, 2018
  23. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    These are all generalities so I am wondering... have you actually used GOAP? If you have, do you have anything specific to say in the context of a rimworld or banished type game?
     
    Last edited: Mar 13, 2018
  24. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    I'm trying to make an example for a sim game.
    How do you set as precondition the existence of an object in the scene? for example any tree? I only see preconditions being a test of the current state of the agent that the action is on.
    I see from the throatplayer.cs example that you set the closest target in the UpdateTarget override, is this how the closest tree would be found?
    I see that your goap programmatically sets the actions of an agent. I'd like to make it more designer friendly by having each action a component harvested by the controller, what's the best way to do that?
    what is dataset.Setdata for, in the aiactioncontroller?
     
  25. IsaiahKelly

    IsaiahKelly

    Joined:
    Nov 11, 2012
    Posts:
    418
    Yes, I've used it, but not for your particular use case. So I have no personal experience to speak of. However, your questions have been very broad, so I doubt my answers would have been any less generalizes because every implementation will need to be customized to fit your particular game.

    How to make a Rimworld or Banished type game with GOAP using thousands of agents? The concise "answer" is to optimize the system wherever you can to get the best performance for that many agents.

    However, even after doing this, GOAP might still not be the best option for your game. Banished seems to use a simple (stupid) collection of state machines with no real planning for it's agents. Rimworld seems to be more complex with it's use of AI storytellers, but the actions of each individual agent is probably not very complex (smart) either. Some games even mix GOAP with other types of systems. Having it handle only one aspect of the AI system.

    Remember, GOAP is basically a path finding system for actions. So optimizing the planner is the key to good performance. I also found this article by Jeff Orkin to be very helpful in elaborating further on some of the challenges and concerns of using GOAP.
     
  26. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    Thanks for the elaborate answer and the links. I was testing a few other forms of AI and realized that Rimworld is a Utility AI with that typical elastic behaviors when a character doesn't want to do what you force him to :). I like that individualism, as a player it makes me wonder what each individual is thinking and creates more attachment.
    So I'm implementing a Utility layer driving a BT (Panda) and so far so good. It's lovingly chaotic and given how simple the math is, I'm sure it's very scalable.
     
  27. IsaiahKelly

    IsaiahKelly

    Joined:
    Nov 11, 2012
    Posts:
    418
    @laurentlavigne That sounds like it could work well. I'm still learning about all the different types of AIs, but GOAP does seem to be able to make much more sophisticated plans than a basic Utility system can, but in a large simulation that might not be all that important. You can also mix these systems together to create more depth. For example, Banished seems to use a utility system to choose which simple state machine to run.

    I do however plan to investigate using GOAP in larger simulations, but I suspect I might end up with some kind of hybrid or evolution of the concept. Which seems to have already happened with systems like HTN (Hierarchical task network) and in the paper Threat Analysis Using Goal-Oriented Action Planning found on the GOAP website itself.

    Best of luck with your project!
     
    Last edited: Mar 17, 2018
    laurentlavigne likes this.
  28. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    Thanks!
    Utility is not trivial to tune, it's all about curves and thresholds so this is why you see games like oxygen not included go awry real fast.
    I like the idea of a layered AI that uses different techniques, it seems to work. In fact boids is also an option that I explored and that fooled me into thinking there was intelligence in there. We see very little of the intelligence that drives nature anyway.
     
  29. Ismoh

    Ismoh

    Joined:
    May 3, 2016
    Posts:
    2
    @Crash-Konijn are you still working on this? I am currently working on a RTS/Base Building hybrid, where I want to use GOAP for my AI and I am currently searching for a good "asset". What's the current state of the playable api implemantation? A GUI for this project inside unity would be really awesome. I am going to give your project a try. Am I allowed to use it for commercial use?
     
  30. J0hn4n

    J0hn4n

    Joined:
    May 11, 2015
    Posts:
    24
    sometime ago i implemented goap to a dialogue system, was a simple implementation that reads a json file and created actions, so every character had a internal state and talked about the world state or their own fullfilled preconditions, the usefull thing about this was that i dont need generate dialogue trees and implement new dialogues was just create a new json token in the characters responses file. I think goap its not just IA it can be used to a lot more things than IA.
     
  31. Crouching-Tuna

    Crouching-Tuna

    Joined:
    Apr 4, 2014
    Posts:
    82
    Hi all. I hope @Crash-Konijn (or anyone else) can help with using this. I've never dealt with multithread in Unity (or anywhere!) and since Ninja Thread seems awesome this might be a good experience to do that. Hoping to also move my A* to other thread, and possibly combine the distance calculation cost there too, but that's beyond my simple question today.
    I just have 2 questions:

    1. From the example scene, I've added some things so the AI can actually do simple move and pick up object and do throw to another. Things works, I added a Manager to store all agents in Dictionary<int, GOAPAgent> for lookups.
    But I'm setting the dataSet in Perform(). Is this correct? From KillAction:
    Code (CSharp):
    1.  
    2.             GoapAgent target = Manager.Agents[targetPlayerId];
    3.             target.dataSet.SetData(Effects.IS_GONER, true);
    The problem is, it's getting called multiple times even if I already have these preconditions set up in the KillAction CheckProceduralPreconditions:

    Code (CSharp):
    1.  
    2.             return Manager.Agents[targetPlayerId].dataSet.Equals(Effects.IS_GONER, false);
    3.  
    So in Perform, Is_Goner of the target set to true. Given the dataSet updated, KillAction shouldn't be called again. But then I realized Perform() is just what to do while in that ActiveAction, so the precondition check is only used to generate the ActionPath, not while in that Action. Is that right?
    But this is weird because Distance is checked every frame and the agent can stop when they're in distance.
    For setting other agent's dataSet just one time, when I want to actually perform KillAction, where should I put that, then?
    Or maybe I'm doing it all wrong? I shouldn't be setting other agent's dataSet?
    This multiple called happens in other Actions too like GrabItem and ThrowAtPlayer

    2. Is it even recommended for an agent to check on other agent's dataSet?
    Because I noticed preconditions such as

    Code (CSharp):
    1. Effects.KNOCKED_OUT_PLAYER + targetPlayerId, true
    .. in an agent's personal record of who they've knocked out.
    But shouldn't this be, setting simply the target agent's dataSet to be Effects.KNOCKED_OUT_PLAYER, true ?
    What if an agent is knocked out by another player, and another agent can "kill steal". It's not necessary for a different agent to set true his own Knocked Out PlayerID record, right?

    Cheers!
     
    Deleted User likes this.
  32. Deleted User

    Deleted User

    Guest



    Hi there its been a couple of weeks for me trying to write a simple logic for an AI

    But don't know where to write it

    An elaboration or any help is highly appreciated
     
  33. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    Writing logic on this is really hard. I gave up and instead I am using Panda which has a new GOAP module.
     
  34. looki666

    looki666

    Joined:
    Sep 5, 2013
    Posts:
    79
    In what version it is added ? The Goap module ? Cant seem to find in documentation .
     
  35. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    It should be out but if it's not then GOAP is still in beta so ask Eric directly.
     
  36. looki666

    looki666

    Joined:
    Sep 5, 2013
    Posts:
    79
    Thanks .
     
  37. looki666

    looki666

    Joined:
    Sep 5, 2013
    Posts:
    79
    One small Question , have you tried to implement Goap in some VisualScripting languages like Bolt or Uscript ? Are there any Obstcales ?
     
  38. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    no i haven't because i find these visual graphs harder to do things in
     
  39. NicoFXU

    NicoFXU

    Unity Technologies

    Joined:
    Jun 25, 2016
    Posts:
    4
    Planning is needed when we do not know how to solve the problems the AI is facing with a set of generic rules. Think navigation for instance. Even when the whole AI is designed with a reactive AI tool (behavior tree, state machine, ...), people need to use a dedicated navigation module---most of times based on A*---to solve their shortest path problems. This is because it is nearly impossible to write an efficient shortest path solution based on fixed rules (imagine solving shortest path with a behavior tree!). To solve shortest path problem, we need to consider multiple sequences of future actions, simulate them "in our head", and pick the best. This is, in short, what A* does.

    A* is a planning algorithm. The essence of planning is to consider the effects a different sequences of decisions and to pick the best. Some problems cannot be solved correctly without this form of reasoning. Navigation is an example, but there are others. Resource management is another example: when you have to manage several resources that can be replenished only at specific locations, then it is nearly impossible to write a general rule to decide optimally which resource you should refill next, or if you can ignore resources for now and focus on your main task for a while. You need to simulate what would happen if you make different choices, to see which are viable and which lead you to run out of some resource. Under this light, it makes sense to use planning for the Yolo toy domain. In fact, the frequency at which we need to react is not the important point, the important point is the nature of the problem the AI has to solve, and how good you want your AI to be.

    Other difficult problems that need planning to be solved properly:
    - intelligent exploration,
    - tactical planning (like cutting all routes of exit for the player).

    We will try to make this clear in our upcoming presentation at Unite LA 18. Please come see our progress and our new application to a popular video game.

    - Nicolas Meuleau, Director AI Research at Unity, the French guy in the video.
     
    nirvanajie and Mikael-H like this.
  40. laurentlavigne

    laurentlavigne

    Joined:
    Aug 16, 2012
    Posts:
    6,363
    I'd like to see planning AI that don't require training. You have that?
     
  41. Nihil688

    Nihil688

    Joined:
    Mar 12, 2013
    Posts:
    503
    I've started using this trying to make sense of it all. Has anyone managed to get a more workable examples running? Basically I've managed to make an example working similar to the one in the project but I wanted to add a "move" action where under Perform() I reposition the character to grab whatever item he needs and actually get some real gameplay into it.

    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using SwordGC.AI.Actions;
    4. using SwordGC.AI.Goap;
    5. using UnityEngine;
    6.  
    7. public class MoveAction : GoapAction
    8. {
    9.     private GameObject m_Target;
    10.     private Vector3 m_InitialPosition;
    11.     private float m_Timer;
    12.     private float m_Distance;
    13.  
    14.     public MoveAction( GoapAgent agent, float distance ) : base( agent )
    15.     {
    16.         effects.Add( GoapAction.Effects.REACHED, true );
    17.         cost = distance;
    18.     }
    19.    
    20.     protected override bool CheckProceduralPreconditions( DataSet data )
    21.     {
    22.         m_Target = GameObject.Find( "Player_" + m_TargetPlayerId );
    23.         m_InitialPosition = agent.gameObject.transform.position;
    24.         return base.CheckProceduralPreconditions( data );
    25.     }
    26.  
    27.     public override void Perform()
    28.     {
    29.         m_Timer += 0.001f;
    30.         // Code to perform this action
    31.         agent.gameObject.transform.position = Vector3.Lerp( m_InitialPosition, m_Target.transform.position, m_Timer );
    32.         if( m_Timer < 1 )
    33.         {
    34.  
    35.         }
    36.     }
    37.  
    38.     public override GoapAction Clone()
    39.     {
    40.         return new MoveAction( agent, m_Distance ).SetClone( originalObjectGUID );
    41.     }
    42. }
     
  42. zenGarden

    zenGarden

    Joined:
    Mar 30, 2013
    Posts:
    4,538
    There was a great article by Apex that could be implemented your own way (better multi threaded or run with tick intervals to get query system resource lightweight)
    http://apexgametools.com/learn/apex-utility-ai-documentation/apex-utility-ai-unity-survival-shooter/


    Combined with navmesh the ai is able to position in space around player and other ai efficiently depending on it's class for example like melee, ranged , healer or something else.

    This is what is missing in Unity out of the box compared to Cry Engine or UE4 , EQS and Behavior trees, to design proper ai similar to triple A games (Skyrim, fps games etc ...)
     
  43. Nihil688

    Nihil688

    Joined:
    Mar 12, 2013
    Posts:
    503
    You could do that with GOAP too right?
     
  44. zenGarden

    zenGarden

    Joined:
    Mar 30, 2013
    Posts:
    4,538
    Yep.
     
  45. Nihil688

    Nihil688

    Joined:
    Mar 12, 2013
    Posts:
    503
    Do you have any GOAP implementations that actually work? I'm still trying to debug the OPs original work
     
  46. zenGarden

    zenGarden

    Joined:
    Mar 30, 2013
    Posts:
    4,538
    I made my own Goap and EQS some time ago, but i prefer to use use behaviour tree for fine tuned control.
    There is some others Unity plugins about Goap and there is some free ones also.
     
  47. dlich

    dlich

    Joined:
    Apr 21, 2019
    Posts:
    11
    Hey! Thanks for your contribution! I'm trying to use your implementation in my game, but it's a bit hard without detailed examples. I was using ReGOAP before, but found it to complicated to understand and acting weirdly after updating unity to 2019.2, so I thought I'll give your implementation a try. In ReGOAP, the action itself would make a check to see if it's done, and force the agent to proceed to the next action. Is there a way to achieve this in your goap? I'd also love to see the life cycle image, that you posted above and in the "tasks", however the link to it seems to be broken.
     
  48. xylss

    xylss

    Joined:
    Mar 15, 2017
    Posts:
    3
    i wanted to use this in my project but when I tried to run the example scene, its nothing happened. I'm using unity 2019.3. Thanks.
     
    OhHiDoggie likes this.