Files
Shopping_UnityVR/Assets/02_Scripts/UI/GuidePanel.cs

98 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace VRShopping.UI
{
// 게임씬 첫 진입 시 자동으로 뜨는 다중 페이지 가이드 오버레이
// ITransScenePossible 콜백으로 씬 로드 후 트리거됨
public class GuidePanel : MonoBehaviour, ITransScenePossible
{
[Header("Refs")]
[SerializeField] private GameObject _root;
[SerializeField] private Button _prevButton;
[SerializeField] private Button _nextButton;
[Header("Pages")]
[SerializeField] private List<GuidePage> _pages = new();
private int _currentPage;
private void Awake()
{
if (_prevButton != null) _prevButton.onClick.AddListener(GoPrev);
if (_nextButton != null) _nextButton.onClick.AddListener(GoNext);
Hide();
}
// SceneLoadManager가 씬 로드 후 호출
public void OnSceneLoaded()
{
Show();
}
public void Show()
{
if (_pages == null || _pages.Count == 0) return;
_currentPage = 0;
ApplyPage();
_root.SetActive(true);
}
public void Hide()
{
if (_root != null) _root.SetActive(false);
}
private void GoPrev()
{
if (_currentPage <= 0) return;
_currentPage--;
ApplyPage();
}
private void GoNext()
{
if (_currentPage >= _pages.Count - 1)
{
Hide();
return;
}
_currentPage++;
ApplyPage();
}
private void ApplyPage()
{
if(_currentPage == 0)
{
_prevButton.gameObject.SetActive(false);
}
else
{
_prevButton.gameObject.SetActive(true);
}
var currentPage = _pages[_currentPage];
foreach(GuidePage p in _pages)
{
if(currentPage == p)
{
p.gameObject.SetActive(true);
}
else
{
p.gameObject.SetActive(false);
}
}
if (_prevButton != null) _prevButton.interactable = _currentPage > 0;
}
}
}