Search Unity

  1. Click here to see what's on sale for the "Best of Super Sale" on the Asset Store
    Dismiss Notice
  2. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice

Eliot AI - NEXT GENERATION of AI tools [NOW RELEASED]

Discussion in 'Assets and Asset Store' started by eliot-ai, Oct 18, 2018.

?

What would be the best thing to add to Eliot next?

  1. New type of Nodes based on machine learning

    44 vote(s)
    28.2%
  2. Eliot Hub - place to share your Eliot Behaviours and Skills

    33 vote(s)
    21.2%
  3. Copypasting parts of Behaviours

    5 vote(s)
    3.2%
  4. Embedded UI system for displaying Agent's stats

    13 vote(s)
    8.3%
  5. Support of 2D Sprite-based worlds

    16 vote(s)
    10.3%
  6. Groups and formations of Agents with a single goal

    29 vote(s)
    18.6%
  7. Agent's stats system that can affect the power and other settings of the Skills

    16 vote(s)
    10.3%
  1. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    I wish I could help better... The nodes are gonna be serialized as native unity objects in the new version so the issue's gotta be eliminated by then. Hope you can find the solution soon and share it with us, I'm curious myself to know that causes that behavior.
     
  2. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    Hello, I just purchased this plugin yesterday, just imported it in my project, and have a bunch of compilation error, which is kind of frustrating. Hope the dev can give me a workaround for this soon. I'm using Unity 5.6.6f2.

     
    eliot-ai likes this.
  3. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    ok i have resolved the issue. I had an old package of Pathfinding with the same Node class, and it was clashing with the one with Eliot. I removed that package and all those error are gone.
     
    eliot-ai likes this.
  4. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    Ok i have a little issue. I have my agent with a very simple behavior. (SeeEnemy:no --> WanderAround, yes: RunToTarget). But I only have that agent in the map, so the target is set to himself, but this seems to be the same in your tutorial.

    The problem is that the agent is doing the Walking animation, but the game object is not moving. Somehow, if I check the "Inert" property, that resolve the issue for a little moment and the game object move. Then it stop again after a little while, I uncheck "Inert", and start moving again, then sometimes play Idle animation (then it stop moving which is normal), then walk again until it stop moving again. It stop really at random place on the map, it doesn't seems to be caused by the map.

    I wonder where could be the issue. Anyway let me know if this ring some bells anyhow.

    Eric
     
  5. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    I use NavMesh. I tried with only entry-->wanderaround. That work for a bit, but then same issue, the agent stop but walking animation is still going on. On another run, same issue as before, do this since the start, checking Inert and unchecking it when the problem occurs resolve the problem temporarily. The agent has also a team assigned.
     
  6. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    Debugging. The code below in red return false (so success is false) so instead of returning another random point to move on, it return the current position, which is why it is blocked. Now looking why this API is returning false.


    private void RandomPoint(Vector3 center, float range, out Vector3 result)
    {
    NavMeshHit hit;
    bool success;
    if (_agent.Waypoints != null)
    {
    var point = _agent.Waypoints.RandomPoint();
    success = NavMesh.SamplePosition(point, out hit, 1.0f, NavMesh.AllAreas);
    }
    else
    {
    var randomPoint = center + UnityEngine.Random.insideUnitSphere * range;
    success = NavMesh.SamplePosition(randomPoint, out hit, 1.0f, NavMesh.AllAreas);
    }

    result = success ? hit.position : _transform.position;
    }
     
  7. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    It returns falsebecause it couldn't find a point on the NavMesh that is close enough to the generated random one. You could try to add the following line after that red one:

    if(!success) RandomPoint(center, range, result);

    This will make the code run again and try another random point if the previous one can not be projected onto the NavMesh. You could also try to increase the third parameter of the NavMesh.SamplePosition method (atm it's 1.0f, you can try something like 5f)
     
  8. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    Ok instead for now i do what the Unity example indicates, which is to keep 1.0f but looping 30 time over the call, this seems to give better result, but somehow im still facing the issue, which seems to be caused by another flaw in the code base. I'm spending more time than anticipated on this, I'm a little surprised i would have think this is more battle tested for the reviews and price, anyway, it allow me to learn your sdk and navmesh, not bad i will most likelly need to amend it for my need anyway.
     
  9. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    30 times can't guarantee the correct result. Recursion can though, as it will search until it finds the proper point. It might cause problems like stack overflow though. You can also try this instead. It is not constrained by distance and will return a position on the NavMesh regardless.
     
  10. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    Well, FindClosestEdge can also fail, so in theory, I would need to loop also to be sure it works, in the end, both would work. So, for now, I'm sticking with the current API, but looping 100 times, very unlikely that this will fail.

    Finally, my other problem was because of my lack of understanding of NavMesh. Basically, my baked path was in a place not accessible by the AI (on the roof), and that was making the AI stop when it reaches that position on the floor, but since the Y was never meet for the target, it keeps trying to move towards, but just remains where it is. The solution was to remove those inaccessible paths from NavMesh.
     
    eliot-ai likes this.
  11. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    Hello, I have the same behaviour and skill now setup on my AI as in your tutorial @eliot-ai . works well, and start understanding the power of this sdk :).

    I was wondering, when the AI is in the range to attack, it start attacking , but at the sametime it continue walking towards the target which is a little issue. I would like the AI to stop walking towards the target when he gets in range and start attacking, how would I do that?

    my understanding here is that it continues until it reach the target last target set on the navmesh. like if i increase the melee range (6), i can see when it start attacking, if i move my player away a bit, the AI will go exactly at the position I was when it started attacking.

    any help will be welcome
     

    Attached Files:

  12. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    If you take a look at the settings of your Skill, you should be able to see the "Freeze Motion" option. If you set it to true, that should prevent the Agent from moving while using the Skill.

    That seems correct. Everything seems to be fine int the Behaviour. Have you added the melee attack skill to the Agent?
     
  13. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    Indeed that seems to works, thanks! I thought I had tried it and was not working. In the meantime, I had added SetSpeed(0) in the method LookAtTarget, was that a way to fix it too?
     
  14. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    Is there a way to Copy And paste part of a behavior in the moment in order to create more complex behavior faster?
     
  15. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    This is partly what the "Freeze Motion" option does.

    As of version 1.2.1 (current) you can't do that. However, this feature is already implemented and will be present in the next update.
     
    dontonka likes this.
  16. maydragon

    maydragon

    Joined:
    Aug 27, 2018
    Posts:
    8
    Hello.

    In Eliot AI's store's page it says that Eliot is integrated with Ultimate Character Controller (UCC). Is there a tutorial or demo scene where I can understand how it's done? I read the manual of Eliot and managed to place some AI agents, but I still have no idea how I would properly integrate with UCC.

    Thanks.
     
  17. jstallingssr

    jstallingssr

    Joined:
    Sep 13, 2018
    Posts:
    7
    Hi everyone. Really loving this asset. I've already been able to do so much with it in just a little bit of time. I went through the first tutorials and they were super helpful.Getting the (Legacy) animations working was a little tricky, but I was able to get them to work after some trial and error.

    Now I'm trying to get Mecanim animations working, as I read Legacy is not recommended going forward. And I'm struggling mightily to get Mecanim working. Can anyone point me to a succinct set of instructions for applying these animations to an Eliot unit?

    Thanks!

    Joe
     
  18. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    Hi @maydragon, there is a document in the root folder called "Eliot Integration.pdf". It describes the actions needed to be taken by a user to get the integration up and running. Most of it is already there and you just need to do a few things that can't be done automatically. The integration includes the interation between UCC character and an Eliot agent.
     
  19. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    Hi @jstallingssr, if you could explain what it is what you're struggling with in more details, I'd be able to provide more information.
     
  20. dontonka

    dontonka

    Joined:
    May 15, 2013
    Posts:
    20
    When are you planning to release your next update exactly ?
     
  21. Tethys

    Tethys

    Joined:
    Jul 2, 2012
    Posts:
    672
    Hey there folks. I'm looking for a new AI solution to integrate with UCC. We like the system but kind of hate how motion works in UCC as its all hard wired and hard to get AI to work with it(just moving agents was a major task with other AI packs). Has anyone here successfully integrated Eliot with UCC? How well does this work? This AI looks great, I want to pick it up but I know with UCC's difficult motion system, integrating AI with UCC can be a challenge. Thanks.
     
  22. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    hi @dontonka, I would be really happy to be able to answer that question exactly. I can't tell the exact date but I can list some of the features that are planned and their current status:
    - copypasting parts of behaviours [implemented]
    - zooming in and out in the Behaviour Editor [implemented]
    - realtime visualization of the processes in the behaviour graph, highlighting the nodes and transitions (implemented)
    - nodes are highlighted with different colors depending on the kind of exceptions occurring while the node is running [partly implemented]
    - ability to create custom categories of actions and conditions (implemented)
    - assign a Skill to the node by simply picking one of the created Skills or dragging and dropping a Skill in an appropriate field [implemented]
    - ability to easily create custom nodes [implemented]
    - none of agent components is mandatory so agents don't need to handle and calculate an inventory (or any other component) if it doesn't need to be used [partly implemented]
    - adding arbitrary resources to an agent (health, energy, mana, shield, you name it) and having an option to generate UI for each of them [not implemented]
    - replacing Agent's Settings with a generic attributes holder, elements of which can be accessed through API [not implemented]

    There are a few other features that are being tried out, but I can't tell if they are gonna land themselves in the update. If they are useful and efficient, I'll include them as well.

    Also there is one BIG feature that I do not want to talk about just yet, it's gonna be a really cool surprise :D
     
    Subliminum likes this.
  23. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    What kind of integration are you looking for? If you want an interaction between a UCC character and an Eliot Agent (like damaging each other) - that is implemented. If you want UCC characters to be run by Eliot, that has not happened yet.
     
    Tethys likes this.
  24. jstallingssr

    jstallingssr

    Joined:
    Sep 13, 2018
    Posts:
    7
    @eliot-ai here is my current situation.

    I have an Orc character with Rig - Animation Type - Humanoid in a typical t-pose. Controller and Avatar are assigned. I drag the character into the scene, and press play. Orc idles. So far so good.

    Create a new agent in Unit Factory. Assign Graphics and Ragdoll from Orc prefab. Assign Eliot Behaviour that informs the Orc to wander around (Entry transition invoke motion, wander around). Create agent, and turn off original (source) Orc.

    In Agent inspector, set Animation Mode to Mecanim. Assign Idle animation from Orc's (original/source) prefab (idle animation). Assign Walk animation from Orc's (original/source) prefab (walk animation). In the new Orc Agent/Clone (Orc > __graphics__ > ORC(Clone)), assign the Orc's Controller. Leave all other settings at default.

    When I press play, the Orc idles, but does not walk/wander around. I also get the following error: NullReferenceException
    Eliot.AgentComponents.AgentAnimation.Init (Eliot.AgentComponents.Agent agent) (at Assets/Eliot AI/Eliot/AgentComponents/AgentAnimation.cs:109)
    Eliot.AgentComponents.Agent.Start () (at Assets/Eliot AI/Eliot/AgentComponents/Agent.cs:577)

    Any help would be appreciated, thank you!

    Joe
     
  25. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    Hi Joe, if you are using mecanim, you're supposed to use the relevant options right below the ones that you've probably used. I assume you've used the settings under the Legacy header. You need to use the ones under the Animator header. You don't need to specify the clips, only the names of Animator parameters used for moving forward and sideways (optional).
     
  26. jstallingssr

    jstallingssr

    Joined:
    Sep 13, 2018
    Posts:
    7
    @eliot-ai -

    Well, one thing I figured out is that I needed to manually add the Animation component to the original prefab (it was only showing Transform and Animator by default). So I added the idle and walk animations.

    I also forgot to bake the mesh. :( Doing that got the Agent moving - yay!

    The last I'm trying to figure out is how to have the Agent actually use the proper animations. Right now it is just 'skating' across the mesh. Does anything like amiss to you in my Inspector panels? (This is for root Orc object, and OrcClone inside the Orc gameobject).

    Screen 1 https://app.box.com/s/4h5em0lfpdbjh5dqius6tqhzel7kfwd9
    Screen 2 https://app.box.com/s/f8ndg9hkk72r8im2wwyqv1azacl834jo

    Again, thank so much!

    Joe
     
  27. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    First of all, you don't need to have both Animation and Animator components on your Graphics object. You just need one of them. Looks like you want to stick with Animator. To get it up and running, you need to configure your Animator Controller (currently it's OrcTestController) to bind the animations of moving forward to a float variable (you can call it "Speed"). If you want to use root motion, do that as well for the sideways animation and bind it to another float variable, e.g. "Turn"
     
  28. zKici

    zKici

    Joined:
    Feb 12, 2014
    Posts:
    263
    Hello,

    This may have been asked before,

    Going over the Top Down Shooter I noticed, Soldier (range), Soldier Melee, and StandingSoldier.

    Is Eliot not capable to have both ranged and melee attack for an AI NPC?

    Thank you
     
  29. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    Eliot can handle both in a single behaviour. This can be achieved by simply adding a node that checks the current state. This separation into two behaviours is done to make it simpler to focus on each of them separately as it is very easy to just switch between behaviours at the runtime.
     
  30. Tethys

    Tethys

    Joined:
    Jul 2, 2012
    Posts:
    672
    Thanks for the response. I am looking for an AI solution that moves the characters AND can use the functionality built into UCC NPC's. UCC NPC functionality seems to be written with selling Behaviour Trees in mind - I have had a heck of a time trying to use his NPC with my current AI solution due to the way movement and other stuff is kind of locked down into his proprietary system. Good luck with the integration and I'll watch for it to be complete.
     
    eliot-ai likes this.
  31. jstallingssr

    jstallingssr

    Joined:
    Sep 13, 2018
    Posts:
    7
    Thanks @eliot-ai. Still trying to get this working, but thanks for heading me in the right direction.

    Joe
     
  32. DanielSnd

    DanielSnd

    Joined:
    Sep 4, 2013
    Posts:
    361
    Hi there, I just finished reading the tutorial and I didn't see anything showing how to integrate the skills with existing health/etc code. Is there a tutorial about that that I'm missing? Tried to find something in the manual but so far haven't seen anything related to it.
     
  33. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    If you select a Skill, you should be able to see the options in the Inspector. If you set "Affect Health" to true, and "Health Affection Way" to "Reduce", the skill will use a value between "Min Power" and "Max Power" values to damage the target. You can also heal target by picking "Add" instead of "Reduce".
     
  34. DanielSnd

    DanielSnd

    Joined:
    Sep 4, 2013
    Posts:
    361
    The thing is my player isn't an Eliot AI, my player is my own code with its own health code and its own projectile code. How do I get a Eliot AI Skill to affect my own player health code? Is Eliot AI only for visual programming or can I extend the skill class with my own code so it can talk with my previously existing code for health/projectiles etc? I would also like for my player projectiles to affect Eliot AI's health, how can I communicate in my code with Eliot AI's health? I didn't see any of that in the tutorials and in my quick skimming of the manual also didn't see it so I'm a little confused about it.

    My game is online multiplayer so ideally I would be able to replace all of the "Affect Health" in Eliot with my own health system that is ready for multiplayer syncing, same with my projectile system so that the Eliot Skills can spawn my multiplayer ready projectiles.

    - Edit -

    Finished reading the manual, it seems that what I'm looking for is under "5. Interfaces". So instead of using a skill I would make my own action interface to be executed to attack my player or spawn my own projectile, right? Would be nice to have an example somewhere of an integration with an external health system.

    - Edit 2 -
    Downloaded the project, "IntegrationDamageHandler.cs" seems to show me what I need to let the AI damage my own health code, still need to figure out how to get it to spawn my networked projectiles, looking at the interfaces I found "InventoryActionInterface" and "MotionActionInterface", their method seems to give me a reference to the agent, will experiment with it later to see what I can do with it.

    "IntegrationUccHitscan.cs" seesm to show me what I need to let my own projectiles damage the Eliot AI with: "hitCollider.gameObject.GetComponent<Eliot.AgentComponents.Agent>().Damage(Mathf.RoundToInt(amount));"

    - Edit 3 -
    The projectile code is pretty simple, will actually change my own projectile code to have the same invocation method and make Eliot use it instead of its own projectile.cs, that should solve my projectile spawning problem and I'll be able to use the skill system.

    - Edit 4 -
    Can change the resources.cs to use my regular health code :D nice!
     
    Last edited: May 3, 2019
  35. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    If your character has any MonoBehaviour on it that passes the damage, like void Damage(float), then you can use the name of that method in the "OnApplyMessageToTarget" field in the Skill's settings. The Eliot Agent component itself has a method called Damage, so you can call it and pass the damage.

    You can also use that as an example, maybe that's gonna work even faster since it will utilize the direct method calls instead of using reflection.

    "InventoryActionInterface" and "MotionActionInterface" are the classes that define the groups of actions. The actual actions are inside the "StandardInventoryActionInterface" and "StandardMotionActionInterface" classes. You can extend the code by, for example, creating your own "CustomMotionActionInterface" that inherits from "MotionActionInterface".
     
  36. MastermindInteractive

    MastermindInteractive

    Joined:
    Jun 13, 2014
    Posts:
    89
    Hi I want to integrate an alert cool-down or "Wait" mechanic much like the AI in many games. As an example: The lightning bolt that appears over the head of enemies in Dishonored to show you how alert they are before they begin an attack. Or the exclamation point in Metal Gear Solid. I'm trying to add this wait period to my enemy when he sees the player. Do you recommend using a skill for this? I tried using a skill because it also allows me to add a sound effect and particles, but the enemy just keeps repeating the skill over and over again and running the tasks below it. I want the action to run for a few seconds and then activate everything below it. Is this possible?
     
  37. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    If that waiting action is repeated for a static amount of time every time, the best option is use a Loop with the condition group set to time. Connect the purple transition to a skill that spawns the special effects, and connect the white transition to the first node of the branch below.
     
    MastermindInteractive likes this.
  38. Mohamed-Anis

    Mohamed-Anis

    Joined:
    Jun 14, 2013
    Posts:
    82
    Harlow, general questions on the roadmap for eliot (saw there was one at the end of http://www.eliot-ai.com/).

    1. Support for pathfinding outside of Unity NavMesh?
    2. Custom perception system so as to be able to perceive above and below too (In reference to Tutorial 4 on youtube where the dragon perception height needs to be changed). An API to hook up a new perception system will be nice
    On the whole looks good and intuitive.. though wondering how else this can be extended
     
    Tethys likes this.
  39. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    1. At the moment there is support outside NavMesh. A* Pathfinding Project Pro is supported as well.
    2. With the next update I'm planning to make perception more abstract so that it can be extended and will add more options to it.
     
    Mohamed-Anis likes this.
  40. wood333

    wood333

    Joined:
    May 9, 2015
    Posts:
    716
    On the tutorial the dragon claw init skill by radius does not seem to be working. The claw animation plays, but push power is not applied to all Eliot agents within the radius. We do not understand how to get this working as expected. Are we missing colliders?
     
  41. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    Maybe some of the agents are in the friend team. If so, they won't be pushed unless the skill can affect friends. Also, maybe some agents have too much weight (in the motion settings) - that will also reduce the push power. The skill power affects the push power as well, so if the random value of power turns out to be 0, the agent won't be pushed. If none of this helps, you can share your Skill's settings and I'll take a look.
     
  42. chrisk

    chrisk

    Joined:
    Jan 23, 2009
    Posts:
    691
    Hi, I just bought the asset because Eliot AI Behavior Editor looked very interesting.
    I also have Node Canvas but the NC is too generic and it requires quite a lot of work to set up a simple AI Agent system.
    Basically NC provides Behavior System and there is no concept of Agent System and you have to make your own.
    However, I think NC probably has the best Behavior System out there and it's hard to beat it.

    So, I've been looking for some AI system that both has Agent System and Behavior System and I thought Eliot AI is the perfect Asset I've been looking for.

    After testing Eliot AI for few hours, unfortunately, I find that it still lacks many features.
    Yeah it's relatively a new asset but it will take a quite a while until it becomes useful.

    I know you want to make the best AI system but making Behavior System alone will take a really long time and it will be very difficult to make better it than NC.

    So here is what I would like to ask.

    Instead of working both the Agent and Behavior system at the same time, why don't you focus on the Agent system and make the NC integration (possibly other Behavior system) as an option?

    This will make Eliot AI immediately useful and you can focus on Agent system until you feel that it's solid. And then you can work on the Behavior System that can possibly better than anything out there.

    Agent system will basically provides some cool APIs that external Behavior System such as NC can access.

    Please let me know what you think and I wish the very best.

    Cheers!
     
  43. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    Hi @chrisk, thanks for sharing your thoughts! I am working on both behaviour and agent systems at the same time. My goal is to make it possible to achieve the desired result as quickly and comfortably as possible, in a predictable manner. Also I want it to be universally applicable. Just agent on itself will be of use only to people that can code already. I would greatly appreciate it if you could share what features you would like to see in the behaviour editor. Thanks.
     
  44. chrisk

    chrisk

    Joined:
    Jan 23, 2009
    Posts:
    691
    Hi, thanks for the quick reply.
    Actually, I don't have much request on Behavior System other than to make NC integration.
    I'll probably have more request on Agent system in the short term. ^^

    The first thing I would like to see the Agent Inspector to better organize using groups.
    It has tons of parameters and it's hard to Edit them. Perhaps tabify like the image below will help.
    upload_2019-5-8_21-16-36.png

    I'll let you know once I use more.
    Right now my first task is to set up a simple roaming animal system and I'm struggling a bit. ^^

    BTW, will you support Agent spawner with pooling system? I think it will be quite useful for Agents.

    Thanks.
     
  45. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    I decided to make each agent component a separate monobehaviour. This way the Inspector stays cleaner and you don't need to use all of them at the same time. Furthermore it makes the system more extendable.
    Regarding the pooling, it is already available. Create the waypoints group and you'll see the settings for pooling. Currently it only works by destroying the agents and instantiating new ones, but with the next update it will also work without destroying any objects and reusing the ones that happen to be in the waypoints group already.
     
    Subliminum and StevenPicard like this.
  46. MLipscomb

    MLipscomb

    Joined:
    Oct 14, 2018
    Posts:
    2
    I am enjoying Eliot AI this week, but I just received a StackOverflow exception during runtime. I'll try to work around it, but thought I should post what I saw.

    upload_2019-5-8_17-40-36.png upload_2019-5-8_17-42-22.png

    StackOverflowException
    Eliot.AgentComponents.NavMeshMotionEngine.MoveTowards (System.Nullable`1[T] targetPosition, System.Single moveSpeed, Eliot.AgentComponents.MotionState motionState, Eliot.AgentComponents.AnimationState animationState, System.Single animationFadeSpeed, System.Int32 energyCost, System.Action actionOnNotEnoughEnergy, System.Single& updateTimeVariable, System.Action stopAction) (at Assets/Eliot AI/Eliot/AgentComponents/MotionEngines/NavMeshMotionEngine.cs:370)
    Eliot.AgentComponents.NavMeshMotionEngine.MoveTowards (UnityEngine.Transform targetTransform, System.Single moveSpeed, Eliot.AgentComponents.MotionState motionState, Eliot.AgentComponents.AnimationState animationState, System.Single animationFadeSpeed, System.Int32 energyCost, System.Action actionOnNotEnoughEnergy, System.Single& updateTimeVariable, System.Action stopAction) (at Assets/Eliot AI/Eliot/AgentComponents/MotionEngines/NavMeshMotionEngine.cs:348)
    Eliot.AgentComponents.NavMeshMotionEngine.WalkToTarget () (at Assets/Eliot AI/Eliot/AgentComponents/MotionEngines/NavMeshMotionEngine.cs:193)
    Eliot.AgentComponents.StandardMotionActionInterface.WalkToTarget () (at Assets/Eliot AI/Eliot/AgentComponents/StandardActions/StandardMotionActionInterface.cs:28)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:41)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:51)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Observer.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Observer.cs:58)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Transition.cs:90)
    Eliot.BehaviourEngine.Invoker.Update () (at Assets/Eliot AI/Eliot/BehaviourEngine/Invoker.cs:45)
    Eliot.BehaviourEngine.Transition.Update () (at Assets/Eliot AI/Eliot/BehaviourE<message truncated>
     
  47. wood333

    wood333

    Joined:
    May 9, 2015
    Posts:
    716
    The knock back issue was resolved by increasing the Area Range on the Dragon Claws skill. However, I have one final other issue.

    When I first hit play, one spot of Dragon Fire DoT flame appears on the ground behind the dragon. Thereafter the Fire works correctly, but I always get that one spot of fire on the ground when I hit play.
     
  48. eliot-ai

    eliot-ai

    Joined:
    Oct 3, 2018
    Posts:
    163
    That probably has something to do with your fire prefab settings. Could you please upload a screenshot of what that one extra spot looks like?
     
  49. wood333

    wood333

    Joined:
    May 9, 2015
    Posts:
    716
    DoT Flame spot.JPG

    It's exactly the same as the other flame DoT particles. My particles do not display the flame particle texture, but I am not worried about that.
     
  50. wood333

    wood333

    Joined:
    May 9, 2015
    Posts:
    716
    Quick question: Why is the dragon attacking dead skeletons?
     
unityunity