Search Unity

Universal Fighting Engine 2

Discussion in 'Assets and Asset Store' started by Mistermind, Jul 20, 2018.

  1. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Thanks for the input! Fuzzy has always used threading. In fact back then, we were able to bypass the limitation by forcing WebGL to use a single core instead of multicore ("Multi Core Support" untoggled under Global Editor -> AI Options).
    What I believe happened was that Unity made it so we can no longer force the code to work on a single core, and due to a limitation on WebGL, this causes all these unexpected behaviors.
    I remember some time ago getting it to partially work (stripping down the AI's possible paths, reducing reaction time, enabling filters) but even then it was limiting. I'll keep looking for answers, but I more than welcome community input on this.
     
    Last edited: May 18, 2022
  2. yewol

    yewol

    Joined:
    Aug 2, 2018
    Posts:
    9

    Thank you Mistermind. It's much appreciated.

    Unfortunately, Fuzzy AI was an essential brick to our game. We planned to work on a fighting simulation game, and without it, it might be overly complex to reach our desired goal.

    Would it be possible to get a refund as we are uncertain to use UFE for this project due to the following challenges please?
     
  3. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Sure thing. Just email me your invoice number and I'll forward it to Unity.
     
  4. louisklimek

    louisklimek

    Joined:
    Jan 11, 2022
    Posts:
    1
    Hi, i own UFE2 Source and wanted to make a WebGL Multiplayer with Photon. I have everything set up and it works but it laggs a lot and is pretty unplayable. Do you have an idea how i could fix that?
     
  5. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Hard to say. Lag can be caused by several factors outside the scope of the engine.
    I ran tons of tests myself, including playing against people on other countries, and didn't find any issues on my end.
    Here is a recording using 2 different browsers (with VPN emulation in one of them):


    Try changing some of the online options as described here, see if it helps:
    http://www.ufe3d.com/forum/viewtopic.php?id=3247
     
    Last edited: May 19, 2022
  6. CMB0301

    CMB0301

    Joined:
    May 19, 2022
    Posts:
    1
    Hey, Mistermind; I've been wondering about your roadmap here, and am hoping you guys can update it if you've made progress on the engine.
    https://trello.com/b/ec0qirJy/roadmap

    Last time you updated things was April 5 last year, so it'd be nice to know how far things have come up to this point.
     
  7. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Sorry about that. That Roadmap is a bit outdated, and several things have changed over the past year.
    The plan now is to release UFE 3 by the end of the year. The new version will support more than 2 players and include several new gameplay modes (including Platform Fighter). I'll update the Roadmap later this week.
     
  8. tirkaroKujo

    tirkaroKujo

    Joined:
    Jul 10, 2017
    Posts:
    10
    Definitely forward to the platform fighter mode, I attempted to convert the prior ufe for a platform fighting game a long time ago but it required way too many inherent physics snafus for it to be worth it, so I'm curious to see how this version will handle it and how in-depth it'll be, def all in on UFE3 now.
     
  9. swantonb

    swantonb

    Joined:
    Apr 10, 2018
    Posts:
    172
  10. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Which version are you referring to? (WebGL/Android/PC)
     
  11. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
    Hey Mistermind. I have a problem related to Multiplayer (Photon), every time I Disconnected from the game the currentFrame always stuck, I found FluxPlayerManager.TryCheckIfInputIsReady() is false, causing some of the features like goto character select, stage select, and most of the engine not working any solution for this?
     
  12. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Are you using the most updated version of UFE 2 (version 2.4.1)?
    http://www.ufe3d.com/doku.php/changelog
     
  13. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
  14. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Update to 2.4.1, and under Global Editor -> Network Options: Synchronization Test, make sure "Desync Action" is set to "Disconnect".
     
  15. AmmarByFar

    AmmarByFar

    Joined:
    Nov 20, 2019
    Posts:
    4
    Has anyone by chance used UFE 2.x pro with the UMA plugin? Does it work?

    UMA 2 - Unity Multipurpose Avatar | 3D Characters | Unity Asset Store

    I have a feeling maybe hitboxes might be the only thing that could turn out wonky considering UMA dynamically changes the avatars shape at runtime.

    Trying to find a nice solution to dynamically change avatar cloths/skins etc and have those changes work within UFE. I know we can set the players prefab in code, just wondering if we really need a prefab for every character or can we use just one dynamically changing one.
     
  16. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    UFE doesn't support UMA out of the box. It is possible to add the support yourself, but you need the Source code for that.

    You can probably do that without the need for UFE. Just add some custom code to your prefabs so it load different outfits.
    Alternatively, you can use UFE's alternative costume options (using prefabs):
    http://www.ufe3d.com/doku.php/character:prefabs#alternative_costumes
     
  17. swantonb

    swantonb

    Joined:
    Apr 10, 2018
    Posts:
    172
    Webgl one. I figured out the issue. I work for a company that is making a game with this asset. Forcing the menu fade game object to be disabled will make it not crash. Really strange though, why would the fading script break the game on webgl particularly, and only when you open the multiplayer menu.
     
  18. nicos445

    nicos445

    Joined:
    Jun 7, 2016
    Posts:
    2
    Hello ! I've been using UFE for a few days now and I was wondering how to smooth out/blend between animations. Like what the animation controller of Unity would do:
    upload_2022-6-17_11-34-15.png
    I understand we need a good reactivity for player inputs but here I care more about having nice smooth visuals than reactivity :)
    I tried to change the default blending durations of the movesets and animations but it doesn't seem to apply blend between animations.
    Thanks in advance for your help
     
  19. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    UFE has its own animation machine that works by overriding some of Unity's Mecanim features:
    http://www.ufe3d.com/doku.php/mecanimcontrol

    As a result, you need to set the blending independently on each animation or use a default value under Character Editor -> Move Sets:
    http://www.ufe3d.com/doku.php/character:movesets
     
  20. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
  21. reverrb

    reverrb

    Joined:
    Aug 12, 2015
    Posts:
    4
    Hello, I'm planning on upgrading from 1.8 to 2.x but was wondering what the main difference is between PRO and SOURCE ? Is there a specific advantage to owning Source versus lets say creating my own custom scripts?
     
  22. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    The pro version has some of the core code compiled. You can still write your own custom scripts, but if you need to alter certain aspects of how the engine operates you might need to upgrade to Source.

    If you intend to update your assets, make sure to follow these procedures:
    http://www.ufe3d.com/doku.php/global:netcode#converting_to_20

    To go through Step 1 (Running UFE Auto Update) you will need version 2.2.1. There is a compacted version of 2.2.1 stored as a unitypackage under "Assets\Engine\ThirdPartySupport\UFE221_UpgradeBuild". Create a new project and extract these files so you can access the upgrade process, then move your converted files back to the newest version of UFE (2.5.0).
     
  23. gamesbydre

    gamesbydre

    Joined:
    Nov 25, 2014
    Posts:
    58
    Hey, Im using UFE pro in Unity 2021.3.5 and when i set the rounds in the global Settings to anything higher than 3, during the game, the speaker still says "Final Round" even though i changed the amount of rounds. For example i set the rounds to 5, and each round from 3- 5 the announcer said "Final round". Is there a way to fix this?
     
  24. gamesbydre

    gamesbydre

    Joined:
    Nov 25, 2014
    Posts:
    58
    Where s the support at for this product?
     
  25. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    You can add these under the file DefaultBattleGUI.cs (open source in all versions)

    Under line 62, add the following variables:
    Code (CSharp):
    1.     public AudioClip round4;
    2.     public AudioClip round5;
    Now under line 615 change the code you see from this:
    Code (CSharp):
    1.             if (this.announcer != null && !this.muteAnnouncer){
    2.                 if (roundNumber == 1) UFE.PlaySound(this.announcer.round1);
    3.                 if (roundNumber == 2) UFE.PlaySound(this.announcer.round2);
    4.                 if (roundNumber == 3) UFE.PlaySound(this.announcer.round3);
    5.                 if (roundNumber > 3) UFE.PlaySound(this.announcer.otherRounds);
    6.             }
    To this:
    Code (CSharp):
    1.             if (this.announcer != null && !this.muteAnnouncer){
    2.                 if (roundNumber == 1) UFE.PlaySound(this.announcer.round1);
    3.                 if (roundNumber == 2) UFE.PlaySound(this.announcer.round2);
    4.                 if (roundNumber == 3) UFE.PlaySound(this.announcer.round3);
    5.                 if (roundNumber == 4) UFE.PlaySound(round4);
    6.                 if (roundNumber == 5) UFE.PlaySound(round5);
    7.                 if (roundNumber > 5) UFE.PlaySound(this.announcer.otherRounds);
    8.             }
    After that, look for the file "BattleGUI" under the Project tab, open the file and you should see 2 new audio options for you to add your own audio to it.

    Please be patient with support requests. We all have priorities, and not every question can have a quick reply.
     
    Last edited: Jul 10, 2022
  26. gamesbydre

    gamesbydre

    Joined:
    Nov 25, 2014
    Posts:
    58
    My apologies, but thanks for the response
     
  27. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
  28. swantonb

    swantonb

    Joined:
    Apr 10, 2018
    Posts:
    172
  29. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
  30. swantonb

    swantonb

    Joined:
    Apr 10, 2018
    Posts:
    172
    Well, i might lose some work that i've done. I was thinking that you could point me in the right script so i could locally extract the fix from the latest version and apply it in my project.

    However, this is a clean version of 2.5.0: https://gyazo.com/968057510041015a5d4b61b90f0d7d77

    And as you can see the issue is still there. But, on your website in demos section i can see it's not happening. I'm a bit confused now.

    edit: i got unconfused now. So the 2d fighter setup works fine, the issue doesnt happen anymore, but the 3d fighter setup still has the issue going on. Any quick fix for it?

    edit2: so setting the game as a 2d fighter also has downsides, as you can see here, there is an invisible wall that the player touches: https://gyazo.com/8c082abe629efd3d10eef817c923a53c This doesnt happen in the 3d fighter setup
     
    Last edited: Jul 18, 2022
  31. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    I see. I'll investigate it and get back to you.

    That's just how the templates were designed. You can adjust that by changing the value for Camera Edge Offset in the WallLauncher move under Move Editor -> Active Frames -> Hit -> Stage Reactions -> Wall Bounce Options.

    You might also want to adjust the character's maximum distance under Global Editor -> Camera Options.
     
  32. swantonb

    swantonb

    Joined:
    Apr 10, 2018
    Posts:
    172
  33. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Last edited: Jul 21, 2022
  34. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    New video tutorials

    How to update UFE from 2.4.1 to 2.5.0:


    Story, Training, and Challenge Mode:
     
    Last edited: Jul 21, 2022
  35. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
    hi, there is there a way to make a certain move to stop the timer, cus I want to make a kinda special attack that needs to stop the timer, I already change some of the source code but have a problem with sync in Online Mode.
     
  36. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    If you are focusing on online play, I highly recommend not tempting with the source code unless you are absolutely sure you know what you are doing. The core source is tied to UFE Netcode, a system that rewind and fast forward deterministic data to optimize the online experience. You can read more about it here:
    http://www.ufe3d.com/doku.php/global:netcode
    TL;DR, the variables are stored every frame (see FluxStateTracker.cs) and through FluxCapacitor.cs, the game saves/loads states based on the inputs received. Also notice that we don't use "float" but instead "Fix64" in order to achieve full determinism.
    Edit: A video tutorial on how to use the online tools will be out soon. Stay tunned.

    That said, there are no particular option atm to freeze time for one character only. You can try playing around with the cinematic options (http://www.ufe3d.com/doku.php/move:cinematics), more specifically the "Opponent Animation Speed" option. With some creativity, it might be able to help.
     
    Last edited: Jul 22, 2022
  37. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
    ok maybe I'm already too far on changing the source code, but maybe you can help me a bit, it's often that the game is stuck (currentFrame stuck) mostly after the round end/Game and turn out the FluxCapacitor.PlayerManager.TryCheckIfInputIsReady() is False, did you have any idea why this happen?

    I have a plan on reverting everything to normal if this bug not fixed in a couple of days but that's means I'm gonna lose some many progress. so for now I'm gonna stick to what have i done.
     
  38. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Its not as simple as picking a function that is locking up your game. What is really happening is the game is desynchronizing and after a domino effect of events happening in one side but not the other, the game can't handle it and it locks up. I recommend using the desync handling tool under Global Editor -> Network Options -> Synchronization Test, and the Variable Log to determine what went wrong and when in your game.
    Just a reminder: We will have a network tutorial soon including the use of the synchronization tools to catch issues in your game.


    Make sure you save any changes in different projects so you don't lose your work. Watch this video:


    And make sure you follow these procedures for importing and changing files:
    http://www.ufe3d.com/doku.php/changelog#how_to_update_your_ufe_build
     
  39. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39

    Hi thank you for the response I will look into that. also, I have a few questions,
    1. in a rare scenario both of the players can hit each other and make a weird knockback, did you know how to prevent this?
    2. I have 121 Characters and every single of them has a special skill, the problem is I need to put 120 different reaction moves (opponent override) and this can be chaotic sometimes (missing the reaction moves on some characters makes it doesn't have animation when get hit) and I still have the plan to add more character and need to add reaction moves to each existing character, it's so time-consuming (not to mention to record them as well) is there a better way to do this? Edit: I was thinking to add another stance (that has all reaction moves) and change it to the 2nd stance but I can't find a way to change the stance to the enemy when a specific hit occurred also to return it to the 1st stance when the move is done or just make it have 2 default stance.
    3. I want Hit Doesn't Kill but for projectile
     
    Last edited: Jul 29, 2022
  40. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Can you be more specific? A video would help.

    Interesting.
    I wouldn't recommend the stance change for that purpose at the moment. There is a code segment under MoveSetScript that is currently poorly optimized and needs revision. Its currently being used as both component starter and stance switch, and with a large roster like yours, that could create some "hic-ups".

    As to the problem itself, I guess I could implement a way to use tags or folders. I'll revisit both of these issues in the next update.

    My bad on that one. That option should have been there. You can actually fix this (Source Version).
    Under Projectile.cs, add this under line 56:
    Code (CSharp):
    1. public bool doesntKill;
    Under MoveEditorWindow.cs, add this under line 3421:
    Code (CSharp):
    1. moveInfo.projectiles[i].doesntKill = EditorGUILayout.Toggle("Hit Doesn't Kill", moveInfo.projectiles[i].doesntKill, toggleStyle);
    Finally, under ProjectileMoveScript.cs, add this below line 109:
    Code (CSharp):
    1. hit.doesntKill = data.doesntKill;
    This fix will also be available in the next update.
     
  41. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
    It does not often happens, I try to find it again and if it occurs i will record it


    currently, that's my only solution, by changing to 2nd stance on opponent override then the next frame run the original reaction moves
    upload_2022-8-1_11-4-30.png
    then on the reaction moves on the last frame change to 1st stance
    upload_2022-8-1_11-5-5.png
    And for the hic-ups itself, actually, I didn't see one, and also there is no spike in profiler either. Edit: Ok, after adding more moves yeah I can see a spike in profiler


    Thank you.
     
    Last edited: Aug 1, 2022
  42. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
    I found a solution for this but not really clean, I just add the 2nd stance attackmove to the main one on MoveSetScript

    MoveSetScript.ChangeMoveStances(CombatStances);

    Code (CSharp):
    1.  if (RmoveSetData.combatStance == CombatStances.Stance2)
    2.             {
    3.                 MoveSetData moveSetData = (MoveSetData)RmoveSetData.Clone();
    4.                 List<MoveInfo> temp = new List<MoveInfo>();
    5.                 temp.AddRange(attackMoves);
    6.                 temp.AddRange(moveSetData.attackMoves);
    7.                 attackMoves = temp.ToArray();
    8.                 moves = attackMoves;
    9.  
    10.                 foreach (MoveInfo move1 in moves)
    11.                 {
    12.                     if (move1.defaultInputs.chargeMove && move1.defaultInputs._chargeTiming <= controlsScript.myInfo._executionTiming)
    13.                     {
    14.                         Debug.LogWarning("Warning: " + move1.name + " (" + move1.moveName + ") charge timing must be higher then the character's execution timing.");
    15.                     }
    16.  
    17.                     foreach (MoveInfo move2 in moves)
    18.                     {
    19.                         if (move2 == null) Debug.LogError("Error: You have an empty move field under " + controlsScript.myInfo.characterName + "'s move set");
    20.                         if (move1.name != move2.name && move1.moveName == move2.moveName)
    21.                         {
    22.                             Debug.LogWarning("Warning: " + move1.name + " (" + move1.moveName + ") has the same name as " + move2.name + " (" + move2.moveName + ")");
    23.                         }
    24.                     }
    25.                 }
    26.  
    27.                 // Reset Animation Components
    28.                 fillMoves();
    29.  
    30.                 System.Array.Sort(moves, delegate (MoveInfo move1, MoveInfo move2) {
    31.                     return move1.defaultInputs.buttonExecution.Length.CompareTo(move2.defaultInputs.buttonExecution.Length);
    32.                 });
    33.  
    34.                 System.Array.Sort(moves, delegate (MoveInfo move1, MoveInfo move2) {
    35.                     if (move1.defaultInputs.buttonExecution.Length > 1 && move1.defaultInputs.buttonExecution.Contains(ButtonPress.Back)) return 0;
    36.                     if (move1.defaultInputs.buttonExecution.Length > 1 && move1.defaultInputs.buttonExecution.Contains(ButtonPress.Forward)) return 0;
    37.                     if (move1.defaultInputs.buttonExecution.Length > 1) return 1;
    38.                     return 0;
    39.                 });
    40.  
    41.                 System.Array.Sort(moves, delegate (MoveInfo move1, MoveInfo move2) {
    42.                     return move1.selfConditions.basicMoveLimitation.Length.CompareTo(move2.selfConditions.basicMoveLimitation.Length);
    43.                 });
    44.  
    45.                 System.Array.Sort(moves, delegate (MoveInfo move1, MoveInfo move2) {
    46.                     return move1.opponentConditions.basicMoveLimitation.Length.CompareTo(move2.opponentConditions.basicMoveLimitation.Length);
    47.                 });
    48.  
    49.                 System.Array.Sort(moves, delegate (MoveInfo move1, MoveInfo move2) {
    50.                     return move1.opponentConditions.possibleMoveStates.Length.CompareTo(move2.opponentConditions.possibleMoveStates.Length);
    51.                 });
    52.  
    53.                 System.Array.Sort(moves, delegate (MoveInfo move1, MoveInfo move2) {
    54.                     return move1.previousMoves.Length.CompareTo(move2.previousMoves.Length);
    55.                 });
    56.  
    57.                 System.Array.Sort(moves, delegate (MoveInfo move1, MoveInfo move2) {
    58.                     return move1.defaultInputs.buttonSequence.Length.CompareTo(move2.defaultInputs.buttonSequence.Length);
    59.                 });
    60.  
    61.                 System.Array.Reverse(moves);
    62.             }
    I Clone the MoveSetData because I thought it may be gonna override the MoveSet File
     
    Mistermind likes this.
  43. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
    Hi, did you know how to make a timer as well on character & stage selection? currently, I'm using PhotonTime to make it sync, maybe u have a better way (i hope I can use UFE.timer as well)? or it can be a feature in your next Update.
     
  44. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Since the character selection is tied to the netcode (operating only under frame delay), a timer can be implemented by using UFE.DelaySynchronizedAction. Something like this:
    Code (CSharp):
    1. // Calls TimeOut function after 25 seconds
    2. UFE.DelaySynchronizedAction(TimeOut, (Fix64)25);
    Notice we need to implicitly declare the Fix64 format so it recognize the value as seconds, otherwise it will see it as frame count instead. If you prefer not using the FPLibrary, just use the value 1500 instead (25 * 60 fps).
     
  45. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
    and for the countdown itself just use local calculation?
     
  46. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Here is a better example of a countdown using Delay Synchronized Action:
    Code (CSharp):
    1. int seconds = 25;
    2. public void Start() {
    3.     // 60 steps = 1 second
    4.     UFE.DelaySynchronizedAction(TimeOutCheck, 60);
    5. }
    6.  
    7. void TimeOutCheck()
    8. {
    9.     seconds--;
    10.     if (seconds == 0)
    11.     {
    12.         Debug.Log("Time Out Code Here");
    13.     }
    14.     else
    15.     {
    16.         UFE.DelaySynchronizedAction(TimeOutCheck, 60);
    17.     }
    18. }
     
    Last edited: Aug 13, 2022
  47. timerace

    timerace

    Joined:
    Feb 27, 2019
    Posts:
    27
    Hello @Mistermind

    Do you plans for some new video tutorials (weapons and networking with mirror)?

    I have the standard version of ufe 2 but unable to add weapons.

    Feature request- Shop system for characters and weapons.
    For example- You get some points with every online battle spend them for new weapons and skins.
     
    Last edited: Aug 21, 2022
  48. MTegarAsta

    MTegarAsta

    Joined:
    Oct 23, 2019
    Posts:
    39
    Hi, I Have a problem with Online Synchronization, the Synchronization is actually great with 300 ping++ and is still kinda playable, but when a player gets stutter (game freezing for a moment) or Alt+Tab (i believe its freezes for a moment when tab back to the game), the game turns out to be not synced anymore (its not often happen though), I already set NetworkSynchronizationAction to Disconnect but its only disconnect at the end of the game. maybe can help?
     
  49. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    A new tutorial on online gaming is coming soon. It will teach how to use UFE netcode along side Photon Unity Network 2:
    http://www.ufe3d.com/doku.php/global:network

    There is no on-going plan to add support for other network solutions, but you can try adding it yourself by adapting the PhotonConnector, PhotonInterface and PhotonMultiplayerAPI scripts.

    As for weapons, I found a tutorial posted on the UFE forums that might help:
    http://www.ufe3d.com/forum/viewtopic.php?id=882

    You should be able to design the store yourself using in-app purchase services (search it in the Asset Store) and UFE features like alternative costumes and unlockable characters.

    That said, we do have plans on adding an addon integration on UFE 3 which will support the sale of in-game items and other exchange services, but this feature won't be available for another year.
     
    Last edited: Aug 22, 2022
  50. Mistermind

    Mistermind

    Joined:
    Jun 8, 2013
    Posts:
    844
    Alt-Tab shouldn't freeze the game if you have "Run in Background" toggled.

    As for the game not disconnecting, perhaps it has to do with package loss and rollback freeze. This particular part of the code certainly needs better connection handlers. I'll run some tests and let you know if there is anything you can add to trigger desync detections more efficiently.