Unity¤Ë´ØÏ¢¤¹¤ëµ­»ö¤Ç¤¹

Äɲ䵤줿¹Ô¤Ï¤³¤Î¿§¤Ç¤¹¡£
ºï½ü¤µ¤ì¤¿¹Ô¤Ï¤³¤Î¿§¤Ç¤¹¡£

¡¡Ê£¿ô²ó¤Î¼ê½ç¤Ëʬ¤±¤Æ¡¢¥í¥°É½¼¨µ¡Ç½¤Î¼ÂÁõ¤ò³Ø½¬¤·¤Þ¤¹¡£
¤Ê¤ª¡¢C# ¤È Unity ¤Î´ðÁÃÃμ±¡Ü¥¢¥ë¥Õ¥¡¤Î³Ø½¬(Ãæµé¼Ô¥¯¥é¥¹)¤¬É¬Íפˤʤê¤Þ¤¹¡£

----

¡¡Á°²ó¤Þ¤Ç¤Î³¤­¤Ç¤¹¡£À©ºî¤·¤¿ UI ¤òÍøÍѤ·¡¢¥¢¥¤¥Æ¥à³ÍÆÀ»þ¤Î¥í¥°É½¼¨µ¡Ç½¤Î¼ÂÁõ¤ò¹Ô¤¤¤Þ¤¹¡£

¡¡»öÁ°¤Î½àÈ÷¤¬É¬Íפˤʤê¤Þ¤¹¤¬¡¢C# ¤È Unity ¤Î´ðÁÃÃμ±¡Ü¥¢¥ë¥Õ¥¡¤Î³Ø½¬(Ãæµé¼Ô¥¯¥é¥¹)¤¬É¬Íפˤʤê¤Þ¤¹¡£

¡¡¤³¤Î¶µºà¤Î¼ê½ç¤ò¸«¤Æ¤â¼ÂÁõ¤¬Æñ¤·¤¤Êý¤Ï¤Þ¤º

=|PERL|
­¡C# ¤Îµ¡Ç½¤Î³Ø½¬(¥¯¥é¥¹¤Î·Ñ¾µ¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ê¤É¤ò³èÍѤ·¤¿Ãê¾Ý²½¤Î³Ø½¬¡Ë
­¢¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤Î³Ø½¬(¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¡¢¥ª¥Ö¥¶¡¼¥Ð¡¼¥Ñ¥¿¡¼¥ó¡¢¥·¥ó¥°¥ë¥È¥ó¥Ñ¥¿¡¼¥ó)
­£Unity ¤Îµ¡Ç½¤Î³Ø½¬(¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¡¢¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È)
||=

¡¡¤Ê¤É¤ò³Ø½¬¤·¤Æ¤«¤é¼ÂÁõ¤Ë¥Á¥ã¥ì¥ó¥¸¤·¤Æ¤¯¤À¤µ¤¤¡£

----

*¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î½àÈ÷

¡¡¥µ¡¼¥Ð¡¼¡¢¤¢¤ë¤¤¤Ï¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Ê¤É¤Ç¥¢¥¤¥Æ¥à¤Î¥Ç¡¼¥¿¤òÍÑ°Õ¤·¡¢¥²¡¼¥àÆâ¼èÆÀ¤Ç¤­¤ë¤è¤¦¤Ë½àÈ÷¤ò¹Ô¤Ã¤Æ²¼¤µ¤¤¡£

¡¡²¼µ­¤Î¶µºà¤ò»²¹Í¤Ë¤·¤Æ¤¤¤¿¤À¤¤¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£

¡¡¡¡=>¡¡''%%%[[¥¢¥¤¥Æ¥à¤Î¾ðÊó¤ò¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ËÅÐÏ¿¤·¤ÆÍøÍѤ¹¤ë>¥¢¥¤¥Æ¥à¤Î¾ðÊó¤ò¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ËÅÐÏ¿¤·¤ÆÍøÍѤ¹¤ë]]%%%''

----

*¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î½àÈ÷
¡¡
¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î½àÈ÷¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£

¡¡²¼µ­¤Î¶µºà¤ò»²¹Í¤Ë¤·¤Æ¤¤¤¿¤À¤¤¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£

¡¡¡¡¡¡=>¡¡''%%%[[¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿¥¨¥Õ¥§¥¯¥ÈÊ£¿ô¼ï´ÉÍý­¡>¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿¥¨¥Õ¥§¥¯¥ÈÊ£¿ô¼ï´ÉÍý­¡]]%%%''
¡¡¡¡¡¡=>¡¡''%%%[[¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿¥¨¥Õ¥§¥¯¥ÈÊ£¿ô¼ï´ÉÍý­¢>¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿¥¨¥Õ¥§¥¯¥ÈÊ£¿ô¼ï´ÉÍý­¢]]%%%''
¡¡¡¡¡¡=>¡¡''%%%[[¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿¥¨¥Õ¥§¥¯¥ÈÊ£¿ô¼ï´ÉÍý­£>¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿¥¨¥Õ¥§¥¯¥ÈÊ£¿ô¼ï´ÉÍý­£]]%%%''

----

*ToastSlot ¥¯¥é¥¹

¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤òÍøÍѤ·¤Æ¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òºÆÍøÍѤ¹¤ëÀ߷פǤ¹¡£
PoolBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£

¡¡Text ¥³¥ó¥Ý¡¼¥Í¥ó¥ÈÉôʬ¤ÏŬµ¹ TextMeshPro ¤Ê¤É¤ËÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£

''ToastSlot.cs''
[+] <= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using UnityEngine.Events;

public class ToastSlot : PoolBase {

[SerializeField] private Image imgIcon;
[SerializeField] private Text txtItemName;
[SerializeField] private float moveDuration = 0.5f;
[SerializeField] private CanvasGroup canvasGroup;
private float interval = 1.0f;
private float endPosX;


/// <summary>
/// ¥È¡¼¥¹¥È¤ÎÀßÄê
/// </summary>
/// <param name="rewardType"></param>
/// <param name="itemIndex"></param>
/// <param name="getCount"></param>
public void SetToastSlot(int itemIndex, int getCount) {

// ºÇ½ªÅª¤Ê°ÜÆ°°ÌÃÖ¤òÊÝ»ý(²èÌ̳°)
endPosX = transform.position.x;

// TODO ¥¢¥¤¥Æ¥à¥Ç¡¼¥¿¤Î¼èÆÀ¡£¥×¥í¥¸¥§¥¯¥È¤Ë±þ¤¸¤Æ¼ÂÁõ
ItemMasterData itemData = [¥¢¥¤¥Æ¥à¥Ç¡¼¥¿¤Î¼èÆÀ½èÍý¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤]

// TODO ²èÁü¤Î¼èÆÀ¡£¥×¥í¥¸¥§¥¯¥È¤Ë±þ¤¸¤Æ¼ÂÁõ
imgIcon.sprite = [¥¢¥¤¥Æ¥à¥Ç¡¼¥¿¤ò¸µ¤Ë²èÁü¤Î¼èÆÀ½èÍý¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤]

// TODO ¥¢¥¤¥Æ¥à̾ɽ¼¨¡£¥×¥í¥¸¥§¥¯¥È¤Ë±þ¤¸¤Æ¼ÂÁõ
txtItemName.text = $"{ itemData.itemName } x {getCount}";
}

/// <summary>
/// ¥È¡¼¥¹¥È¤Î°ÜÆ°
/// </summary>
/// <param name="targetTran"></param>
/// <param name="contentTran"></param>
/// <param name="canvasTran"></param>
/// <param name="endAction">ToastManager ¤Î RemoveList ¤¬Æþ¤Ã¤Æ¤¤¤ë</param>
public void MoveSlot(Transform targetTran, Transform contentTran, Transform canvasTran, UnityAction<ToastSlot> endAction) {

transform.localPosition = Vector3.zero;

RectTransform rectTransform = transform as RectTransform;

// ²èÌ̺¸Ã¼¤«¤é¥¹¥é¥¤¥É¥¤¥ó¤·¡¢ºÆÅÙº¸Ã¼¤Ë¥¹¥é¥¤¥É¥¢¥¦¥È¤·¤Æ¤¤¤¯¥¢¥Ë¥á½èÍý
Sequence sequence = DOTween.Sequence();

// ¥¹¥é¥¤¥É¥¤¥ó
sequence.Append(rectTransform.DOAnchorPosX(targetTran.localPosition.x, moveDuration)
.SetEase(Ease.InQuart)
.OnComplete(() => transform.SetParent(contentTran))); // ²èÌ̳°¤«¤é²èÌÌÆâ¤Ë°ÜÆ°¸å¡¢ScrollView ¤Î Content ¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÀ°Î󤵤»¤Þ¤¹

// °ì»þÄä»ß
sequence.AppendInterval(interval).OnComplete(() => transform.SetParent(canvasTran)); // °ìÄê»þ´ÖÂÔµ¡¸å¡¢Canvas ¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤Æ¡¢Content ¤Î±Æ¶Á¤ò¼õ¤±¤Ê¤¤¾õÂ֤ˤ·¤Þ¤¹

// ¥¹¥é¥¤¥É¥¢¥¦¥È
sequence.Append(rectTransform.DOAnchorPosX(endPosX, moveDuration).SetEase(Ease.InCubic))
.OnComplete(() => ReleaseSlot(endAction));
}

/// <summary>
/// ¸«¤¨¤Ê¤¤¥È¡¼¥¹¥È¤ÎÀßÄê
/// </summary>
/// <param name="contentTran"></param>
public void HideSlot(Transform contentTran) {
canvasGroup.alpha = 0.0f;
transform.SetParent(contentTran);

Sequence sequence = DOTween.Sequence();
sequence.AppendInterval(moveDuration).OnComplete(() => ReleaseSlot());
}

/// <summary>
/// ¥È¡¼¥¹¥È¤ò½é´ü²½¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ØÌ᤹
/// </summary>
/// <param name="endAction">ToastManager ¤Î RemoveList ¥á¥½¥Ã¥É¤ò¼Â¹Ô</param>
private void ReleaseSlot(UnityAction<ToastSlot> endAction = null) {

// ¥Ò¥¨¥é¥ë¥­¡¼¤Ë¥È¡¼¥¹¥È¤¬¥¢¥¯¥Æ¥£¥Ö¾õÂ֤ǻĤäƤ¤¤ë¾ì¹ç¤Î¤ß
if (gameObject.activeInHierarchy) {

// List ¤«¤éºï½ü
endAction?.Invoke(this);

// ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÇºÆÍøÍѤ¹¤ë¤¿¤á½é´ü²½
transform.SetParent(null); // Canvas ¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤ä¡¢Generator ¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤Æ¤ª¤¤¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó
canvasGroup.alpha = 1.0f;

ObjectPool.Release(this);
}
}
}
||=
[END]

----


*ISetup ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹

¡¡½é´ü²½ÍѤΥ᥽¥Ã¥É¤ò¼ÂÁõ¶¯Íפ¹¤ë¤¿¤á¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤¹¡£


=|BOX|
using UnityEngine;

/// <summary>
/// ½é´üÀßÄ궦Ä̲½ÍѤΥ¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹
/// </summary>
public interface ISetup {
void SetUp(GameObject entityObject = null);
}
||=

----


*ToastSlotGenerator ¥¯¥é¥¹

¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤ò³èÍѤ¹¤ë¤¿¤á¤ËºîÀ®ºÑ¤Î GeneratorBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¡¢ISetup ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Þ¤¹¡£
Debug.Log ¥á¥½¥Ã¥É¤Ï¥³¥á¥ó¥È¥¢¥¦¥È¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¼ÂºÝ¤ËµóÆ°¤ò³Îǧ¤·¤Æ¤«¤é¥³¥á¥ó¥È¥¢¥¦¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿Êý¤¬¤¤¤¤¤Ç¤·¤ç¤¦¡£

¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤È¤·¤ÆÀ¸À®¤¹¤ëµ¡Ç½¤Ë¤Ä¤¤¤Æ¤Ï GeneratorBase ¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤ò¤½¤Î¤Þ¤ÞÍøÍѤ·¤Þ¤¹¤Î¤Ç¡¢¤³¤Î¥¯¥é¥¹¤Ç¤Ï¥ª¡¼¥Ð¡¼¥í¡¼¥É¤·¤Æ¤¤¤Þ¤»¤ó¡£


''ToastSlotGenerator.cs''
[+] <= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using UnityEngine;

public class ToastSlotGenerator : GeneratorBase, ISetup
{
/// <summary>
/// ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¼ÂÁõ
/// ½é´üÀßÄê
/// </summary>
/// <param name="entityObject"></param>
public void SetUp(GameObject entityObject = null) {

// ObjectPool ¤Î½é´ü²½
InitObjectPool();

//Debug.Log($"{this} Setup ´°Î»");
}
}
||=
[END]

----

*AbstractSingleton ¥¯¥é¥¹

¡¡¥·¥ó¥°¥ë¥È¥ó¥¯¥é¥¹¤òºîÀ®¤¹¤ë¤¿¤á¤Î¿Æ¥¯¥é¥¹¤Ç¤¹¡£
·Ñ¾µ¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢»ØÄꤷ¤¿¥¯¥é¥¹¤ò¥·¥ó¥°¥ë¥È¥ó¥¯¥é¥¹¤È¤·¤Æµ¡Ç½¤µ¤»¤Þ¤¹¡£

¡¡º£²ó¤Ï¼¡¤ËºîÀ®¤¹¤ë¥¯¥é¥¹¤Ë¤ÆÍøÍѤ·¤Þ¤¹¤¬¡¢¤Û¤«¤Î¥×¥í¥¸¥§¥¯¥È¤Ë¤âÍ­ÍѤʿƥ¯¥é¥¹¤Ç¤¹¡£


''AbstractSingleton.cs''
[+] <= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using UnityEngine;

/// <summary>
/// ÇÉÀ¸¥¯¥é¥¹¤ËÂФ¹¤ë¥·¥ó¥°¥ë¥È¥ó¤Î´ðËܵ¡Ç½¤òÄ󶡤¹¤ëÃê¾Ý¥¯¥é¥¹
/// </summary>
/// <typeparam name="T">¥·¥ó¥°¥ë¥È¥ó¤Ë¤·¤¿¤¤¥¤¥ó¥¹¥¿¥ó¥¹¤Î·¿</typeparam>
public abstract class AbstractSingleton<T> : MonoBehaviour where T : Component {

public static T instance;

protected virtual void Awake() {
if (instance == null) {
instance = this as T;
DontDestroyOnLoad(gameObject);
} else {
Destroy(gameObject);
}
}
}
||=
[END]


----

*ToastManager ¥¯¥é¥¹

¡¡AbstractSingleton ¥¯¥é¥¹¤ò·Ñ¾µ¤·¡¢¥·¥ó¥°¥ë¥È¥ó¥¯¥é¥¹¤È¤·¤Æµ¡Ç½¤µ¤»¤Þ¤¹¡£
Íýͳ¤Ï¥¢¥¤¥Æ¥à³ÍÆÀ¤Î¥¿¥¤¥ß¥ó¥°¤¬ÍÍ¡¹¤Ê¾õ¶·¤ÇȯÀ¸¤·¤¨¤ë¤¿¤á¡¢¤½¤ì¤ËÂбþ¤Ç¤­¤ëÀ߷פȤ¹¤ë¤¿¤á¤Ç¤¹¡£

¡¡¤Þ¤¿ Setup ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ½é´üÀßÄê¤ò¹Ô¤¨¤ë¤è¤¦¤Ë ISetup ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ½èÍý¤Î¶¦Ä̲½¤ò¿Þ¤Ã¤Æ¤¤¤Þ¤¹¡£


''ToastManager.cs''
[+] <= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using System.Collections.Generic;
using UnityEngine;

public class ToastManager : AbstractSingleton<ToastManager>, ISetup
{
[SerializeField] private Transform generateToastTran;
[SerializeField] private Transform targetTran;
[SerializeField] private Transform contentTran;
[SerializeField] private Transform canvasTran;
[SerializeField] private ToastSlotGenerator toastSlotGenerator; // ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÍÑ

private List<ToastSlot> toastSlotList = new();

// ¥Ç¥Ð¥Ã¥°ÍÑ
void Start() {
SetUp();
}

/// <summary>
/// ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¼ÂÁõ
/// ¼ÂºÝ¤Ë³°Éô¥¯¥é¥¹¤«¤é¼Â¹Ô¤¹¤ëͽÄê
/// </summary>
public void SetUp(GameObject entityObject = null) {
toastSlotGenerator.SetUp();
}

/// <summary>
/// ¥È¡¼¥¹¥È¤ÎÀ¸À®()
/// </summary>
/// <param name="rewardType"></param>
/// <param name="index"></param>
/// <param name="getCount"></param>
public void GenerateToastSlot(int index, int getCount = 1) {

// ¥È¡¼¥¹¥È¥¹¥í¥Ã¥È¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤«¤é¼è¤ê½Ð¤¹
ToastSlot toastSlot = (ToastSlot)toastSlotGenerator.GetObjectFromPool(generateToastTran);
toastSlot.gameObject.SetActive(true);

// ¥È¡¼¥¹¥È¤ÎÀßÄê¤È°ÜÆ°
toastSlot.SetToastSlot(index, getCount);
toastSlot.MoveSlot(targetTran, contentTran, canvasTran, RemoveList);

// ¤¹¤Ç¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥È¡¼¥¹¥È¤¬¤¢¤ë¾ì¹ç
if (toastSlotList.Count > 0) {

// Content ¤Î°ìÈÖ²¼¤ò£±¤Äʬ¶õ¤±¤ë¤¿¤á¡¢¸«¤¨¤Ê¤¤¥È¡¼¥¹¥È¤òÇÛÃÖ
ToastSlot nullSlot = (ToastSlot)toastSlotGenerator.GetObjectFromPool(targetTran);
nullSlot.HideSlot(contentTran);
}

toastSlotList.Add(toastNotificationSlot);
}

private void RemoveList(ToastSlot toastNotificationSlot) {
toastSlotList.Remove(toastNotificationSlot);
}
}
||=
[END]

----

*¥Æ¥¹¥È¥³¡¼¥É¤ÎºîÀ®

¡¡¼ÂºÝ¤Î¥×¥í¥¸¥§¥¯¥È¤Ë¤Ä¤Ê¤®¤³¤àÁ°¤Ë¡¢¥Æ¥¹¥È¥³¡¼¥É¤òºîÀ®¤·¤Æ¡¢Æ°ºî³Îǧ¤ò¹Ô¤¤¤Þ¤·¤ç¤¦¡£

¡¡¥Æ¥¹¥È¥³¡¼¥É¤Ï¡¢¼ÂºÝ¤Î¥×¥í¥¸¥§¥¯¥È¤Î¥³¡¼¥É¤ò¥Æ¥¹¥È¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ëÊä½õŪ¤Ê¥³¡¼¥É¤Ç¤¢¤ê¡¢
Ä̾ï¤ÏËÜÈÖ¥³¡¼¥É¤È¤ÏʬΥ¤µ¤ì¤¿ÆÈΩ¤·¤¿¥Õ¥¡¥¤¥ë¤ä¥¯¥é¥¹¤È¤·¤ÆºîÀ®¤µ¤ì¤Þ¤¹¡£

¡¡¥Æ¥¹¥È¥³¡¼¥É¤Ï¡¢ËÜÈÖ¥³¡¼¥É¤Îµ¡Ç½¤¬Àµ¤·¤¯µ¡Ç½¤·¡¢´üÂԤɤª¤ê¤ËÆ°ºî¤¹¤ë¤³¤È¤ò³Îǧ¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£
¤³¤ì¤Ë¤Ï¡¢¥æ¥Ë¥Ã¥È¥Æ¥¹¥È¡¢Åý¹ç¥Æ¥¹¥È¡¢µ¡Ç½¥Æ¥¹¥È¤Ê¤É¡¢¤µ¤Þ¤¶¤Þ¤Ê¼ïÎà¤Î¥Æ¥¹¥È¤¬´Þ¤Þ¤ì¤Þ¤¹¡£
¥Æ¥¹¥È¥³¡¼¥É¤ÏÄ̾´üÂÔ¤µ¤ì¤ë½ÐÎϤäÆ°ºî¤È¼ÂºÝ¤Î½ÐÎϤäÆ°ºî¤òÈæ³Ó¤·¡¢ÌäÂê¤òÆÃÄꤹ¤ë¤¿¤á¤Ë¥¢¥µ¡¼¥·¥ç¥ó¤ò»ÈÍѤ·¤Þ¤¹¡£

¡¡º£²óºîÀ®¤¹¤ë TestGenerateToast ¥¯¥é¥¹¤Ï¡¢ToastManager ¤Î GenerateToastSlot ¥á¥½¥Ã¥É¤ò¥Æ¥¹¥È¤¹¤ë¤¿¤á¤Î¥Æ¥¹¥È¥³¡¼¥É¤È¤·¤Æµ¡Ç½¤·¤Þ¤¹¡£
¤³¤Î¥¯¥é¥¹¤Ï¡¢GenerateToastSlot ¥á¥½¥Ã¥É¤¬¥Þ¥¦¥¹¥¯¥ê¥Ã¥¯¤Î¥¿¥¤¥ß¥ó¥°¤ÇÀµ¤·¤¯Æ°ºî¤¹¤ë¤«¤É¤¦¤«¤ò³Îǧ¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£


''TestGenerateToast.cs''
[+] <= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using UnityEngine;
using UniRx;
using UniRx.Triggers;

public class TestGenerateToast : MonoBehaviour
{
[SerializeField] private int index = 0;
[SerializeField] private int getCount = 1;


void Start()
{
// ¥Þ¥¦¥¹¤¬¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤éGenerateToastSlot¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹
this.UpdateAsObservable()
.Where(_ => Input.GetMouseButtonDown(0))
.Subscribe(_ => GenerateToast());
}

private void GenerateToast()
{
// ¥·¥ó¥°¥ë¥È¥ó¤ÎToastManager¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò¼èÆÀ¤·¡¢GenerateToastSlot¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹
ToastManager.instance.GenerateToastSlot(index, getCount);
}
}
||=
[END]

----

¡¡¥¹¥¯¥ê¥×¥È¤òºîÀ®¤·¤¿¤é¡¢Create Empty ¤Ç¿·µ¬¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¡¢¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
´û¸¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£


&ref(https://image02.seesaawiki.jp/i/o/i-school-memo/gqTuXOjZRg.png, 35%)

----

¡¡¥²¡¼¥à¤ò¼Â¹Ô¤·¡¢Æ°ºî³Îǧ¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£


&ref(https://image02.seesaawiki.jp/i/o/i-school-memo/TE9W9jnRn0.gif, 35%)


¡¡ÌäÂê¤Ê¤¤¤³¤È¤¬³Îǧ¤Ç¤­¤¿¤é¡¢¼ÂºÝ¤Ë¼«Ê¬¤Î¥×¥í¥¸¥§¥¯¥È¤ËºÎÍѤ¹¤ë¤¿¤á¡¢½èÍý¤Î¤Ä¤Ê¤®¤³¤ß¤ò¹Ô¤¤¤Þ¤·¤ç¤¦¡£

¡¡°Ê¾å¤Ë¤Ê¤ê¤Þ¤¹¡£

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹