¡¡¤³¤Î¥¯¥é¥¹¤Ë¤Ï
¥³¥ë¡¼¥Á¥ó¤òÍøÍѤ·¤¿¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢
¿·¤·¤¤¥á¥½¥Ã¥É¤òºîÀ®¤·¤¿¾å¤Ç¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤Ã¤ÆÈóƱ´ü½èÍý¤òÃÖ¤´¹¤¨¤Þ¤¹¡£
<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤¤Þ¤¹¡£
using System.Collections;
using UnityEngine;
using System.Threading; //¡¡¡¡<=¡¡Àë¸À¤òÄɲä·¤Þ¤¹¡£
using Cysharp.Threading.Tasks;¡¡¡¡¡¡//¡¡¡¡<=¡¡Àë¸À¤òÄɲä·¤Þ¤¹¡£
public class PlayerAction : PlayerBase
{
private FacePlayer facePlayer;
public FacePlayer FacePlayer {
get => facePlayer;
set => value = facePlayer;
}
public override void SetUpPlayer() {
}
/// <summary>
/// ¥³¥ë¡¼¥Á¥ó¤Ë¤è¤ëÈóƱ´ü¥¤¥Ù¥ó¥È¼Â¹Ô
/// </summary>
/// <param name="hitOject"></param>
/// <param name="facePlayer"></param>
/// <returns></returns>
public IEnumerator PlayActionCoroutine(GameObject hitOject) {
if (hitOject.TryGetComponent(out NonPlayerCharacter npc) == true) {
// NPC¤Î¸þ¤¤òÊѹ¹¤¹¤ë
npc.LookDirection(GetFaceNPC(facePlayer));
}
if (hitOject.TryGetComponent(out GameEventHandler gameEventHandler)) {
IEnumerator eventCoroutine = gameEventHandler.ExecuteGameEventsCoroutine();
yield return StartCoroutine(eventCoroutine);
bool isSaveOn = (bool)eventCoroutine.Current;
CheckSave(isSaveOn);
// ¾åµ¤ò1¹Ô¤Ç½ñ¤¤¤¿¾ì¹ç
CheckSave((bool)eventCoroutine.Current);
}
}
/// <summary>
/// ¥»¡¼¥Ö³Îǧ
/// </summary>
/// <param name="isSaveOn"></param>
private void CheckSave(bool isSaveOn) {
if (!isSaveOn) {
return;
}
GameData.instance.SaveAllUserDatas();
}
/// <summary>
/// NPC¤Î¸þ¤¤òÅÁ¤¨¤ë
/// </summary>
/// <param name="facePlayer"></param>
/// <returns></returns>
private FaceNPC GetFaceNPC(FacePlayer facePlayer)
{
return facePlayer switch {
FacePlayer.Back => FaceNPC.FrontNPC,
FacePlayer.Front => FaceNPC.BackNPC,
FacePlayer.Left => FaceNPC.RightNPC,
FacePlayer.Right => FaceNPC.LeftNPC,
_ => FaceNPC.FrontNPC
};
}
////*¡¡¤³¤³¤«¤éÄɲá¡*////
/// <summary>
/// ÈóƱ´ü½èÍý
/// </summary>
/// <param name="hitOject"></param>
/// <param name="token"></param>
public async UniTask PlayActionAsync(GameObject hitOject, CancellationToken token) {
if (hitOject.TryGetComponent(out NonPlayerCharacter npc) == true) {
// NPC¤Î¸þ¤¤òÊѹ¹¤¹¤ë
npc.LookDirection(GetFaceNPC(facePlayer));
}
if (hitOject.TryGetComponent(out GameEventHandler gameEventHandler)) {
// NPC ¤Î¥¥ã¥ó¥»¥ë½èÍý¤Ï NPC ¦¤Ç¥¥ã¥ó¥»¥ë¥È¡¼¥¯¥ó¤òºîÀ®¤µ¤»¤ë
bool isSaveOn = await gameEventHandler.ExecuteGameEventsAsync(token)
CheckSave(isSaveOn);
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¢
// ¾åµ2¹Ô¤ò1¹Ô¤Ç½ñ¤¤¤¿¾ì¹ç
CheckSave(await gameEventHandler.ExecuteGameEventsAsync(token));
}
}
////*¡¡¤³¤³¤Þ¤Ç¡¡*////
}
¡¡async / await ¤Ë¤è¤ëÈóƱ´ü½èÍýÍѤΥ᥽¥Ã¥É¤Ï¡¢Ìá¤êÃͤò UniTask ·¿¤Ë¤·¤Þ¤¹¡£
¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤È°ã¤¤¡¢Ìá¤êÃͤˤÏǤ°Õ¤Î¾ðÊó¤ò»ý¤¿¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£UniTask<int> ¤Î¤è¤¦¤Ë½ñ¤±¤Þ¤¹¡£
¡¡²Ã¤¨¤Æ¡¢¥á¥½¥Ã¥É¤ÎÄêµÁ¤Ë¤Ï async ¥¡¼¥ï¡¼¥É¤òÉÕÍ¿¤·¤Þ¤¹¡£
¥á¥½¥Ã¥É̾¤Ï¤ï¤«¤ê¤ä¤¹¤¤¤è¤¦¤Ë ¡Á Async ¤Ç½ª¤ï¤ë¤è¤¦¤Ë¤·¡¢ÈóƱ´üÍѤΥ᥽¥Ã¥É¤Ç¤¢¤ë¤³¤È¤¬¤ï¤«¤ë¤è¤¦¤Ë̿̾¤·¤Þ¤¹¡£
º£²ó¤Ç¤¢¤ì¤Ð PlayActionAsync ¤È¤·¤Æ¤¤¤Þ¤¹¡£
¡¡await ¥¡¼¥ï¡¼¥É¤òÀèƬ¤Ë¤Ä¤±¤ë¤³¤È¤Ç¡¢ÈóƱ´ü½èÍý¤ò¼Â¹Ô¤Ç¤¤Þ¤¹¡£
¤³¤ì¤Ï
yield return ÉդΠStartCoroutine ¤ÈƱ¤¸Ìò³ä¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢
ÈóƱ´ü½èÍý¤¬´°Î»¤¹¤ë¤Þ¤Ç¼¡¤Î½èÍý¤Ë¤Ï°Ü¹Ô¤·¤Þ¤»¤ó¡£
¡¡¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï¼Â¹Ô¤·¤Æ¤¹¤°¤Ë¼¡¤Î½èÍý¤Ë°Ü¹Ô¤·¤Þ¤·¤¿¤¬¡¢
async / await ¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï
ÂÔµ¡¤¹¤ë¤³¤È¤¬Á°Äó¤Ë¤Ê¤Ã¤Æ¤¤¤ëÈóƱ´ü½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£