¡¡
¡¡DialogBase¥¯¥é¥¹¤Ï¡¢¥À¥¤¥¢¥í¥°¤Î´ðËÜŪ¤Êµ¡Ç½¤òÄ󶡤¹¤ë´ðÄ쥯¥é¥¹¤Ç¤¹¡£
¡¡IDialogClose ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤ª¤ê¡¢Hide()¥á¥½¥Ã¥É¤òÄ󶡤·¤Æ¥À¥¤¥¢¥í¥°¤òÈóɽ¼¨¤Ë¤·¤Þ¤¹¡£
¡¡UnityAction·¿¤Î¥Õ¥£¡¼¥ë¥É onCloseAction ¤Ï¡¢³°Éô¥¯¥é¥¹¤Î½èÍý¤òÊÝ»ý¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£
¤³¤³¤Ë½èÍý¤òÊÝ»ý¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢Ç¤°Õ¤Î¥¿¥¤¥ß¥ó¥°¤Ç½èÍý¤ò¼Â¹Ô¤Ç¤¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢Ä¾ÀÜŪ¤Ë³°Éô¥¯¥é¥¹¤Î»²¾È¤ò»ý¤¿¤º¤Ë½èÍý¤¬¼Â¹Ô¤Ç¤¤ë¤¿¤á¡¢°Í¸´Ø·¸¤¬¤Ê¤¤(Á·ë¹ç)¾õÂÖ¤¬°Ý»ý¤Ç¤¤Æ¤¤¤Þ¤¹¡£
<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤¤Þ¤¹
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using DG.Tweening;
using UniRx;
public class DialogBase : MonoBehaviour, IDialogClose
{
protected UnityAction onCloseAction;¡¡¡¡// ³°Éô¥¯¥é¥¹(º£²ó¤Ï DailogTest)¤Î½èÍý(¥á¥½¥Ã¥É¤Î»²¾È)¤òÊÝ»ý¤¹¤ë¥Ç¥ê¥²¡¼¥È
protected Canvas dialogCanvas;¡¡¡¡¡¡¡¡¡¡// ¤³¤Î¥À¥¤¥¢¥í¥°¤òÇÛÃÖ¤·¤¿ Canvas ¤Î¾ðÊó
protected float fadeDuration = 1.0f; // ¥À¥¤¥¢¥í¥°¤òɽ¼¨/Èóɽ¼¨¤¹¤ëºÝ¤Ë»þ´Ö
#pragma warning disable 0649
[SerializeField] protected CanvasGroup canvasGroupDialog;
[SerializeField] protected Button btnClose;
[SerializeField] protected Ease fadeEase = Ease.InQuart;
#pragma warning restore 0649
/// <summary>
/// Dialog ¤ò»È¤¤¤Þ¤ï¤¹¾ì¹ç¤Ë¤Ï¥¤¥ó¥¹¥¿¥ó¥¹¸å¤ËºÇ½é¤Ë£±²ó¤À¤±¼Â¹Ô¤¹¤ë
/// °ú¿ô¤Ç³°Éô¥¯¥é¥¹¤Î½èÍý¤ò¼õ¤±¼è¤ë¤³¤È¤Ç°Í¸´Ø·¸¤ò»ý¤¿¤Ê¤¯¤ÆºÑ¤à
/// </summary>
/// <param name="closeAction"></param>
public virtual void SetUp(UnityAction closeAction) {
if(!transform.parent.TryGetComponent(out dialogCanvas))
{
Debug.Log("dialogCanvas ¼èÆÀ½ÐÍè¤Þ¤»¤ó");
return;
}
// UnityAction ¤Ë³°Éô¥¯¥é¥¹¤Î½èÍý(¥á¥½¥Ã¥É¤Î»²¾È)¤òÊÝ»ý¤·¤Æ¤ª¤¯
onCloseAction = closeAction;
// ¥À¥¤¥¢¥í¥°¤òÊĤ¸¤ë¥Ü¥¿¥ó¤Ë½èÍý¤òÅÐÏ¿¡
//btnClose.onClick.AddListener(() => Hide());
// ¥À¥¤¥¢¥í¥°¤òÊĤ¸¤ë¥Ü¥¿¥ó¤Ë½èÍý¤òÅÐÏ¿¢
btnClose.OnClickAsObservable()
.ThrottleFirst(TimeSpan.FromSeconds(1.0f))
.Subscribe(_ => Hide())
.AddTo(this);
// TODO ¾¤Ë¤â£±²ó¤À¤±ÀßÄꤷ¤¿¤¤¤â¤Î¤òÄɲÃ
}
/// <summary>
/// ³°Éô¥¯¥é¥¹¤«¤é¼Â¹Ô
/// ¥À¥¤¥¢¥í¥°¤òɽ¼¨
/// </summary>
public virtual void Show() {
dialogCanvas.enabled = true;
canvasGroupDialog.alpha = 0;
// ɽ¼¨½àÈ÷¤äºÆÀßÄ꤬¤¢¤ë¾ì¹ç
OnEnterOpen();
// ¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¥¢¥Ë¥á³«»Ï
PlayOpenDialog();
}
/// <summary>
/// ¥À¥¤¥¢¥í¥°Æâ¤Îɽ¼¨½àÈ÷¤äºÆÀßÄ꤬¤¢¤ë¾ì¹ç¤ËÍøÍѤ¹¤ë
/// </summary>
protected virtual void OnEnterOpen() {
// TODO ºÆÀßÄê¤Î½èÍý¤¬É¬Íפʾì¹ç¤Ë½èÍý¤òÄɲÃ
}
/// <summary>
/// ¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¥¢¥Ë¥á
/// </summary>
protected virtual void PlayOpenDialog() {
canvasGroupDialog
.DOFade(1.0f, fadeDuration)
.SetEase(fadeEase)
.SetLink(gameObject)
.OnComplete(() => OnExitOpen());
}
/// <summary>
/// ¥À¥¤¥¢¥í¥°É½¼¨¸å¤Ë¼Â¹Ô¤·¤Æ¤ª¤¯½èÍý
/// </summary>
protected virtual void OnExitOpen() {
// TODO ³«¤¤¤¿¤È¤¤ÎµóÆ°
}
/// <summary>
/// ¥Ü¥¿¥ó¤«¤é¼Â¹Ô
/// ¥À¥¤¥¢¥í¥°¤òÊĤ¸¤ë
/// </summary>
/// <returns></returns>
public virtual bool Hide() {
// Èóɽ¼¨¤Ë¤¹¤ëÁ°¤Ë¤ä¤Ã¤Æ¤ª¤¯½èÍý
OnEnterClose();
// ¥À¥¤¥¢¥í¥°¤òÈóɽ¼¨¤Ë¤¹¤ë¥¢¥Ë¥á³«»Ï
PlayCloseDialog();
return true;
}
/// <summary>
/// Èóɽ¼¨¤Ë¤¹¤ëÁ°¤Ë¤ä¤Ã¤Æ¤ª¤¯½èÍý
/// </summary>
protected virtual void OnEnterClose() {
// ³°Éô¥¯¥é¥¹¤ÇÅÐÏ¿¤·¤¿³°Éô¤Î½èÍý¤ò¼Â¹Ô
¡¡¡¡¡¡¡¡// ¥À¥¤¥¢¥í¤¬ÊĤ¸»Ï¤á¤¿¥¿¥¤¥ß¥ó¥°¤Ç¡¢¤¹¤°¤Ë³°Éô½èÍý¤ò¼Â¹Ô¤·¤¿¤¤¾ì¹ç
//onCloseAction?.Invoke();
}
/// <summary>
/// ¥À¥¤¥¢¥í¥°¤òÈóɽ¼¨¤Ë¤¹¤ë¥¢¥Ë¥á
/// </summary>
protected virtual void PlayCloseDialog() {
canvasGroupDialog
.DOFade(0, fadeDuration)
.SetEase(fadeEase)
.SetLink(gameObject)
.OnComplete(() => OnExitClose());
}
/// <summary>
/// ¥À¥¤¥¢¥í¥°Èóɽ¼¨¸å¤Ë¼Â¹Ô¤·¤Æ¤ª¤¯½èÍý
/// </summary>
protected virtual void OnExitClose() {
dialogCanvas.enabled = false;
// TODO ¾¤Ë¤â¤¢¤ì¤ÐÄɲÃ
¡¡¡¡¡¡¡¡// ¥À¥¤¥¢¥í¥°¤¬ÊĤ¸½ª¤ï¤Ã¤Æ¤«¤é³°Éô½èÍý¤ò¼Â¹Ô¤·¤¿¤¤¾ì¹ç
onCloseAction?.Invoke();
}
}
¡¡SetUp¥á¥½¥Ã¥É¤Ï¡¢³°Éô¥¯¥é¥¹¤«¤é¸Æ¤Ó½Ð¤µ¤ì¡¢³°Éô¥¯¥é¥¹¤Î½èÍý¤ò°ú¿ô¤È¤·¤Æ¼õ¤±¼è¤ê¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢
°Í¸´Ø·¸¤ò»ý¤¿¤º¤Ë³°Éô¥¯¥é¥¹¤Î½èÍý¤ò¥À¥¤¥¢¥í¥°Æâ¤Ç¼Â¹Ô¤Ç¤¤Þ¤¹¡£
¡¡Show¥á¥½¥Ã¥É¤Ï¡¢¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤¿¤á¤Î´ðËÜŪ¤Ê½èÍý¤òÄ󶡤·¤Þ¤¹¡£
ɽ¼¨Á°¤Î½àÈ÷¤äºÆÀßÄ꤬ɬÍפʾì¹ç¡¢OnEnterOpen¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¼ÂÁõ¤Ç¤¤Þ¤¹¡£
¡¡Hide¥á¥½¥Ã¥É¤Ï¡¢¥À¥¤¥¢¥í¥°¤òÈóɽ¼¨¤Ë¤¹¤ë¤¿¤á¤Î´ðËÜŪ¤Ê½èÍý¤òÄ󶡤·¤Þ¤¹¡£
Èóɽ¼¨¤Ë¤¹¤ëÁ°¤Î½èÍý¤¬É¬Íפʾì¹ç¡¢OnEnterClose¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¼ÂÁõ¤Ç¤¤Þ¤¹¡£
¡¡OnExitClose¥á¥½¥Ã¥É¤Ç¤Ï¡¢¥À¥¤¥¢¥í¥°¤¬Èóɽ¼¨¤Ë¤Ê¤Ã¤¿¸å¤Ë¼Â¹Ô¤µ¤ì¤ë½èÍý¤òÄ󶡤·¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢Ç¤°Õ¤Î½èÍýÆâ¤Ç UnityAction Æâ¤ËÊÝ»ý¤·¤Æ¤¤¤ë³°Éô¥¯¥é¥¹¤Î½èÍý¤ò¸Æ¤Ó½Ð¤¹(¼Â¹Ô¤¹¤ë)¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
º£²ó¤Î¾ì¹ç¤Ë¤Ï¡¢OnEnterClose() ¥á¥½¥Ã¥É¤«¡¢OnExitClose() ¥á¥½¥Ã¥É¤Ë¤Æ½èÍý¤ò½ñ¤¤¤Æ¤¤¤Þ¤¹¤¬¡¢
¤³¤ì¤Ï¡¢³°Éô¥¯¥é¥¹¤Î½èÍý¤¬¡¢¥À¥¤¥¢¥í¥°¤òÈóɽ¼¨¤Ë¤¹¤ëºÝ¤Ë¼Â¹Ô¤·¤¿¤¤½èÍý¤Ç¤¢¤ë¤¿¤á¤Ç¤¹¡£
¡¡¤è¤Ã¤Æ¡¢³°Éô¥¯¥é¥¹¤Î½èÍý¤¬¤É¤¦¤¤¤Ã¤¿½èÍý¤Ê¤Î¤«¤Ë¹ç¤ï¤»¤Æ¡¢¼Â¹Ô¤¹¤ë¥¿¥¤¥ß¥ó¥°¤ò»ØÄꤹ¤ë¤³¤È¤Ç½ÀÆð¤ËÂбþ¤¬²Äǽ¤Ç¤¹¡£
¤³¤ì¤¬¥Ç¥ê¥²¡¼¥È¤ò³èÍѤ·¤¿½èÍý¤ÎÂ礤ʥá¥ê¥Ã¥È¤Ë¤Ê¤ê¤Þ¤¹¡£