76 lines
1.6 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|
|
}
|