Search Unity

Motion Controller

Discussion in 'Assets and Asset Store' started by Tryz, Feb 21, 2014.

  1. cygnusprojects

    cygnusprojects

    Joined:
    Mar 13, 2011
    Posts:
    767
    Great! Will help a lot, that's for sure.
     
    Tryz likes this.
  2. magique

    magique

    Joined:
    May 2, 2014
    Posts:
    4,030
    I'm loving all the new stuff. My only criticism would be that the levitate self looks more like he's falling than rising up. I think it has to do with the fact that he's hunched over.
     
    Tryz likes this.
  3. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    I think we can file that under "limitations of having to use free animation clips." :)
     
  4. nathanjams

    nathanjams

    Joined:
    Jul 27, 2016
    Posts:
    304
    Hey, @TeagansDad

    With that code that you gave me for syncing Ootii and IP stats, when your player's health reaches zero, in IP, did you send a command from IP to call a death animation in Ootii, or did the Actor Core somehow deal with it?

    I'll figure it out how to actually do it but if you could point me in the right direction please.

    And thanks again!
     
  5. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    @nathanjams - You're welcome!

    The Actor Core handles triggering the death animation when Health reaches zero. It uses the IAttributeSource to check the Health value, so in this case it ends up just checking the IP stat on the Inventory Player. That's the beauty of using interfaces; as far as the Actor Core is concerned, it is just getting a float value using the key "Health" -- it doesn't care how IAttributeSource is implemented. Tim has provided an implementation in the form of the BasicAttributes component, and I've done implementations for both Inventory Pro and ORK Framework.
     
    nathanjams likes this.
  6. nathanjams

    nathanjams

    Joined:
    Jul 27, 2016
    Posts:
    304
    I hope you don't mind one more question.- might need Tim's insight though.

    I have a simple script that decreases the players thirst over time (one of the scripts I posted before). If their thirst gets below 10 then it applies damage to the player's health. The problem I'm having is when the players health drops to 0 nothing happens. However, If my player is attacked and killed by the Enemy from the demo scene, when his health gets to 0 he dies. Is there a seperate function that is happening in the attack that triggers the death of the player once the health is at 0?

    Any ideas why my thirst damage is not triggering a death for my character?

    Code (CSharp):
    1. using Devdog.InventoryPro;
    2. using Devdog.General;
    3. using Devdog.InventoryPro.UI;
    4. using UnityEngine.Assertions;
    5. using UnityEngine;
    6. using System.Collections;
    7.  
    8.  
    9.  
    10. public class StatOotiiThirst : MonoBehaviour
    11.  
    12. {
    13.     //public CharacterUI characterUI; // Assign in the inspector
    14.     public GameObject player; // Assign in the inspector
    15.     public float thirstDamageAmount;
    16.     public float checkThirst = 10;     //How often the script checks the food value. This also is how often the player is damaged when the food is 10 or below
    17.     public float checkThirstTimer = 0;
    18.     private WaitForSeconds waitTime;
    19.     private IStat thirstStat;
    20.     private IStat healthStat;
    21.  
    22.     void Start()
    23.     {
    24.     }
    25.  
    26.     public void Update()
    27.     {
    28.  
    29.         thirstStat = PlayerManager.instance.currentPlayer.inventoryPlayer.stats.Get("Default", "Thirst");
    30.         healthStat = PlayerManager.instance.currentPlayer.inventoryPlayer.stats.Get("Default", "Health");
    31.         waitTime = new WaitForSeconds(1f); // Create once to avoid GC
    32.         StartCoroutine(DegradeThirstOverTime());
    33.         checkThirstTimer += Time.deltaTime;   // Start Food Timer
    34.     }
    35.  
    36.     protected IEnumerator DegradeThirstOverTime()
    37.  
    38.     {
    39.         yield return waitTime;
    40.         // Decrease stamina by 1 every second. This will auto. repaint any UI that displays this stat.
    41.         thirstStat.ChangeCurrentValueRaw(-.005f);
    42.  
    43.  
    44.         if (checkThirstTimer >= checkThirst && thirstStat.currentValue <= 10) //Check food value has reached 10
    45.  
    46.  
    47.         {
    48.             healthStat.ChangeCurrentValueRaw(thirstDamageAmount);
    49.         }
    50.     }
    51.  
    52. }
    53.  
     
  7. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    @nathanjams - I'm not in front of a computer right now, but I think that the death animation is started by the Actor Core in the function that applies combat damage. I'm pretty sure it doesn't monitor the Health stat in an Update() function. You'll have to check though.

    What I would do is apply all changes to the player's vitals (Health, Mana, Thirst, Hunger, etc) via the Actor Core. This keeps your design consistent and modular. So the InventoryProAttributeSource is the only component that ever accesses those stats using the Inventory Pro API. This gets back to the purpose of interfaces -- they allows you to abstract your implementation details. You'll get a much cleaner integration between third party assets if you don't have references to those assets throughout your custom code. So EVERY script you write should be using the IAttributeSource to get or set stat values, rather than getting the Inventory Player and accessing the values there. This would allow you to remove IP at some point in the future and replace it with something else, without breaking all of your code.

    And even if you never replace it, it's a good practice as it protects you from any breaking changes in updated versions. For example, if any of the API functions are changed, you only need to update your code in one class, rather than dozens.

    The Actor Core isn't the only component that will use the Attribute Source, but it's meant to represent the "heartbeat" of the character. Thus any changes to vital stats are applied via the Actor Core, which in turn uses the Attribute Source to get/set values in IP. Thus, you can be certain that any such changes will trigger any events or motions that they should, as it's all handled in one place (Actor Core).

    Obviously the base Actor Core doesn't have methods for any of this other than damage, so you'll need to create your own custom Actor Core that either inherits from Tim's ActorCore in the framework classes, or write your own implementation that implements the IActorCore interface.
     
    Last edited: Feb 22, 2017
    hopeful, Tryz and nathanjams like this.
  8. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    Actually, upon further reflection, I would move all of the logic for degrading the player's thirst value over time into your custom ActorCore class. That time-based degradation is part of that "heartbeat" of the character. Same if you have a hunger stat.
     
    Tryz and nathanjams like this.
  9. nathanjams

    nathanjams

    Joined:
    Jul 27, 2016
    Posts:
    304
    Wow. Thank you for such a quick and detailed response.

    I'm gonna wait a day to tackle this, I'll let you know how it goes.

    Thank you thank you.
     
    TeagansDad and Tryz like this.
  10. nathanjams

    nathanjams

    Joined:
    Jul 27, 2016
    Posts:
    304
    Cool, I just saw this after my last post. That seems a lot more manageable.

    I'll keep you posted.

    Nathan
     
    TeagansDad and Tryz like this.
  11. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    @nathanjams - You're welcome again!

    I noticed a few issues in the code you posted above:

    • You are creating a new WaitForSeconds on each Update () tick, which totally defeats the purpose of "create once to avoid GC" ;-)
    • You're also launching that coroutine every Update () tick as well.
    • You can just check the time.deltaTime on this frame and compare it with that of the previous frame in Update(). Keep track of the total differential and once it hits or exceeds 1, reset that total to zero and deplete the thirst stat by one. Much simpler and more performance, unless I've missed something. :)
     
    twobob and hopeful like this.
  12. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    @nathanjams - I had a quick look at the ActorCore class, and I can give you a few pointers:

    If you look at line the function OnDamaged() on line 190 of ActorCore.cs, you'll see how the weapons apply damage to the character (this function is called from the WeaponCore classes). This is where it checks if the remaining health value is less than or equal to zero; if it is then calls the OnKilled() function which in turn starts the InnerDeath coroutine which is where the death animation is actually run.

    Since you'll be handling the depletion of the Thrist stat from within the ActorCore itself, then you could avoid calling OnDamaged() and just call OnKilled() if subtracting from Thirst reduces it below zero. Note that OnKIlled() takes an IMessage parameter (as does OnDamaged). OnKilled() passes it on to InnerDeath(). So you'll need to pass in a parameter that implements IMessage. However, this message isn't being passed back and forth between combatants (as it is in the Sword & Shield motions), so I don't think the content of the message particularly matters here.

    Have a look at line 387 in WeaponCore.cs for an example of how to assemble a CombatMessage; I think we can ignore most of the fields on it for this purpose, other than perhaps the Defender game object. So we might be able to get away with something as simple as (within your custom ActorCore):

    Code (CSharp):
    1. CombatMessage lCombatMessage = CombatMessage.Allocate();
    2. lCombatMessage.Defender = this.gameObject;
    And then pass that message into OnKilled() when the character dies.

    @Tryz will have to confirm if I'm right about this; I didn't actually try it.
     
    twobob and hopeful like this.
  13. cygnusprojects

    cygnusprojects

    Joined:
    Mar 13, 2011
    Posts:
    767
    Hi @Tryz, just keeping you updated with my progress.
    I replace the Nav Mesh Driver with the NavMeshInputSource and altered my BehaviorTask to pass the target of the task to the Target field of the NavmeshInputSource. Strange things are happening after I implemented this:
    NavMeshInput.png
    As you can see, the path is calculated correctly and the collider of the spider is behind the wall (orange arrow), however the actual mesh (black arrow) did walk through the wall and goes in a straight line for the target. It's puzzling me why the mesh is getting seperated from the collider.
    In case you are wondering how my Actor settings are, I attached them here (sorry guys for triggering some scrolling in the forum :confused:)
    ActionController.png
    Edit: Walking animation is triggered when Checking the use transfrom as suggested, the spider doesn't follow the nav mesh path though.
     
    Last edited: Feb 22, 2017
  14. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Exactly right on this!
     
    TeagansDad likes this.
  15. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Hey @cygnusprojects , please check out this video.

    I go over different NPC movement options and create some custom spider motions in the end.



    Please let me know if this helps (or not).
     
  16. cygnusprojects

    cygnusprojects

    Joined:
    Mar 13, 2011
    Posts:
    767
    Hi @Tryz, thanks for the video! I started watching but a question mark is popping up over my head when you explain Nav mesh Follower, I do understand the approach but in my installation no Nav Mesh Follower (or any other for that matter) is available. I'm sure I downloaded and imported the latest version of your assests (as I did have to redownload anything on the new desktop I'm using). But I'll continue watching in the mean time ;-)
     
    Tryz likes this.
  17. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Oh wow... you're right.

    I think because I typically use Node Canvas to set the destination, I just never added it to my build projects.

    Here's a link to the file and I'll make sure to add it for the next update... wow.
    https://www.dropbox.com/s/hu7i7d8w53cayo8/NavMeshFollower.cs?dl=0
     
    hopeful likes this.
  18. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    Little rant of mine, why do people buy assets with out reading them??? Then blame the developer for there mistakes??

    Just a thought for the PEOPLE who don't read..... I would put the required Motion Controller at the right corner using the Otti orange logo so it sticks out ...Then in front of Archery title Put ADDON : Archery Motion Pack REQUIRED: MOTION CONTROLLER to the right on the front page.

    I know its on the front page...But this is for people who cant read .. Also people stop giving Tim one star for YOUR mistakes.... very unfair to him in my opinion.... Just gets old seeing unfair reviews based on people that can't read... It clearly is all over the page............ But maybe this will help if you where to add ADDON: in front of Archery then to the right add the REQUIRED . it helps with marketing. as well... /rant off.

    PS: I will make something and show you what I mean maybe this will help a little more. for those people. that aren't seeing it. or reading or what ever the issue may be.... regardless this one star needs to stop, as the asset is NOT one star asset .... far from it. I seen one star assets... Sorry just a pet peeve of mine, to see people attacking good assets for stupid reasons, I see it with some games too. On Steam, with EA... drives me nuts.
     
    twobob, AlenH, FargleBargle and 2 others like this.
  19. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,686
    It can't be helped. Humanity is imperfect. But I hear you. ;)
     
    twobob, recon0303 and Tryz like this.
  20. cygnusprojects

    cygnusprojects

    Joined:
    Mar 13, 2011
    Posts:
    767
    Thanks for the script, went for the last proposal in the video and everything seems to be implemented correctly for some strange reason I can see the navmeshagent cilinder follow the path but the actual mesh is still going strait for the target. Some inner voice is telling me it has nothing to do with any of your assets but rather the spider and/or the animations that have been provided. Will redo the testing by adding layer after layer to pinpoint the source of my problem. Keeping you posted! My gratitude for the excellent support you are providing Tim! Highly recomment all you assets!
     
    Tryz likes this.
  21. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    hahaha... I didn't notice the other review until I saw your post.

    I've sold over 100 of them. So, I guess it was bound to happen at least 3 or 4 times.

    I'll add a big orange logo like you said. :)

    BTW... thanks for caring and helping!
     
    reocwolf and recon0303 like this.
  22. cygnusprojects

    cygnusprojects

    Joined:
    Mar 13, 2011
    Posts:
    767
    Now that that is out of the way, hope you feel relieved ;-)
     
    recon0303 likes this.
  23. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Thanks :)

    With that last approach, I don't actually set the "transform.position" at all. It should be the NMA doing that. Do you need to rebuild your nav mesh?

    If you have a small project, send it my way and I'll look.
     
  24. cygnusprojects

    cygnusprojects

    Joined:
    Mar 13, 2011
    Posts:
    767
    I'll first do some tests myself to find out what's happening (and try to learn from my mistakes or strumble upon a bug). If I can't manage I'll send you a link to the actual test project I'm using. Thanks again!
    PS: I did already tried with rebuilding the navmesh so that's something I can already rule out.
     
    Tryz likes this.
  25. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
  26. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    @Tryz and yet you'll still get somebody who buys it without realizing that it requires Motion Controller.
     
    BackwoodsGaming, hopeful and Tryz like this.
  27. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    sorry just annoys me, I see this and feel its unfair , and yes I know it happens but I have a huge opinion and I don't hold back when something pisses me off or I feel people are being unfair to someone who busts there ass for us.. Just being honest.. I did this with another asset, this happen to, and some of these assets are so damn cheap for the work put into them.... Motion Controller saved me a ton of time, and I have a ton of respect for Tim and he deserves it... for what he does. Just saying, and being honest here.. Anyone that knows me on the forums knows I can have a huge opinion some may hate it, some may like it, but I don't care either way. I just like to be fair to people who deserve it. and I respect people in the industry that work hard, I have seen my fair share of lazy people.. lol.
     
  28. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634

    Yup it will sadly. But maybe it can happen less . Who knows. Which is what I have an idea to MAYBE help that I dunno hopefully.
     
    Tryz likes this.
  29. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    The stop is great that should help , and fix that issue, but was thinking of changing the title a little so they don't think its a stand alone archery. Don't have to use just a thought. see image below.
     

    Attached Files:

    reocwolf and Tryz like this.
  30. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    I just can't wrap my head around not doing any research whatsoever before purchasing an asset. Before I buy virtually any asset, I read the description, look at all of the photos, watch or skim a couple of the videos, read at least the three reviews that are displayed by default, and usually skim through the first and last pages of the forum thread. If there's documentation linked to in the description, I'll have a quick glance at that as well.

    Obviously, the more expensive an asset is, the more effort I'll put into researching it. And I still get burned from time to time.

    Seriously, why would anybody spend a non-trivial amount of money on something without putting forth at least a minimal effort to learning a bit about it? Reading is too hard?
     
    FargleBargle and Tryz like this.
  31. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    that was my first thought, took me a long time to buy this one, and a few others . Due to my experience and not thinking about time like I should have, but I still did my research of all the controllers before I bought this one, I don't own any other third person.. I own one first person I bought many years ago but only tried once.. but yes I get burned from time to time we all do, but with all the money we need to spend to make a game, people should be researching, reading.. you would think.... I don't blind buy anything..
     
    Tryz and TeagansDad like this.
  32. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    By the way , Motion Controller and Bolt seem to be working flawlessly going to test Android here very soon, and other devices.. Very happy.. right now:)

    Found a few bugs that would still cause once in awhile for the animations still NOT to work, so about 10% of the time they still didn't but as of today they seem to be fixed. The testing continues.. and seems to work flawlessly ..

    PS: I did not use the Networking in Motion Controller, that don't work. But I think you already knew that, you can talk to me in the future if you like.
     
    hopeful and Tryz like this.
  33. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Totally agree... I work too hard for my money.

    I love you guys. :)
     
  34. nathanjams

    nathanjams

    Joined:
    Jul 27, 2016
    Posts:
    304
    @TeagansDad

    It worked! I had a colleague do all the heavy lifting in implementing your suggestions. Gotta say, that was quite the road map you set out for us! Would have taken us ages to figure this out, but this was literally do this, do that, boom.

    I'll post the code here incase anyone is interested. It's a subclass of the Actor Core, so remove the Actor Core component from your player and add this instead. It's pretty well commented, but feel free to send me a message to clarify anything.

    Once again, big ups to @TeagansDad for going way way way beyond.

    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using com.ootii.Actors.LifeCores;
    5. using com.ootii.Actors.Combat;
    6.  
    7.  
    8. public class MyCustomActorCore : ActorCore {
    9.  
    10.     // Attribute identifier that represents the thirst attribute
    11.     public string _ThirstID = "Thirst";
    12.     public string ThirstID
    13.     {
    14.         get { return _ThirstID; }
    15.         set { _ThirstID = value; }
    16.     }
    17.  
    18.     public float thirstDamageAmount = 0.05f;    //How much damge is taken when low thirst
    19.     public float checkThirst = 10f;            //How often the script checks the thirst value. This also is how often the player is damaged when the thirsty
    20.     public float thirstAmount = 1f;            //Decrease rate of thirst
    21.     private float checkThirstTimer = 0f;
    22.     private float thirstStat;
    23.     private float thirstThreshold = 10f;
    24.  
    25.     // Attribute identifier that represents the thirst attribute
    26.     public string _HungerID = "Hunger";
    27.     public string HungerID
    28.     {
    29.         get { return _HungerID; }
    30.         set { _HungerID = value; }
    31.     }
    32.  
    33.     public float hungerDamageAmount = 0.05f;    //How much damge is taken when low hunger
    34.     public float checkHunger = 10f;            //How often the script checks the hunger value. This also is how often the player is damaged when the hungery
    35.     public float hungerAmount = 1f;            //Decrease rate of hunger
    36.     private float checkHungerTimer = 0f;
    37.     private float hungerStat;
    38.     private float hungerThreshold = 10f;
    39.  
    40.     // Use this for initialization
    41.     void Start () {
    42.      
    43.     }
    44.  
    45.     // Update is called once per frame
    46.     void Update () {
    47.         thirstStat = AttributeSource.GetAttributeValue(ThirstID);
    48.         hungerStat = AttributeSource.GetAttributeValue(HungerID);
    49.  
    50.  
    51.         checkThirstTimer += Time.deltaTime;
    52.         if (checkThirstTimer >= checkThirst)
    53.         {
    54.             DegradeThirst();
    55.             checkThirstTimer = 0;
    56.         }
    57.  
    58.         checkHungerTimer += Time.deltaTime;
    59.         if (checkHungerTimer >= checkHunger)
    60.         {
    61.             DegradeHunger();
    62.             checkHungerTimer = 0;
    63.         }
    64.          
    65.     }
    66.  
    67.     //Damage player without any damage animations
    68.     void Damaged(float damaged)
    69.     {
    70.         float lRemainingHealth = 0f;
    71.         CombatMessage lCombatMessage = CombatMessage.Allocate();
    72.         lCombatMessage.Defender = this.gameObject;
    73.  
    74.         lRemainingHealth = AttributeSource.GetAttributeValue(HealthID) - damaged;
    75.         AttributeSource.SetAttributeValue(HealthID, lRemainingHealth);
    76.  
    77.         if (lRemainingHealth <= 0)
    78.         {
    79.             OnKilled (lCombatMessage);
    80.         }
    81.     }
    82.  
    83.  
    84.     protected void DegradeThirst()
    85.     {
    86.         // Decrease thirst by amount set in inspector
    87.         if (thirstStat > 0)
    88.             thirstStat -= thirstAmount;
    89.         AttributeSource.SetAttributeValue(ThirstID, thirstStat);
    90.  
    91.         if (thirstStat <= thirstThreshold) //Check thirst value has reached the threshold
    92.             {
    93.                 Damaged (thirstDamageAmount);
    94.             }
    95.     }
    96.  
    97.     protected void DegradeHunger()
    98.     {
    99.         // Decrease hunger by amount set in inspector
    100.         if (hungerStat > 0)
    101.             hungerStat -= hungerAmount;
    102.         AttributeSource.SetAttributeValue(HungerID, hungerStat);
    103.  
    104.         if (hungerStat <= hungerThreshold) //Check food value has reached the threshold
    105.         {
    106.             Damaged (hungerDamageAmount);
    107.         }
    108.     }
    109. }
    110.  
     
    TeagansDad likes this.
  35. nathanjams

    nathanjams

    Joined:
    Jul 27, 2016
    Posts:
    304
    One Question, @Tryz

    The
    Code (CSharp):
    1.   OnKilled (lCombatMessage);
    So far my player needs have an equipped weapon for a death animation to trigger. Is this because of the lCombatMessage?

    Is there a way to send a command that would call a death animation on a non combatant mode? I should point out that i've yet to make a death animation for the non equipped mode.

    Thanks again, things are moving nicely!
     
  36. Dymental

    Dymental

    Joined:
    Sep 14, 2014
    Posts:
    29
    Don't use a Stop sign! Stop sign is negative and could lead to a no-buy make it an orange sticker right after the title
     
  37. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,686
    Yeah, I tend to go with that. Also, make "Motion Controller" look more like the title of another plugin by changing the font.
     
    TeagansDad and Tryz like this.
  38. cygnusprojects

    cygnusprojects

    Joined:
    Mar 13, 2011
    Posts:
    767
    Tryz likes this.
  39. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    You shouldn't have to have the weapon equipped. For example, in my Spell Casting videos you can see the 3 Jones standing there. They take damage and die while just idle.

    However, the motion needs to be in the MC's list and you'll need to set the Damaged Motion and Death Motion on the Actor Controller. Can you check if they are set?



    The only other logic that I have in the InternalDeath() function of the Actor Controller is that I test if the message's "IsHandled" flag has been checked. If it has been handled, I won't use the Death Motion on the Actor Controller.


    Eventually I'll have to find some non-weapon "damaged" and "death" animations and make those motions part of the base MC.
     
    Last edited: Feb 23, 2017
    TeagansDad likes this.
  40. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    no stop sign gets there attention,,, the orange color will be blended in and will NOT catch there eyes, I do markerting and Logo work . I think that is smart for getting there attention to READ the required Motion Controller part.. He could change the color, but using Orange like the rest will distract it, and blend it in, you want a logo, and other colors to grap peoples attention, and for it to pop off the screen.. for something this important to read first....
     
    TeagansDad and Tryz like this.
  41. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    Tryz likes this.
  42. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Thanks all!

    I'm going to go with this:


    I'm not a fan of the slanty banner and I'm not really sure where I'd put "Add On". I think the top-left name is clean and I'd like to keep it that way.

    Funny... all this for 2% of the users. :eek:
     
  43. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    how would we add stuff to the vault?

    I would like to add Bolt, to the vault for others to use if they like, I know I have not seen many ask for multi player. with MC, but incase some do, would be great for them to have it since out of the box MC don't work right with Bolt .

    I need to do some further testing with Android, since that is the platform we are doing, but it has been PC tested so far.
     
  44. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    hahaha! Trust me, I appreciate your (and others) help more than you know. :)
     
  45. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    That would be awesome.

    Just send me (tim@ootii.com) three quick things:
    1. The .package file for me to put up
    2. Simple text file with basic instruction... nothing crazy
    3. Optional image to go with it (I can create it if needed)
     
  46. recon0303

    recon0303

    Joined:
    Apr 20, 2014
    Posts:
    1,634
    k, easy enough, I want to do some more testing to be sure no more issues, since from the last time we did find some more issues with it not working 10% of the time. Plus I like to do more Android testing, so in case someone wants to add to mobile as well. Soon as this is complete I will send it. Ya no big deal I can make an image is there a certain size that I need for that image?
     
    Tryz likes this.
  47. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    645 x 188

    That's what I used for the Inventory Pro integration and I think it looks good. But, that's really just a suggestion.

    I'm not picky.
     
  48. cygnusprojects

    cygnusprojects

    Joined:
    Mar 13, 2011
    Posts:
    767
    Hi Tim,

    Just wanna to let you know my spider is enjoying exploring the environments using the Action Controller, Motion Controller, Behavior Tree and NavMeshFollower. Movement is all done by the navmesh agent, directions by the behavior tree. Bottom line, I was in trouble because I just was overcomplicating things. Restarted from scratch using your latest video and with the help of the NavMeshFollower component and cleaning up the movement motions (removing the position updates) I realized my goal in about 30 minutes!
    Now finishing of movement with slowing down on arrivals and all is set.
    Thank you for your continues excellent support, happy to be one of your customers!

    Kind regards,
    Wim
     
  49. antoripa

    antoripa

    Joined:
    Oct 19, 2015
    Posts:
    1,163
    My humble opinion is that you should not put any stop signal.
     
    recon0303 and Tryz like this.
  50. Mullmeister

    Mullmeister

    Joined:
    Jul 23, 2013
    Posts:
    4
    I personally can not wait to see your solution.

    I did this a year ago and Tim had to change V2 of MC to remove the space from the motion layers- Bolt and MC do not play nicely together!