• Advertisement
Sign in to follow this  

Unity Where are all the good GUI libraries?

This topic is 1721 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

You pay the 3D price and get the 3D benefits, but lose a lot of the 2D simplicity.

Aye. 3D strikes me as largely unnecessary for GUIs - plus, you want anything interactive to be flat to the screen anyway...

On PCs, yes, you'd want it to be flat for sane interaction with a mouse cursor. But on a console, you don't have to worry about that with 3D UI since your interaction is via focus and not mouseover, so you can do more interesting stuff in 3D space. Think of the Borderlands 2 inventory UI... not necessarily saying I'm a huge fan, but there's not as much as a usability issue in that case.

Share this post


Link to post
Share on other sites
Advertisement

You pay the 3D price and get the 3D benefits, but lose a lot of the 2D simplicity.

Aye. 3D strikes me as largely unnecessary for GUIs - plus, you want anything interactive to be flat to the screen anyway...

On PCs, yes, you'd want it to be flat for sane interaction with a mouse cursor. But on a console, you don't have to worry about that with 3D UI since your interaction is via focus and not mouseover, so you can do more interesting stuff in 3D space. Think of the Borderlands 2 inventory UI... not necessarily saying I'm a huge fan, but there's not as much as a usability issue in that case.
Well, you have to worry if your game is cross-platform with a PC version like Borderlands 2 is. And even Borderlands 2's PC UI **still** has several bugs in the vending machine and bank/shared stash UIs.

Share this post


Link to post
Share on other sites

You pay the 3D price and get the 3D benefits, but lose a lot of the 2D simplicity.

Aye. 3D strikes me as largely unnecessary for GUIs - plus, you want anything interactive to be flat to the screen anyway...

It's unnecessary?! Come on now we all know making games isn't about what is or isn't necessary, it's about what's AWESOME. No wants to interact with a boring lifeless 2d GUI.

I think the main point here is that the GUI is largely functional only in 2D, but can do some cool 3d animations for the wow factor. I don't think anyone is actually designing a functional 3d scrolling component for example, that would be craziness.

This is the kinda GUI that I want to make very quickly through an editor->

Skip to 3 minutes 30 seconds

To make that should only take 10 minutes tops, if I can't make that in the editor I'm creating for Unity in 10 minutes then I've failed because it took me a whole lot longer than 10 minutes to manually code what you see in that video, and the whole point of the editor is to greatly reduce the manual coding smile.png

Edited by Rorakin

Share this post


Link to post
Share on other sites

See, that looks slick and you might think it's awesome, but I notice 2 things:

  1. The skill popup windows are all exactly the same size. This implies someone has had to hand-make that specific window with some fixed-size labels inside. And it means that if I ever write a skill with too much text, I have to go back and edit the GUI, and that's exactly what you don't want.
  2. Earlier in the video (1:30) I see a portrait with left and right buttons next to it. Again, it's just an implication, but that is the classic thing you implement if you aren't able to support a scrolling selection area (which is usually preferable since a player can more easily compare potential choices).

If I can have cool 3D effects - great. But they're secondary to gameplay and usability, and often these 3D GUIs come with compromises that affect those aspects.

 

And even Borderlands 2's PC UI **still** has several bugs in the vending machine and bank/shared stash UIs.

 

This just reminded me of several UI bugs in XCOM, which uses Scaleform. Trivial things like mouse-overs not working first time, or buttons apparently being unable to stretch to contain their text. Why are these simple things still problems in 2013? Baffling.

Share this post


Link to post
Share on other sites

See, that looks slick and you might think it's awesome, but I notice 2 things:

The skill popup windows are all exactly the same size. This implies someone has had to hand-make that specific window with some fixed-size labels inside. And it means that if I ever write a skill with too much text, I have to go back and edit the GUI, and that's exactly what you don't want.
Earlier in the video (1:30) I see a portrait with left and right buttons next to it. Again, it's just an implication, but that is the classic thing you implement if you aren't able to support a scrolling selection area (which is usually preferable since a player can more easily compare potential choices).

 

Yes this video is a few months old when I was just quickly prototyping my GUI from scratch. The editor I'm making will of course allow 3d animations in addition to the diverse functionality of GUI elements that can scroll / resize / etc. I was just pointing out the 3d stuff smile.png

Edited by Rorakin

Share this post


Link to post
Share on other sites

Might be good, but is Yet Another C++ GUI Library though, ie. what I'm not looking for. (Also, needs proper docs, browsable online. Had to dig through the repo, found at least one dead link to online docs, and an MS Word file which I can't be bothered to download and open.)

Share this post


Link to post
Share on other sites

Well, you have to worry if your game is cross-platform with a PC version like Borderlands 2 is. And even Borderlands 2's PC UI **still** has several bugs in the vending machine and bank/shared stash UIs.

True, I noticed quite a few bugs in the UI as well, but that isn't specific to it being 3D versus 2D. They appeared to be in the business layer mostly. In truth, most of the interactable "3D" UI I've seen in Borderlands (and lots of other games) is just a 2D scene rendered to a texture and slapped on a billboard. I don't think they're using any of Flash's built-in 3D capabilities.

 

This just reminded me of several UI bugs in XCOM, which uses Scaleform. Trivial things like mouse-overs not working first time, or buttons apparently being unable to stretch to contain their text. Why are these simple things still problems in 2013? Baffling.

I'm just as baffled. Pretty much anything dealing with text/fonts in Flash, especially when content needs to be resized, is a major headache. I've never had too much trouble with input handling/detection, so that might just be their particular UI implementation.

Share this post


Link to post
Share on other sites

What about taking any of the C GUI libraries and generating a wrapper for the language of your choice for them?

It couldn't just be a wrapper as the renderer and event handling surely has to cooperate with the rest of the app. So it could be as much extra effort as deciding to abandon the language of choice and develop in C++. I don't even know if it would be practical at all given the need to have control over rendering, which isn't always very practical (eg. in Unity) and I'm not immediately sure which UI libraries do let you inject a renderer of your choice.

Share this post


Link to post
Share on other sites

What about taking any of the C GUI libraries and generating a wrapper for the language of your choice for them?

It couldn't just be a wrapper as the renderer and event handling surely has to cooperate with the rest of the app. So it could be as much extra effort as deciding to abandon the language of choice and develop in C++. I don't even know if it would be practical at all given the need to have control over rendering, which isn't always very practical (eg. in Unity) and I'm not immediately sure which UI libraries do let you inject a renderer of your choice.

libRocket lets you use your own renderer (in fact you basically have to provide your own!), so does OtterUI from the description.

Share this post


Link to post
Share on other sites

Hi folks,

 

I'm the creator of OtterUI.  Thanks for pointing out the old-ass Word doc file - that's a remnant from a time gone by ;)   I've cleaned things up a tad more.  Let me know if you run into anything else.  And, of course, feel free to reach out if you have any questions.

 

Also, l0cal05t is correct - OtterUI does not provide its own built-in renderer.  I provide a rudimentary one just as a starting point, but after that it's up to you integrate it into your pipeline.  That's done on purpose - I got tired of UI libraries competing against my renderers for whatever reason.  Same goes for File IO, audio, and so on.

 

-Graf

Share this post


Link to post
Share on other sites

Alright so I spent most of my weekend reading NGUI code, and I understand the business with the shaders clipping the textures for scrollable panels because to do scrollable panels with Unity camera's would require creating both a separate camera AND a separate layer for EACH scrollable panel. Since only 32 layers are ever allowed in a Unity game, it would not be possible to create an arbitrary number of scrollable panels using cameras in Unity. I was thinking the camera approach would be viable if you set a limit on the number of scrollable panels that are active in the game at any given moment to some number, say 10.

I want to go with this more simple camera based approach for my GUI editor rather than recreate the graphical complexity of using custom shaders, can anyone think of an actual gaming use case that would require more than 10 scrollable panels needing to be used on a single screen in a game? I can't think of any game that does this, so I think I will proceed this way.

 

EDIT: Hmm I just realized the camera approach would work for an arbitrary number of simultaneous scrollable panels if the GUI were 2d only, because then the z axis could be treated as the layer, and separate cameras could be made on different z layers for scrollable panels. Then panel content would be on that z layer but would be contrained by the camera viewport for that layer, but then we lose the ability to do 3d sadly.

Edited by Rorakin

Share this post


Link to post
Share on other sites

 

What about taking any of the C GUI libraries and generating a wrapper for the language of your choice for them?

It couldn't just be a wrapper as the renderer and event handling surely has to cooperate with the rest of the app. So it could be as much extra effort as deciding to abandon the language of choice and develop in C++. I don't even know if it would be practical at all given the need to have control over rendering, which isn't always very practical (eg. in Unity) and I'm not immediately sure which UI libraries do let you inject a renderer of your choice.

libRocket lets you use your own renderer (in fact you basically have to provide your own!), so does OtterUI from the description.

 

Noted. Still, it's far too much work really, when you look at how much you'd have to wrap in the first place before you even start on implementing a renderer.

Share this post


Link to post
Share on other sites

Kylotan, 

 

If you're looking for a great GUI Toolkit you might want to try Coherent UI. With it you are using HTML5, CSS3 and JavaScript to build UI which makes your job much easier. It has a smooth Unity3D integration as well as binding for C# and C++. Ask for a trial from the website and give it a try http://coherent-labs.com.  

Edited by MartinZhel

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
  • Advertisement
  • Popular Tags

  • Advertisement
  • Popular Now

  • Similar Content

    • By BTO_Dev
      Hi Guys, I am developing an Online Multiplayer game and I am creating devlogs every few weeks and it will be great if you could subscribe! I also upload other videos that I assume could help you too  
       
      THANKS FOR READING!
    • By 3dmodelerguy
      So I am building a turn based rogue-like (think CDDA). The game is going to have a very large map (up to 1000's x 1000's) however to alleviate most of that I obviously can't render everything so there will just be render a certain radius around the player and just load in and out data as the player moves.
      The next major system I am prototyping is making interactive tiles destructible and pretty much everything will be destructible besides basic landscape (cars, doors, windows, structures, etc. will be destructible)
      While I am only rendering a certain amount of tiles around the player, I want to keep the amount of colliders active at one time to be as small as possible for performance and currently the tilemap tool I use automatically merges colliders together.
      So instead of creating a separate colliders for each of these tiles and having the destructible behavior tied to that object (which my tilemap tool would allow me to do) I was thinking that I would store an array of all the X and Y locations for the interactive tilemap layer and let the tilemap manage the colliders. 
      Then when I hit a collider on the interactive tilemap layer, instead of of getting the behavior for how to deal with the destruction for that tile from that game object, I would pull it from the array I mentioned earlier based on the tile I attempt to interact with which I already have.
      Does this sound like a good approach? Any other recommendations would be welcomed.
    • By NDraskovic
      Hey guys,
      I have a really weird problem. I'm trying to get some data from a REST service. I'm using the following code:
       
      private void GetTheScores() { UnityWebRequest GetCommand = UnityWebRequest.Get(url); UnityWebRequestAsyncOperation operation = GetCommand.SendWebRequest(); if (!operation.webRequest.isNetworkError) { ResultsContainer rez = JsonUtility.FromJson<ResultsContainer>(operation.webRequest.downloadHandler.text); Debug.Log("Text: " + operation.webRequest.downloadHandler.text); } } The problem is that when I'm in Unity's editor, the request doesn't return anything (operation.webRequest.downloadHandler.text is empty, the Debug.Log command just prints "Text: "), but when I enter the debug mode and insert a breakpoint on that line, then it returns the text properly. Does anyone have an idea why is this happening?
      The real problem I'm trying to solve is that when I receive the text, I can't get the data from the JSON. The markup is really simple:
      [{"id":1,"name":"Player1"},{"id":2,"name":"Player2"}] and I have an object that should accept that data:
      [System.Serializable] public class ResultScript { public int id; public string name; } There is also a class that should accept the array of these objects (which the JSON is returning):
      [System.Serializable] public class ResultsContainer { public ResultScript[] results; } But when I run the code (in the debug mode, to get any result) I get an error: ArgumentException: JSON must represent an object type. I've googled it but none of the proposed solutions work for me.
      Also (regardless if I'm in the debug mode or not) when I try to do some string operations like removing or adding characters to the GET result, the functions return an empty string as a result
      Can you help me with any of these problems?
      Thank you
    • By nihitori
      The Emotional Music Vol. I pack focuses on beautiful and esoteric orchestral music, capable of creating truly emotive and intimate moods. It features detailed chamber strings, cello and piano as the main instruments, resulting in a subtle and elegant sound never before heard in video game royalty-free music assets.

      The pack includes 5 original tracks, as well as a total of 47 loops based on these tracks (long loops for simple use and short loops for custom / complex music layering).

      Unity Asset Store link: https://www.assetstore.unity3d.com/en/#!/content/107032
      Unreal Engine Marketplace link: https://www.unrealengine.com/marketplace/emotional-music-vol-i

      A 15 seconds preview of each main track is available on Soundcloud:
       
    • By RoKabium Games
      Another one of our new UI for #screenshotsaturday. This is the inventory screen for showing what animal fossils you have collected so far. #gamedev #indiedev #sama
  • Advertisement