¡¡
¡¡DialogBase¥¯¥é¥¹¤ò½¤Àµ¤·¡¢Ê£¿ô¤ÎÊÑ¿ô¤òÄêµÁ¤·¤Þ¤¹¡£
¡¡¥Ü¥¿¥ó¤Î¥×¥ì¥Ï¥Ö¤ò¥¢¥µ¥¤¥ó¤¹¤ëÊÑ¿ô¡¢¥Ü¥¿¥ó¤òÀ¸À®¤¹¤ë°ÌÃÖ¤ò¥¢¥µ¥¤¥ó¤¹¤ëÊÑ¿ô¤Î¾¡¢
À¸À®¤·¤¿¥Ü¥¿¥ó¤ò´ÉÍý¤¹¤ë¤¿¤á¤ÎÊÑ¿ô¤Ê¤É¤òÄêµÁ¤·¤Þ¤¹¡£
¡¡¤Þ¤¿ IObservable<ItemData> ·¿¤Î¡¡OnItemButtonClickAsObservable ÊÑ¿ô¤òÄêµÁ¤·¡¢
À¸À®¤·¤¿¥Ü¥¿¥ó¤ËÂФ·¤Æ¹ØÆɤ¹¤ëµ¡Ç½¤òÄɲ䷤Ƥ¤¤Þ¤¹¡£
¡¡¤³¤Î¥Ü¥¿¥ó¤Î½èÍý¤Ë¤Ä¤¤¤Æ¤â¡¢¥Ü¥¿¥ó¦(ButtonBase)¤ÏľÀÜŪ¤Ë³°Éô¥¯¥é¥¹¤Î»²¾È¤ò»ý¤¿¤º¤Ë½èÍý¤¬¼Â¹Ô¤Ç¤¤ë¤¿¤á¡¢
°Í¸´Ø·¸¤¬¤Ê¤¤(Á·ë¹ç)¾õÂÖ¤¬°Ý»ý¤Ç¤¤Æ¤¤¤Þ¤¹¡£
<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤¤Þ¤¹
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 UnityAction<ItemData> onCloseActionItemData;
protected Canvas dialogCanvas;¡¡¡¡¡¡¡¡¡¡// ¤³¤Î¥À¥¤¥¢¥í¥°¤òÇÛÃÖ¤·¤¿ Canvas ¤Î¾ðÊó
protected float fadeDuration = 1.0f; // ¥À¥¤¥¢¥í¥°¤òɽ¼¨/Èóɽ¼¨¤¹¤ëºÝ¤Ë»þ´Ö
////*¡¡¤³¤³¤«¤éÊÑ¿ô¤ò£²¤ÄÄɲá¡*////
protected List<ButtonBase> buttonList = new();
protected int itemCount = 5; // ¥Ç¥Ð¥Ã¥°ÍÑ¡£ËÜÍè¤Ï½ê»ý¥¢¥¤¥Æ¥à¤Î¿ô¤ò»²¾È¤¹¤ë
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
#pragma warning disable 0649
[SerializeField] protected CanvasGroup canvasGroupDialog;
[SerializeField] protected Button btnClose;
[SerializeField] protected Ease fadeEase = Ease.InQuart;
////*¡¡¤³¤³¤«¤éÊÑ¿ô¤ò£´¤ÄÄɲá¡*////
[SerializeField] protected ButtonBase buttonPrefab;
[SerializeField] protected Transform buttonSetTran;
#pragma warning restore 0649
public IObservable<ItemData> OnItemButtonClickAsObservable => buttonList
.Select(buttonBase => buttonBase.OnButtonClickAsObservable.Select(_ => buttonBase.ItemData))
.Merge();
protected ItemData chooseItemData;¡¡¡¡//¡¡¥Ü¥¿¥ó¤ò²¡¤·¤¿¤È¤¤ËÁªÂò¤µ¤ì¤¿¾ðÊó¤òÊÝ»ý¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
/// <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>
/// ¥ª¡¼¥Ð¡¼¥í¡¼¥Éµ¡Ç½¤òÍøÍÑ
/// Dialog ¤ò»È¤¤¤Þ¤ï¤¹¾ì¹ç¤Ë¤Ï¥¤¥ó¥¹¥¿¥ó¥¹¸å¤ËºÇ½é¤Ë£±²ó¤À¤±¼Â¹Ô¤¹¤ë
/// °ú¿ô¤Ç³°Éô¥¯¥é¥¹¤Î½èÍý¤ò¼õ¤±¼è¤ë¤³¤È¤Ç°Í¸´Ø·¸¤ò»ý¤¿¤Ê¤¯¤ÆºÑ¤à
/// </summary>
/// <param name="closeActionItem"></param>
public virtual void SetUp(UnityAction<ItemData> closeActionItem) {
if(!transform.parent.TryGetComponent(out dialogCanvas))
{
Debug.Log("dialogCanvas ¼èÆÀ½ÐÍè¤Þ¤»¤ó");
return;
}
// ³°Éô¥¯¥é¥¹¤Î½èÍý¤òÊÝ»ý¤·¤Æ¤ª¤¯
onCloseActionItemData = closeActionItem;
// ¥À¥¤¥¢¥í¥°¤òÊĤ¸¤ë¥Ü¥¿¥ó¤Ë½èÍý¤òÅÐÏ¿¡
//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 ºÆÀßÄê¤Î½èÍý¤¬É¬Íפʾì¹ç¤Ë½èÍý¤òÄɲÃ
////*¡¡¿·¤·¤¤½èÍý¤òÄɲá¡*////
¡¡¡¡¡¡¡¡// ¥Ü¥¿¥ó¤ÎÀ¸À®¤ÈÀßÄê
for (int i = 0; i < itemCount;i++) {
ButtonBase button = Instantiate(buttonPrefab, buttonSetTran, false);
button.SetUpButton(new(i));
buttonList.Add(button);
}
// ³Æ¥Ü¥¿¥ó¤ÎµóÆ°¤ò¤Þ¤È¤á¤ÆÀ©¸æ¡£¤½¤ì¤¾¤ì¤Î¥Ü¥¿¥ó¤¬Æ±¤¸µóÆ°¤ò¹Ô¤¦¤¬¡¢»²¾È¤¹¤ë ItemData ¤Ï³Æ¥Ü¥¿¥ó¤Î¾ðÊó¤ò°·¤¦
OnItemButtonClickAsObservable
.ThrottleFirst(TimeSpan.FromSeconds(1.0f))
.Subscribe(itemData => chooseItemData = itemData)
.AddTo(this);
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
}
/// <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();
//onCloseActionItemData?.Invoke(new(1));
}
/// <summary>
/// ¥À¥¤¥¢¥í¥°¤òÈóɽ¼¨¤Ë¤¹¤ë¥¢¥Ë¥á
/// </summary>
protected virtual void PlayCloseDialog() {
canvasGroupDialog
.DOFade(0, fadeDuration)
.SetEase(fadeEase)
.SetLink(gameObject)
////*¡¡½èÍý¤ò½¤Àµ¡¡*////
.OnComplete(() => OnExitClose(chooseItemData));¡¡¡¡//¡¡¢«¡¡OnExitClose ¥á¥½¥Ã¥É¤Ë°ú¿ô¤òÄɲÃ
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
}
/// <summary>
/// ¥À¥¤¥¢¥í¥°Èóɽ¼¨¸å¤Ë¼Â¹Ô¤·¤Æ¤ª¤¯½èÍý
/// </summary>
protected virtual void OnExitClose() {
dialogCanvas.enabled = false;
// TODO ¾¤Ë¤â¤¢¤ì¤ÐÄɲÃ
¡¡¡¡¡¡¡¡// ¥À¥¤¥¢¥í¥°¤¬ÊĤ¸½ª¤ï¤Ã¤Æ¤«¤é³°Éô½èÍý¤ò¼Â¹Ô¤·¤¿¤¤¾ì¹ç
//onCloseAction?.Invoke();
¡¡¡¡¡¡¡¡// ItemData ¤ò¥¤¥ó¥¹¥¿¥ó¥¹¤·¤¿¾å¤Ç°ú¿ô¤Ç»ØÄꤷ¤Æ¡¢³°Éô½èÍý¤ò¼Â¹Ô
//onCloseActionItemData?.Invoke(new(1));
}
////*¡¡¿·¤·¤¤¥á¥½¥Ã¥É¤ò£±¤ÄÄɲá¡*////
/// <summary>
/// ¥ª¡¼¥Ð¡¼¥í¡¼¥Éµ¡Ç½¤òÍøÍÑ
/// ¥À¥¤¥¢¥í¥°Èóɽ¼¨¸å¤Ë¼Â¹Ô¤·¤Æ¤ª¤¯½èÍý
/// </summary>
protected virtual void OnExitClose(ItemData itemData) {
onCloseActionItemData?.Invoke(itemData);
}
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
}
¡¡OnEnterOpen ¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤ò½¤Àµ¤·¡¢¥Ü¥¿¥ó¤ÎÀ¸À®½èÍý¤È¡¢³Æ¥Ü¥¿¥ó¤Ë¾ðÊó¤òÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£
³Æ¥Ü¥¿¥ó¤Ï ItemData ¤Èɳ¤Å¤¤¤Æ¤ª¤ê¡¢¤½¤ì¤é¤Î¾ðÊó¤Ï¥Ü¥¿¥ó¤´¤È¤Ë°Û¤Ê¤ë ItemData ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥Ü¥¿¥ó£±¤Ï ItemData £±¡¢¥Ü¥¿¥ó£²¤Ï ItemData £² ¤È¤¤¤¦¾õÂ֤Ǥ¹¡£
¡¡PlayCloseDialog ¥á¥½¥Ã¥ÉÆâ¤Ë¤¢¤ë DOTween ¤Î OnComplete ¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤ò½¤Àµ¤·¡¢
¿·¤·¤¯ºîÀ®¤·¤¿£²¤ÄÌܤΠOnExitClose ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤ì¤Ë¤è¤ê¡¢OnExitClose ¥á¥½¥Ã¥É¤Ë¤Ï°ú¿ô¤È¤·¤Æ¡¢¥Ü¥¿¥ó¤Ë¤è¤êÁªÂò¤µ¤ì¤Æ¤¤¤ë¾ðÊó¤¬ÅϤµ¤ì¤Þ¤¹¡£
¡¡¿·¤·¤¤ OnExitClose¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤Ï¤¤¤Þ¤Þ¤Ç¤Î OnExitClose ¥á¥½¥Ã¥É¤ÈƱÍͤǤ¹¤¬¡¢
¤³¤Á¤é¤Ç¤Ï°ú¿ôÉդΥǥꥲ¡¼¥È¤Ç¤¢¤ë onCloseActionItemData?.Invoke(itemData)¤Ç¤Ï¡¢°ú¿ô¤Ë¸ÇÄêÃͤǤϤʤ¯¡¢
ÊÑ¿ô¤¬»ØÄꤵ¤ì¤Þ¤¹¡£
¤½¤ì¤Ë¤è¤ê¡¢
¥Ü¥¿¥ó¤Ëɳ¤Å¤¤¤Æ¤¤¤ë¾ðÊ󤬡¢³°Éô¥¯¥é¥¹¤ËÂФ·¤ÆÄ󶡤µ¤ì¤ë¤è¤¦¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤ÊÀ߷פˤ·¤Æ¤ª¤¯¤³¤È¤Ç¡¢
¥À¥¤¥¢¥í¥°Æâ¤Ç²¡¤µ¤ì¤¿¥Ü¥¿¥ó¤Ëɳ¤Å¤¤¤¿¾ðÊ󤬡¢³°Éô¥¯¥é¥¹¤ËÂФ·¤ÆÄ󶡤µ¤ì¤ë»ÅÁȤߤ¬¼ÂÁõ¤µ¤ì¤Þ¤¹¡£