• Stars
    star
    559
  • Rank 79,673 (Top 2 %)
  • Language
    C#
  • License
    MIT License
  • Created over 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Flexible way to manage screens with transitions for Unity

ScreenManager

Flexible way to manage your UI with transitions, layers and proper navigation handling for Unity.

Features

  • ScreenEditor inspector
  • but the whole system can be used fully through code
  • Multi-layered stack based navigation ( alertbox > popup > main )
    • Re-usable screen instances
    • Duplication of screens ( popups, alerts )
  • Optimized clean and bloatfree code, no additional libraries required
  • Button-mashing-proof, screens respect their order and animate in/out properly
  • Default input handling using Unity's UI events ( including cancel/back event )
  • Always-on selected button for gamepad and keyboard-aware navigation
  • Spread feature: See all your screens in a grid view for an easier overview and editing
  • Buttons navigation generation
    • Optional focused default button
    • Cancel/back button which is selected when Cancel key is pressed
    • Isolate navigation to the current screen
  • Extendable generic BaseScreen class
    • Including pre-made presets: Animate, Tween, AnimationController
    • Easily create your own type of screen using the BaseScreen class
  • Mobile tested
  • Includes three examples
  • Fully documented code

Gif

Gif

( Note: The inspector window is not forcefully updated, which is why it lags a bit behind )

Screenshots

Screenshot Screenshot Screenshot Screenshot

Sample code

screenmgr.Show("MainMenu");
screenmgr.ShowPopup<Popup>("Alertbox").Message = "Custom Alert Text";
screenmgr.HideAll();

Info

How to use ?

Simply create a new ScreenManager on any canvas element. (Preferably right underneath the main canvas element.)

Ignore the ScreenManager settings for now, let's create some screens.

To start, we can add SimpleTweenScreen under ScreenManager GameObject.

For custom screens: You can either inherit BaseScreen class or any other pre-made classes: AnimatorScreen, Popup, SimpleTweenScreen, TweenedScreen

Once SimpleTweenScreen is added, you'll notice few things :

  • It added a CanvasGroup element
  • It has a lot of strange settings

By default BaseScreen class provides several important settings, these settings are the core of makes the screen work so well :

  • Generation Settings
  • Generate Navigation ( Create explicit navigation so that keyboard/gamepad navigation never leaks to an another screen )
  • Cancel Selection ( Button selected or executed when ESC or back button is pressed )
  • Cancel Selection
  • Hide Current ( Hide previous screen or overlay on top of the previous screen )
  • Keep on Top when hiding ( Keep its drawing order on top when hiding )
  • Layer Priority ( All screens have layers, imagine that an alert box will block all screen changes that are below it but wouldn't block other alert boxes )
  • Default Selection ( Button selected by default when the screen is shown, when left empty : first button found is selected )

You can leave those settings as they are for now, no need for additional configuration.

Once we added SimpleTweenScreen to all our screens, we can define our default screen that's going to be open on run.

Go to ScreenManager ( Shortcut Ctrl+Alt+T or Window/Select ScreenManager in the menu )

Select your SimpleTweenScreen in the Screens section. Once selected you'll see a button named "Set Default" appear.

Click on it, it will set that screen as the default/main screen.

ScreenManager

Now that's done we can pass to setting up our buttons.

There's two ways to setup the buttons :

Button Button

You can either show a screen by its name, or by it's GameObject reference.

( Tutorial to be finished )

Contribution

There's always more to add, so if you want to help then feel free to contribute !