Files
2026-05-31 14:27:52 -07:00

76 lines
1.6 KiB
C#

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
/////////////////////////////////////////////////////////////////////////////////
namespace Rukhanka.Samples
{
class UIButtonHandler: MonoBehaviour
{
[Serializable]
public struct ShowcaseData
{
public Button UIBtn;
public GameObject UIRoot;
public Transform vCam;
}
public ShowcaseData[] showcases;
Camera cam;
Transform targetCamera;
/////////////////////////////////////////////////////////////////////////////////
void Start()
{
for (int i = 0; i < showcases.Length; ++i)
{
var sc = showcases[i];
var li = i;
sc.UIBtn.onClick.AddListener(() => OnBtnClick(li));
}
OnBtnClick(0);
showcases[0].UIBtn.Select();
cam = Camera.main;
targetCamera = showcases[0].vCam;
}
/////////////////////////////////////////////////////////////////////////////////
IEnumerator DelayedUISwitch(ShowcaseData sc, bool b)
{
yield return new WaitForSeconds(0.5f);
sc.UIRoot.SetActive(b);
}
/////////////////////////////////////////////////////////////////////////////////
void Update()
{
var dp = targetCamera.position - cam.transform.position;
if (dp.magnitude < 0.1f)
return;
cam.transform.position += dp.normalized * Mathf.Max(dp.magnitude, 2.0f) * Time.deltaTime * 1.5f;
}
/////////////////////////////////////////////////////////////////////////////////
void OnBtnClick(int idx)
{
for (int i = 0; i < showcases.Length; ++i)
{
var sc = showcases[i];
var b = i == idx;
if (b)
targetCamera = sc.vCam;
StartCoroutine(DelayedUISwitch(sc, b));
}
}
}
}