¡¡¼¡¤Ë¡¢¿·¤·¤¤ GameEvent ¤òºîÀ®¤·¤Þ¤¹¡£
¡¡
GameEventBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤¿¡¢GameEventCameraManipulator ¥¹¥¯¥ê¥×¥È¤òºîÀ®¤·¤Þ¤¹¡£
¡¡¤³¤ì¤Ï¡¢¤Û¤«¤Î GameEvent ¤ÈƱ¤¸¤è¤¦¤Ë¡¢È¯À¸¤µ¤»¤¿¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë GameEventHander ¤È¤³¤ì¤ò¥¢¥¿¥Ã¥Á¤·¤Æ¡¢¤½¤³¤Ë¥¢¥µ¥¤¥ó¤·¤ÆÍøÍѤ·¤Þ¤¹¡£
¤è¤Ã¤Æ¡¢Cinemachine ¤Ë¤è¤ë¥¤¥Ù¥ó¥È¤â¡¢Â¾¤Î¥¤¥Ù¥ó¥È¤ÈƱÍÍ¡¢ÁȤ߹ç¤ï¤»¤ÆÍøÍѤ¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
using System.Collections;
using UnityEngine;
using Cinemachine;
using DG.Tweening;
/// <summary>
/// Main Camera ¤Î Cinemachine Brain ¤Ë¤Æ2Âæ¤Î¥«¥á¥é¤ÎÀÚ¤êÂؤ¨Â®ÅÙ¤ÎÀßÄê¤ò¤ª¤³¤Ê¤Ã¤Æ¤ª¤¯
/// </summary>
public class GameEventCameraManipulator : GameEventBase
{
[SerializeField] private CinemachineVirtualCamera mainCamera; // ¥á¥¤¥ó¤Î Cinemachine ¥«¥á¥é
[SerializeField] private CinemachineVirtualCamera eventCamera; // ¥¤¥Ù¥ó¥ÈÍѤΠCinemachine ¥«¥á¥é
[SerializeField] private Transform target; // °ÜÆ°¤µ¤»¤¿¤¤ÂоÝʪ(¤Ê¤±¤ì¤ÐÉÔÍ×)
[SerializeField] private Transform destinationTran; // °ÜÆ°Àè
[SerializeField] private float moveDuration; // °ÜÆ°»þ´Ö
// ÈóÁªÂò»þ¤Î¥Ð¡¼¥Á¥ã¥ë¥«¥á¥é¤ÎÍ¥ÀèÅÙ
[SerializeField] private int unselectedPriority = 0;
// ÁªÂò»þ¤Î¥Ð¡¼¥Á¥ã¥ë¥«¥á¥é¤ÎÍ¥ÀèÅÙ
[SerializeField] private int selectedPriority = 10;
private bool isCameraTransitionComplete = false;
private float intervalTime = 2.0f;
/// <summary>
/// Cinemachine ¤ÎµóÆ°À©¸æ
/// </summary>
/// <returns></returns>
public override IEnumerator ExecuteEventCoroutine() {
if (isCameraTransitionComplete) yield break;
// ¥«¥á¥é¤ÎÍ¥Àè½ç°Ì¤ÎÀÚ¤êÂؤ¨
mainCamera.Priority = unselectedPriority;
eventCamera.Priority = selectedPriority;
// ¥«¥á¥é¤¬ÌÜɸ¤È¤Ê¤ëÂоݤΰÌÃ֤˰ÜÆ°¤¹¤ë¤Þ¤ÇÂÔµ¡
yield return new WaitForSeconds(intervalTime);
// ÌÜɸ¤Î°ÜÆ°(¥«¥á¥é¤Ï¼«Æ°Äɽ¾)
if (target) {
yield return target.DOMove(destinationTran.position, moveDuration)
.SetEase(Ease.Linear)
.SetLink(gameObject)
.WaitForCompletion();
}
// ¥«¥á¥é¤ÎÍ¥Àè½ç°Ì¤ÎÀÚ¤êÂؤ¨(¸µ¤ËÌ᤹)
eventCamera.Priority = unselectedPriority;
mainCamera.Priority = selectedPriority;
// ¥«¥á¥é¤¬¥×¥ì¥¤¥ä¡¼¤Î°ÌÃÖ¤ËÌá¤ë¤Þ¤ÇÂÔµ¡
yield return new WaitForSeconds(intervalTime);
isCameraTransitionComplete = true;
yield return false;
}
}
¡¡¤³¤Îµ¡Ç½¤Ï¡¢Cinemachine ¤Î¥«¥á¥é¤ÎÀÚ¤êÂؤ¨¤È¡¢¥«¥á¥é¤¬ÀÚ¤êÂؤï¤Ã¤¿¤¢¤È¡¢¿·¤·¤¤ÂоÝʪ¤Î°ÜÆ°Í̵¤òÁÛÄꤷ¤ÆºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£
¡¡11¹ÔÌܤÈ12¹ÔÌܤˤϡ¢¤½¤ì¤¾¤ì¤Î¥«¥á¥é¤ò¥¢¥µ¥¤¥ó¤·¤Þ¤¹¡£¤É¤Á¤é¤â Cinemachine ¤Ç¤¹¡£
¡¡14¹ÔÌÜ¡Á16¹ÔÌܤϡ¢¥«¥á¥é¤¬ÀÚ¤êÂؤï¤Ã¤¿¤¢¤È¤Ë¡¢ÀÚ¤êÂؤï¤Ã¤¿Àè¤Ë¤¢¤ëÂоÝʪ¤¬°ÜÆ°¤¹¤ë¾ì¹ç¤ÎÀßÄêÃͤǤ¹¡£
ÂоÝʪ¤¬°ÜÆ°¤·¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢Target ¤È DestinationTran ¤Ï None ¤Î¤Þ¤Þ¤Ç¹½¤¤¤Þ¤»¤ó¡£
¡¡¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤ÎÆâÍƤÏ
£±¡¥¥«¥á¥é¤Î Priority ¤ÎÀÚ¤êÂؤ¨
£²¡¥DOTween ¤Ë¤è¤ëÂоÝʪ¤Î°ÜÆ°(º£²ó¤Ï¡¢¤³¤ì¤Ï¤·¤Ê¤¤)
£³¡¥¸µ¤Î¥«¥á¥é¤ËÌ᤹¤¿¤á¤Ë¡¢ºÆÅÙ¥«¥á¥é¤Î Priority ¤ÎÀÚ¤êÂؤ¨
¡¡¤È¤¤¤¦Î®¤ì¤Ç¤¹¡£½èÍý¤ÎÆâÍƤòÆɤ߲ò¤¤¤¿¾å¤Ç³èÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
µ½Ò¤¹¤ëºÝ¤Ë¤Ï¡¢¤É¤ó¤Ê½èÍý¤ò½ñ¤¤¤Æ¤¤¤ë¤Î¤«¤ò¥¤¥á¡¼¥¸¤·¤Ê¤¬¤é½ñ¤¤¤Æ¤¤¤¯¤È¤è¤¤¤È»×¤¤¤Þ¤¹¡£