98 lines
2.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|