Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice

Feedback One year of mobile app development in Unity. Here's my feedback.

Discussion in 'General Discussion' started by jiraphatK, Jun 1, 2021.

  1. jiraphatK

    jiraphatK

    Joined:
    Sep 29, 2018
    Posts:
    296
    Recently, Unity sent me an email asking me whether or not I would recommend Unity to my friends and collegues. I wanted to answer with "it depends on the type of project" but I can only answer with a number score. After an overall evaluation of my experience with the engine, I gave it a 4.

    I've been developing and maintaining an AR app made with Unity for one year now. It's a very UI-heavy app thus my feedback will only contain the scope of mobile and UI.

    Here's the feedback I wrote to Unity after I finished their survey. I figured I could share this with the community since @hippocoder said we dev should be more vocal and constructive.

    • Permission authorization is severely lacking and fractured between platforms. Not to mention lack of callback.
    • AsynGPUReadback does not support OpenGles3.1(aka 90% of Android) Why? I use this to transfer data from GPU --> CPU without hitch eg screenshot, compute buffer, video recording, and machine learning.
    • The video player component is broken. It does not play video smoothly on Android. It stutters, lags and freezes for no reason. The only solution for me was buying AVProVideoPlayer which is prohibitively expensive.
    • Microphone.Start() result in very low-quality sound with weird echoes. You should try to use it and you will notice right away.
    • UGUI is very, VERY slow on mobile. Despite all the optimization I tried to put into it. The layout system is CPU intensive. Lots of garbage generated from enable/disabling UI. The alternative UIToolkit is not production-ready. I am left with this heavy, lackluster, and trap-fill rect transform system.
    • ScrollRect does not scale well when there are lots of data. I also can't modify the scrolling speed without modifying the source code. (inheriting it is not enough)
    • No safe area support built into uGui. Sure, there are free plugins available but I don't understand why this is not built-in since the Screen.SafeArea API has been there for quite some time already.
    • There is no native emoji support. I have to put massive 4k emojis texture in our build then use 3rd party hack to support emoji with textmesh pro
    • The ScreenKeyboard implementation on Android is stupid. If users want to tap the in-game button while the keyboard is shown, they need to tap outside of the keyboard to close it first before they are able to tap that button. This makes form-filling UX on Android very bad. The only solution is ofc paid asset(AGAIN).
    • Doing responsive UI with layout is surprisingly easy. It's a trap though. I can't use it more than one layer anyway because of performance reasons.
    • Nested prefab + uGui is a nightmare. You won't believe how many times I have to fix the weird reordering issue. At some point, I just nuked all nested UI prefab altogether.
    • There is no way to get a specific version of an asset from the Asset Store without contacting the dev. If the new version of the asset was somehow broken, I can at least revert it using git. But to use a specific version of an asset (because of compatibility issue) in a new project is impossible.
     
  2. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    460
    Interesting post. I'm on Unity 2019 LTS.

    KA$HING!

    Worst experience comes when having to handle automatized "redimensioning" or whatever you want to call it, when you're relying on safe area for mobiles... this whole thing is a mess where you often have to manually resave the default display (why can't both values/setups be saved?), especially if you switch between Game and Simulator, until the day you reach the magic balance you were seeking and you decide not to touch anything anymore lest your UI will get broken again, like for example when opening a project and the current scene gets immediately altered by Unity (a wild * appears) because of this automatization. You literally go, no way, I'm reloading my scene thank you and stop screwing up with my UI because of your silly safe-area-screen-border-script-extension-component.
    Or for example when making changes to items included in constrained structures (layout groups), where so many times the whole thing just gets entirely screwed up and good luck trying to intuitively understand what is going on, who controls what and how you can restore stuff. Let's not even mention the automatic alteration of scale on XYZ just because of copy pasting GOs.
    The UI is quite powerful but it's very cryptic too. You better be prepared. That being said, I managed to tame it and have it do what I wanted but that was a long long war between me and Unity that painfully reminds us of its 3D origins.

    Right, that would be quite distressing since they should be easily accessed from the devices your application ends on.

    KA$HING!
    I understand the drive to buy good assets that add something useful, not in acquiring assets that correct problems in Unity.

    You took a look at the overdraw display mode in Scene? Was your UI like, fully thick glowing orange?

    I stopped trying to understand it and opted to reduce its use to a minimum, so I could simply destroy instances instead of trying to tweak anything going too deep into the prefab hierarchy.
    My devops on them is: don't use prefabs until you need them. I make changes to a simple UI GO and turn it into a prefab when I'm satisfied. In prefab mode, the rect is rekt.
    I have IAP cards that are completely crushed but are displayed properly in the scene. I only bring changes to the code, that's all. If I need to do UI changes, I must unpack the item and do what I described above.

    This is so true. Unity should give you the option to download the version you desire and when you want to install and import the extension, tell you that there's this and that version available on your computer and which one do you wish to use.

    My other beef is the absurd conflict between official assets and native packages.
    For example, update IAP through the Services tab (UPDATE button), it's going to cause issues if you've already gone the package route. Do it through the prehistoric although efficient looking Package manager, it will work. Unity can't even resolve automatically such conflicts by keeping up with the option you chose beforehand. If you're using the package manager to install extra stuff, all Unity should be aware of this, including its UI. At least give you a warning or something, like "we detected you opted for blah blah, are you sure you want this that something something?"

    And we're still waiting on the Audio Mixer to be given much needed luv.
    Also, Unity's management of audio files on Android devices that is subpar.
     
    Last edited: Jun 8, 2021
  3. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    460
    I forgot, the Build Settings window sucks as far as Scene management goes. I remember reading the forum a few years ago with people wondering how you were supposed to remove scenes from the list, only to discover that you had to select them and hit backspace. There's not even a X button next to each scene.
    This is ridiculous, the window is all cramped, there are no buttons to pick scenes from the Project's folders, none to remove selected scenes, no way to increase the list's display size, to create custom filters for choosing what scenes to put in the binary, etc., and all you get with a right mouse button click is "remove selection". Quite the exhaustive menu!
    Also this window keeps being displayed on top of everything else in the computer's UI the moment you launch a building, as if it existed outside of Unity. I wish the implied "keep on top" option could be ticked off, just to reduce the annoyance factor to about 0 when doing something else on the computer when waiting for the build to be egged out.
     
  4. xjjon

    xjjon

    Joined:
    Apr 15, 2016
    Posts:
    610
    4 out of 10? or 4 out of 5?

    I only make mobile games and agree with your feedback. The UI performance is horrid. Unity has made leaps forward with URP performance for 3D and there is a huge difference when migrating standard pipeline game to URP. The FPS increase was amazing but basically just allows us to use the rest of resource budget on rendering UI :).

    Menu scene are mostly huge nested hierarchy and the UI layout for 'safe area' is a very fragile set up that requires lots of testing to make sure it does not break each time you add new things.

    One thing we use for testing safe area though is use Firebase Test Lab after each change. You can use it to automate test run on a ton of devices. It takes screenshots of different scenes and parts of the game and then you can look at the screenshots afterwards to detect and changes.
     
    Voronoi likes this.
  5. jiraphatK

    jiraphatK

    Joined:
    Sep 29, 2018
    Posts:
    296
    The overall score is 4/10 - It is not that you can't make games or get the job done with Unity. But this score reflects on my opinion of the performance of Unity as a Game Engine.

    Mobile game dev is 8/10 - Unity continues to be one of the best for mobile game dev for now, minus score from a very heavy UI system.
    AR app 7/10 - A solid platform to build AR apps.

    Other than that The current engine situation is quite shaky. If you are not a long-time Unity user and are not looking in the mobile and AR market, just go learn Unreal because the future there is very bright indeed, while Unity's is a murky dark one with light starting to shine through here and there. Unity has been in the transitioning period since 2018 and will still be in it for at least 2 more years.

    -New render pipelines which aren't quite there yet, but I heard things are starting to get stable in the 2021.2 alpha
    -Lacking official networking support. This had been remedy just recently with MLAPI. I have never used it so I don't know if it's good or not.
    -New UI system is still in preview.
    -Lots of shiny new backbone systems(audio, animation, physics, hybrid renderer, input(with dots support), new Editor Workflow, networking, visual scripting) coming with DOTS, but it is not finished yet while the old systems are in maintenance mode( only bug fixes and minor improvement, no new feature or technologically advancement). This lead to people saying Unity is in limbo.
    -The effort to overhaul the core of the engine from mono to .net 6 is also a "multi-years, multi-forks" effort. Hopefully, this will bring in the performance improvement of .net and reduce the domain reload time.
     
    MadeFromPolygons likes this.
  6. MadeFromPolygons

    MadeFromPolygons

    Joined:
    Oct 5, 2013
    Posts:
    3,974
    Unfortunately unity has actually been in this transition period even longer : since 2017. So we are on 4 years of this now. Inclined to agree regarding murky and uncertain future.
     
    cyangamer likes this.
  7. xjjon

    xjjon

    Joined:
    Apr 15, 2016
    Posts:
    610
    Agree with the feeling of limbo with a lot of the packages. Most of the 'new' things that popped up seem to either die out or go into 'support' mode with no updates. Some examples are Unity analytics, 2D Tilemap, Cloud Diagnostics. Usually 3rd party options are way better when you try to fill those gaps.

    None of them are really big enough reasons for me to look for another engine though. I used to use LibGDX (6~ years ago) for making games and Unity has been a "better" tool in pretty much all regards. And even though LibGDX is the 'simpler' tool, there are still tons of great games made on it: https://libgdx.com/showcase/

    Are there any reasons you would stop using Unity and look for something else?
     
  8. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    460
    Only if another engine had all you need for you project, was stable, known in the industry, with a great support or large community enhancing it and came out of the box with all the necessary tools without trying to be too much of everything at once.
    Unity is very good and people like it so that's why they're pissed off that the tool they'd want to appreciate even more seem to disappoint them here and there.
     
  9. Murgilod

    Murgilod

    Joined:
    Nov 12, 2013
    Posts:
    10,128
    I'd say the transition really started around 5.x when loads of the engine was outright replaced and Unity announced their big plans going forward, and that was, what, 2015?