using UnityEngine; using System.Collections; public abstract class AbstractUi : MonoBehaviour { private TweenScale SubMenuTween; private GameObject LastMenu; private Vector3 OriginalScale; public enum Axis { X, Y, Z }; private float TweenDuration = 0.2f; protected void Start() { } protected void openSubMenu(GameObject subMenu, Axis scaleAxis) { subMenu.SetActive(true); Vector2 finalScale = new Vector3(subMenu.transform.localScale.x, subMenu.transform.localScale.y, 1); switch (scaleAxis) { case Axis.X: subMenu.transform.localScale = new Vector3(0, subMenu.transform.localScale.y, subMenu.transform.localScale.z); break; case Axis.Y: subMenu.transform.localScale = new Vector3(subMenu.transform.localScale.x, 0, subMenu.transform.localScale.z); break; default: subMenu.transform.localScale = new Vector3(subMenu.transform.localScale.x, 0, subMenu.transform.localScale.z); break; } SubMenuTween = TweenScale.Begin(subMenu, TweenDuration, new Vector3(finalScale.x, finalScale.y)); SubMenuTween.method = UITweener.Method.BounceIn; } protected void closeMenu(GameObject subMenu, float scaleX, float scaleY) { if (LastMenu == null) // prevents multiple calls to close window while one is still animating. { OriginalScale = new Vector3(subMenu.transform.localScale.x, subMenu.transform.localScale.y, 1); TweenScale.Begin(subMenu, TweenDuration, new Vector3(scaleX, scaleY)); SubMenuTween.eventReceiver = gameObject; SubMenuTween.method = UITweener.Method.EaseIn; SubMenuTween.callWhenFinished = "onSubMenuTweenClose"; LastMenu = subMenu; } } public void onSubMenuTweenClose() { LastMenu.SetActive(false); LastMenu.transform.localScale = OriginalScale; LastMenu = null; } }
using UnityEngine; using System.Collections; public class HeadsUpUi : AbstractUi { public GameObject MenuUi; private TweenScale MainMenuTweenScale; // Use this for initialization void Start () { MenuUi.SetActive(false); } // Update is called once per frame void Update () { } public void OnMenuButtonClick() { if (!MenuUi.activeSelf) openSubMenu(MenuUi, Axis.Y); else closeMenu(MenuUi, MenuUi.transform.localScale.x, 0); } }
using UnityEngine; using System.Collections; public class MenuUi : AbstractUi { // Use this for initialization public GameObject TravelUi; public GameObject BuildUi; public GameObject TradeUi; void Start () { HideSubMenus(); } private void HideSubMenus() { TravelUi.SetActive(false); //BuildUi.SetActive(false); //TradeUi.SetActive(false); } // Update is called once per frame void Update () { } public void OnTravelClick() { HideSubMenus(); TravelUi.SetActive(true); openSubMenu(TravelUi, Axis.X); } public void OnBuildClick() { HideSubMenus(); //openSubMenu(BuildUi, Axis.X); } public void OnTradeClick() { HideSubMenus(); //openSubMenu(TradeUi, Axis.X); } public void OnSubMenuItemChosen() { HideSubMenus(); gameObject.SetActive(false); } }
Ngui has click events built into buttons, so in my editor, all I had to do was assign things like OnTradeClick to the Trade button, OnBuildClick to the Build button, and so on. The UI needs some aesthetic refinement, but for now it's functional and I need to move on to asset creation to do the rest. Good bye UI programming... I shall return!!!


No comments:
Post a Comment