ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2023ǯ06·î25Æü(Æü) 17:49:51ÍúÎò
¡¡¥Ü¥¹¤Ë¸Â¤é¤º¤Ç¤¹¤¬¡¢¤¢¤ë°ìÄê¤Î¹Ôư¥Ñ¥¿¡¼¥ó¤¬¤¢¤Ã¤Æ¡¢¤½¤ÎÃæ¤«¤é¥é¥ó¥À¥à¤Ê¹Ôư¤ò¹Ô¤¦Ê¬´ô½èÍý¤¬¤¢¤ê¤Þ¤¹¡£
¡¡¶ñÂÎŪ¤Ê¹ÔưÆâÍÆ°Ê³°¤Ë¤Ä¤¤¤Æ¤Î¡¢Ê¬´ô½èÍý¤Î¼ÂÁõÎã¤òÄ󼨤·¤Þ¤¹¡£¹ÔưÆâÍÆ¤Ï¼«Ê¬¤Ç¹Í¤¨¤Æ½ñ¤¤Þ¤·¤ç¤¦¡£
¡¡²¼µ¥µ¥ó¥×¥ëư²è¤Ç¤Ï¡¢Çò¤¤ Cube ¤¬¥Ü¥¹Ìò¤Ç¤¹¡£
¡ã¼ÂÁõư²è¡ä
ư²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯
¡¡¤³¤Îµóư¤¬Àµ¾ï¤Ëưºî¤¹¤ë¤³¤È¤¬³Îǧ¤Ç¤¤¿¤é¡¢¼ÂºÝ¤Ë¼«Ê¬¤Ç£³£Ä¥â¥Ç¥ë¤òÇÛÃÖ¤·¡¢¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Ê¤É¤ÎÀßÄê¤È
¹ÔưÆâÍÆ¤Î½èÍý¤òÄɲ乤뤳¤È¤Ç¡¢Ê¬´ô¤Ë±þ¤¸¤¿¹Ôư¤ò¼Â¹Ô¤µ¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡ã´°À®Îã¡ä
ư²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯
¡¡Ç¤°Õ¤Î¥¢¥»¥Ã¥È¤Ê¤É¤«¤é¡¢¥Ü¥¹Ìò¤È¤Ê¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¥·¡¼¥ó¤ËÇÛÃÖ¤·¡¢¼«Ê¬¤Î¥²¡¼¥à¤Ë¤ª¤¤¤ÆÉ¬ÍפÊÀßÄê¤ò¹Ô¤¤¤Þ¤¹(¥³¥é¥¤¥À¡¼¤Ê¤É)
¤³¤Î¶µºà¤Ç¤Ï²¾¤Ë Cube ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¥Ü¥¹¤È¤·¤Æ¸«Î©¤Æ¤ÆÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢¥Ü¥¹¤Î°ÜưÀè¤È¤·¤Æ¡¢Create Empty ¤ò¹Ô¤Ã¤Æ¶õ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÊ£¿ôºîÀ®¤·¡¢¤½¤ì¤ò¤µ¤é¤Ë¡¢¥Õ¥©¥ë¥ÀÌò¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Þ¤È¤á¤ÆÃÖ¤¤Þ¤¹¡£
¤³¤ÎÃÏÅÀÆâ¤Î¤¤¤º¤ì¤«¤Î°ÌÃ֤إé¥ó¥À¥à¤Ø°Üư¤¹¤ë¤è¤¦¤ËÁÛÄꤷ¤Æ¤¤¤Þ¤¹¡£
Transform ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤·¤«»ý¤¿¤Ê¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ï¡¢¥é¥Ù¥ë¤òÀßÄꤹ¤ë¤³¤È¤Ç Scene¥Ó¥å¡¼¤Ç²Ä»ë²½½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¥Ò¥¨¥é¥ë¥¡¼²èÁü

Scene ¥Ó¥å¡¼²èÁü(Çò¤¤ Cube ¤¬¥Ü¥¹Ìò¡£Â¾¤Î¥é¥Ù¥ë¤Î¤¢¤ë¤â¤Î¤¬°ÜưÀè)

¡¡¥Õ¥©¥ë¥ÀÌò¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃ֤ˤĤ¤¤Æ¤Ï¡¢¥Ü¥¹¤Î°ÌÃÖ¤ÈÆ±¤¸¤Ë¤·¤Æ¤ª¤¯¤È¡¢Â¾¤Î°ÌÃÖ¤ò·è¤á¤ëºÝ¤ËÁêÂÐŪ¤Ë¹Í¤¨¤ë¤³¤È¤¬¤Ç¤¤ÆÊØÍø¤Ç¤¹¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(¥Õ¥©¥ë¥ÀÌò)

¡¡¥Ü¥¹¤Î¥é¥ó¥À¥à¹Ôư¤Èʬ´ô½èÍý¤Î¼ÂÁõÎã¤Ç¤¹¡£
¡¡¼ÂºÝ¤Î¹ÔưÆâÍÆ¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ì¤¾¤ì¤Î¥²¡¼¥à¤ËŬ¤·¤¿ÆâÍÆ¤Ç¼ÂÁõ¤ò¤ª¤³¤Ê¤Ã¤Æ¤¯¤À¤µ¤¤¡£
¤³¤³¤Ç¤Ï½èÍý¤Î³Îǧ¤Î¤¿¤á¡¢Debug.Log ¥á¥½¥Ã¥É¤Î¤ßµ½Ò¤·¤Æ¤¤¤Þ¤¹¡£
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using DG.Tweening;
/// <summary>
/// ¥Ü¥¹¤Î¹Ôư¥Ñ¥¿¡¼¥ó
/// </summary>
public enum BossActions
{
MoveToPosition,
AttackA,
AttackB,
Idle,
MoveAndAttack
}
/// <summary>
/// ¥Ü¥¹¤Î¹Ôư¥Ñ¥¿¡¼¥ó¤´¤È¤Î½Å¤ßÉÕ¤±
/// </summary>
[System.Serializable]
public class BossActionWeight
{
public BossActions Action;
public int Weight;
}
public class BossBattle : MonoBehaviour
{
[SerializeField, Header("°Üư®ÅÙ")]
private float moveSpeed = 10f;
[SerializeField, Header("¼¡²ó¤Î¹Ôư¤Þ¤Ç¤ÎÂÔµ¡»þ´Ö")]
private float coolDownTime = 5f;
[SerializeField, Header("°ÜưÀè¤È¤Ê¤ëÃÏÅÀ")]
private Transform[] targetTrans;
[SerializeField, Header("ÂÎÎÏ")]
private float health;
[SerializeField, Header("°Üư»þ¤Î¥¢¥Ë¥áÀßÄê")]
private Ease moveEase = Ease.Linear;
[SerializeField, Header("¹Ôư¥Ñ¥¿¡¼¥ó¤´¤È¤Î½Å¤ßÉÕ¤±")]
private List<BossActionWeight> ActionWeights;
[SerializeField, Header("Ä̾ï¤Î¹Ôư¥Ñ¥¿¡¼¥ó")]
private BossActions[] NormalActionPattern;
[SerializeField, Header("¥Ø¥ë¥¹¤¬È¾Ê¬°Ê²¼¤Ë¤Ê¤Ã¤¿»þ¤Î¹Ôư¥Ñ¥¿¡¼¥ó")]
private BossActions[] HalfHealthActionPattern;
private bool inCoolDown = false;
private float initialHealth;
private BossActions currentAction; // ¸½ºß¤Î¹Ôư
public BossActions CurrentAction => currentAction; // ¥×¥í¥Ñ¥Æ¥£
void Start()
{
// ActionWeights ÊÑ¿ô¤¬¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤é½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤(ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤¤)¾ì¹ç¡¢List ¤ò½é´ü²½¤¹¤ë
if(ActionWeights == null || ActionWeights.Count == 0)
{
ActionWeights = new List<BossActionWeight>
{
new BossActionWeight {Action = BossActions.MoveToPosition, Weight = 1},
new BossActionWeight {Action = BossActions.AttackA, Weight = 1},
new BossActionWeight {Action = BossActions.AttackB, Weight = 1},
new BossActionWeight {Action = BossActions.Idle, Weight = 1},
new BossActionWeight {Action = BossActions.MoveAndAttack, Weight = 0}
};
}
initialHealth = health;
// ¥Ü¥¹¤Î¹Ôư³«»Ï
StartCoroutine(BossBehavior());
}
/// <summary>
/// ¥Ü¥¹¤Î¹Ôư
/// </summary>
/// <returns></returns>
private IEnumerator BossBehavior()
{
while(true) // Keep this loop running as long as the boss is alive.
{
¡¡¡¡¡¡¡¡¡¡¡¡// ¥Ø¥ë¥¹¤¬»Ä¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢¹Ôư¤ò½ªÎ»
if(health <= 0)
{
break; // Stop the loop if the boss is defeated.
}
¡¡¡¡¡¡¡¡¡¡¡¡// ¥é¥ó¥À¥à¤Ê¹Ôư¤ò½Å¤ßÉÕ¤±¤·¤Æ¤¤¤ëÃæ¤«¤é£±¤ÄÁªÂò
currentAction = GetRandomActionByWeight();
¡¡¡¡¡¡¡¡¡¡¡¡// ÁªÂò¤µ¤ì¤¿¹Ôư¤ò¼Â¹Ô
switch(currentAction)
{
case BossActions.MoveToPosition:
// ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë°ÌÃÖ¤ÎÃæ¤Ç¡¢¥é¥ó¥À¥à¤Ê°ÌÃÖ¤Ë°ÜÆ°
MoveToPosition(targetTrans[Random.Range(0, targetTrans.Length)].position);
break;
case BossActions.AttackA:
AttackA();
break;
case BossActions.AttackB:
AttackB();
break;
case BossActions.Idle:
Idle();
break;
case BossActions.MoveAndAttack:
MoveAndAttack(targetTrans[Random.Range(0, targetTrans.Length)].position);
break;
}
yield return new WaitForSeconds(coolDownTime);
}
}
/// <summary>
/// ½Å¤ßÉÕ¤±¤òÍøÍѤ·¤¿¹Ôư¤Î·èÄê
/// </summary>
/// <returns></returns>
private BossActions GetRandomActionByWeight()
{
// ¸½ºß¤Î¥é¥¤¥Õ¤Î»Ä¿ô¤Ë´ð¤Å¤¤¤Æ¡¢Å¬ÀÚ¤Ê¹ÔÆ°¥Ñ¥¿¡¼¥ó¤òÁªÂò
BossActions[] actionPattern = health <= initialHealth / 2 ? HalfHealthActionPattern : NormalActionPattern;
// ¤½¤Î¹Ôư¥Ñ¥¿¡¼¥ó¤Ë´Þ¤Þ¤ì¤ë¹Ôư¤Î¤ß¤Î½Å¤ß¤ò¹ç·×
int totalWeight = ActionWeights.Where(a => actionPattern.Contains(a.Action)).Sum(a => a.Weight);
// ¥é¥ó¥À¥à¤Ê¹Ôư¤òÁª¤Ö¤¿¤á¤ÎÍð¿ô¤ò¼èÆÀ(ÂоݤȤʤëÁªÂò»è¤ÏÁªÂò¤·¤¿¹Ôư¥Ñ¥¿¡¼¥ó¤Î¹Ôư¤À¤±¤Ë¸ÂÄê)
int randomValue = Random.Range(0, totalWeight);
int weightSum = 0;
// Íð¿ô¤«¤éº£²ó¤Î¹Ôư¤ò³ÎÄê(ÂоݤȤʤëÁªÂò»è¤ÏÁªÂò¤·¤¿¹Ôư¥Ñ¥¿¡¼¥ó¤Î¹Ôư¤À¤±¤Ë¸ÂÄê)
for (int i = 0; i < ActionWeights.Count; i++) {
if (!actionPattern.Contains(ActionWeights[i].Action)) {
continue;
}
weightSum += ActionWeights[i].Weight;
if (randomValue < weightSum) {
return ActionWeights[i].Action;
}
}
return BossActions.Idle; // Default return value, in case something goes wrong.
}
private void MoveToPosition(Vector3 target)
{
transform.DOMove(target, moveSpeed).SetEase(moveEase).SetSpeedBased();
Debug.Log("MoveToPosition");
}
private void AttackA()
{
// TODO Implement AttackA here
Debug.Log("AttackA");
}
private void AttackB()
{
// TODO Implement AttackB here
Debug.Log("AttackB");
}
private void Idle()
{
// TODO Idle behavior, do nothing
Debug.Log("Idle");
}
private void MoveAndAttack(Vector3 target)
{
MoveToPosition(target);
AttackA();
// TODO Implement Attack here
Debug.Log("MoveAndAttack");
}
}
¡¡¥Ü¥¹¤Î¹Ôư¥Ñ¥¿¡¼¥ó¤òEnum¤Ç BossActions ¤ÈÄêµÁ¤·¡¢¹Ôư¥Ñ¥¿¡¼¥ó¤Î¼ïÎà¤òÎóµó»Ò¤È¤·¤ÆÅÐÏ¿¤·¤Þ¤¹¡£
/// <summary>
/// ¥Ü¥¹¤Î¹Ôư¥Ñ¥¿¡¼¥ó
/// </summary>
public enum BossActions
{
MoveToPosition,
AttackA,
AttackB,
Idle,
MoveAndAttack
}
¡¡Â¾¤Ë¤â¹Ôư¤Î¼ïÎà¤òÁý¸º¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢¤Þ¤º¤Ï¤³¤Á¤é¤Ë¾ðÊó¤òÅÐÏ¿¤·¤Þ¤¹¡£
¡¡¤³¤Î BossActions ¤Î¤¦¤Á£±¤Ä¤ÎÃͤò¡¢ÊÑ¿ô¤È¤·¤ÆÊÝ»ý¤·¤Þ¤¹¡£
¤³¤ì¤¬¥Ü¥¹¤ÎµóưÀ©¸æ¤Î¥Ù¡¼¥¹¤È¤Ê¤ê¤Þ¤¹¡£
public BossActions currentAction; // ¸½ºß¤Î¹Ôư
¡¡¼¡¤Ë¡¢³Æ¥¢¥¯¥·¥ç¥ó¤ËÂбþ¤¹¤ë½Å¤ß¤òÊÝ»ý¤¹¤ë¥¯¥é¥¹¤òºîÀ®¤·¡¢¤½¤Î¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò¥ê¥¹¥È¤ÇÊÝ»ý¤·¤Þ¤¹¡£
/// <summary>
/// ¥Ü¥¹¤Î¹Ôư¥Ñ¥¿¡¼¥ó¤´¤È¤Î½Å¤ßÉÕ¤±
/// </summary>
[System.Serializable]
public class BossActionWeight
{
public BossActions Action;
public int Weight;
}
// ÊÝ»ý¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
[SerializeField, Header("¹Ôư¥Ñ¥¿¡¼¥ó¤´¤È¤Î½Å¤ßÉÕ¤±")]
private List<BossActionWeight> ActionWeights;
¡¡ÊÑ¿ô¤Ë¤Ï SerializeField°À¤òÉÕÍ¿¤·¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤³¤Î List ¤Ï¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éÀßÄ꤬²Äǽ¤Ç¤¹¡£
¤Þ¤¿ BossActionWeight ¥¯¥é¥¹¤Ë¤â System.Serializable°À¤¬ÉÕÍ¿¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢¥¯¥é¥¹ÆâÉô¤Î¾ðÊó¤â¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éÀßÄ꤬²Äǽ¤Ç¤¹¡£
¡¡²¼µ¤Î¥µ¥ó¥×¥ë²èÁü¤Î¤è¤¦¤ËÍøÍѤ·¤Þ¤¹¡£
BossActions(Enum) ¤ÎÅÐÏ¿½ç¤ÏÎóµó»Ò¤Î½çÈÖÄ̤ê¤Ç¤Ê¤¯¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¤¬¡¢¸«¤ä¤¹¤µ¤ò¹Íθ¤·¤Æ¡¢Æ±¤¸Ê¤ӽç¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
Ʊ¤¸Îóµó»Ò¤ò»ØÄꤷ¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü

¡¡¤³¤Î ActionWeights(List) ¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢LINQ¤ò»ÈÍѤ·¤ÆÆÃÄê¤Î¾ò·ï¤òËþ¤¿¤¹½Å¤ß¤À¤±¤ò¹ç·×¤·¤¿¤ê¡¢ÆÃÄê¤Î¹Ôư¤òÃê½Ð¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡ºÇ¸å¤Ë¥Ü¥¹¤Î¹Ôư¤ò¥³¥ó¥È¥í¡¼¥ë¤¹¤ë¤¿¤á¤Î¥¯¥é¥¹¤òÄêµÁ¤·¤Þ¤¹¡£
¡¡³Æ¼ï¤ÎÊÑ¿ô¤Ï¡¢Ç¤°Õ¤ËÁý¸º¤·¤Æ¤¯¤À¤µ¤¤¡£
º£²ó¤Ï¡¢Ä̾ï¤Î¹Ôư¥Ñ¥¿¡¼¥ó¤È¡¢¥Ø¥ë¥¹¤¬È¾Ê¬°Ê²¼¤Ë¤Ê¤Ã¤¿»þ¤Î¹Ôư¥Ñ¥¿¡¼¥ó¤ò¡¢
¤½¤ì¤¾¤ìNormalActionPattern¤ÈHalfHealthActionPatternÇÛÎó¤ÇÊÝ»ý¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢Unity¤Î¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éľÀÜ¡¢¤É¤Î¹Ôư¤¬¤É¤Î¾õÂ֤DzÄǽ¤«¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
[SerializeField, Header("Ä̾ï¤Î¹Ôư¥Ñ¥¿¡¼¥ó")]
private BossActions[] NormalActionPattern;
[SerializeField, Header("¥Ø¥ë¥¹¤¬È¾Ê¬°Ê²¼¤Ë¤Ê¤Ã¤¿»þ¤Î¹Ôư¥Ñ¥¿¡¼¥ó")]
private BossActions[] HalfHealthActionPattern;
¡¡²¼µ¤Î¥µ¥ó¥×¥ë²èÁü¤Î¤è¤¦¤Ë¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éÅÐÏ¿¤·¤ÆÍøÍѤ·¤Þ¤¹¡£
ÅÐÏ¿¤¹¤ë¿ô¤ä½çÈ֤ʤɤÏǤ°Õ¤Ç¤¹¡£¤³¤³¤Ç¤âƱ¤¸Îóµó»Ò¤ÏÅÐÏ¿¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü

¡¡Start ¥á¥½¥Ã¥É¤Ç¤Ï¡¢ActionWeights(List) ¤¬¤â¤·¥¤¥ó¥¹¥Ú¥¯¥¿¤«¤é½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢³Æ¹Ôư¤´¤È¤Ë¥Ç¥Õ¥©¥ë¥È¤Î½Å¤ß¤òÀßÄꤷ¤Þ¤¹¡£
¾¤Ë¤âÀßÄ꤬¤¢¤ì¤Ð Start ¥á¥½¥Ã¥ÉÆâ¤ÇÀßÄê¤ò¤·¤Þ¤¹¡£
¤½¤ì¤é¤¬½ªÎ»¤·¤Æ¤«¤é¡¢¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Ç¤¢¤ë BossBehavior ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Þ¤¹¡£
¡¡BossBehavior ¥á¥½¥Ã¥É¤Ï while ʸ¤Ë¤è¤Ã¤Æ¥ë¡¼¥×½èÍý¤¬¹Ô¤ï¤ì¤Æ¤ª¤ê¡¢¥Ü¥¹¤Î¥Ø¥ë¥¹¤¬ 0 ¤Ë¤Ê¤ë¤Þ¤Ç¡¢¤³¤Î¥ë¡¼¥×½èÍý¤¬·«¤êÊÖ¤µ¤ì¤Þ¤¹¡£
¤½¤·¤Æ¡¢°ìÄê»þ´Ö¤´¤È¤Ë¡¢¥Ü¥¹¤¬¹Ôư¤¹¤ë¥í¥¸¥Ã¥¯¤¬ÁÈ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
¡¡GetRandomActionByWeight()¥á¥½¥Ã¥É¤Ç¤Ï¡¢¤Þ¤º¸½ºß¤Î¥Ø¥ë¥¹¤Ë´ð¤Å¤¤¤ÆÅ¬ÀÚ¤Ê¹ÔÆ°¥Ñ¥¿¡¼¥ó¤òÁªÂò¤·¤Þ¤¹¡£
¼¡¤Ë¡¢¤½¤Î¹Ôư¥Ñ¥¿¡¼¥ó¤Ë´Þ¤Þ¤ì¤ë¹Ôư¤Î¤ß¤Î½Å¤ß¤ò¹ç·×¤·¤Þ¤¹¡£¤½¤·¤Æ¡¢¥é¥ó¥À¥à¤Ê¹Ôư¤òÁª¤Ó¤Þ¤¹¤¬¡¢¤½¤ÎºÝ¤ËÁªÂò»è¤ÏÁªÂò¤·¤¿¹Ôư¥Ñ¥¿¡¼¥ó¤Î¹Ôư¤À¤±¤Ë¸ÂÄꤷ¤Þ¤¹¡£
¡¡¤½¤Î¸å¡¢switch ʸ¤Ë¤è¤ê¡¢ÁªÂò¤µ¤ì¤¿¹Ôư¤Ë±þ¤¸¤¿¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ç¡¢¥Ü¥¹¤Î¹Ôư¤ò¹Ô¤¤¤Þ¤¹¡£
°Üư¤Î½èÍý¤Ë¤Ä¤¤¤Æ¤Ï¡¢DOTween ¤òÍøÍѤ·¤¿½èÍý¤ò²¾¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£targetTrans ÇÛÎóÊÑ¿ô¤ËÅÐÏ¿¤·¤Æ¤¢¤ë¤¤¤º¤ì¤«£±¤Ä¤Î°ÌÃÖ¤ò¥é¥ó¥À¥à¤ÇÁªÂò¤·¤Æ°Üư¤·¤Þ¤¹¡£
[SerializeField, Header("°ÜưÀè¤È¤Ê¤ëÃÏÅÀ")]
private Transform[] targetTrans;
// ÁªÂò¤µ¤ì¤¿¹Ôư¤ò¼Â¹Ô
switch(currentAction)
{
¡¡¡¡case BossActions.MoveToPosition:
// ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë°ÌÃÖ¤ÎÃæ¤Ç¡¢¥é¥ó¥À¥à¤Ê°ÌÃÖ¤Ë°ÜÆ°
MoveToPosition(targetTrans[Random.Range(0, targetTrans.Length)].position);
break;
¡¡¤É¤ÎÊÑ¿ô¤¬¤É¤Î½èÍý¤ËÂФ·¤Æ¡¢¤É¤Î¤è¤¦¤ËÍøÍѤµ¤ì¤Æ¤¤¤ë¤«¤òÇİ®¤·¤Æ¤ª¤¯¤³¤È¤¬ÂçÀڤǤ¹¡£
¡¡°Üư½èÍý¤Ë¤Ï DOMove ¥á¥½¥Ã¥É¤Ë²Ã¤¨¤Æ¡¢SetEase ¥á¥½¥Ã¥É¤È SetSpeedBase ¥á¥½¥Ã¥É¤ò¥ª¥×¥·¥ç¥ó¤ÇÉÕÍ¿¤·¤Æ¤¤¤Þ¤¹¡£
SetEase ¥á¥½¥Ã¥É¤Î°ú¿ô¤Ë¤ÏÊÑ¿ô¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éÀßÄ꤬²Äǽ¤Ç¤¹¡£¥²¡¼¥à²èÌ̤ò¸«¤Ê¤¬¤é¡¢°Üư¤Î¥¢¥Ë¥á¤òÄ´À°¤·¤Þ¤·¤ç¤¦¡£
¤Þ¤¿¡¢SetSpeedBase ¥á¥½¥Ã¥É¤òÉÕÍ¿¤¹¤ë¤³¤È¤Ç¡¢DOMove ¥á¥½¥Ã¥É¤ÎÂè2°ú¿ô¤Î»ØÄ꤬¡Ö»þ´Ö¡×¤Ç¤Ï¤Ê¤¯¡Ö®Å١פȤ·¤ÆÍøÍѤµ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢°ÜưÀè¤È¤Ê¤ëÌÜɸÃÏÅÀ¤Î±ó¶á¤Ë¤è¤ë®ÅÙ¤ÎÊѲ½¤òÇÓ½ü¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
[SerializeField, Header("°Üư®ÅÙ")]
private float moveSpeed = 10f;
[SerializeField, Header("°Üư»þ¤Î¥¢¥Ë¥áÀßÄê")]
private Ease moveEase = Ease.Linear;
private void MoveToPosition(Vector3 target)
{
transform.DOMove(target, moveSpeed).SetEase(moveEase).SetSpeedBased();
Debug.Log("MoveToPosition");
}
»²¹Í¥µ¥¤¥È
Qiita @BEATnonanka ÍÍ
DOTween´°Á´¤ËÍý²ò¤¹¤ë¤½¤Î7 ¥ª¥×¥·¥ç¥óÊÔ
¥Ï¥ë¥·¥ª¥ó¥Ö¥í¥° ÍÍ
Dotween¤Ç¥ª¥Ö¥¸¥§¥¯¥È¤ò°Üư¤·¤¿¤ê¤¹¤ëºÝ¤Ë¡¢»þ´Ö¤Ç¤Ê¤¯Â®ÅÙ¤ÇÆ°¤«¤¹ÊýË¡
¡¡ºÇ¸å¤Ë»ØÄꤵ¤ì¤¿ÂÔµ¡»þ´Ö¤ËÆþ¤Ã¤Æ¤«¤é¡¢while ʸ¤¬ºÇ½é¤ËÌá¤ê¡¢ºÆÅÙ¡¢¥Ü¥¹¤Î¹Ôư¤ò¥é¥ó¥À¥à¤Ç·èÄꤷ¡¢¹Ôư¤ò·«¤êÊÖ¤·¤Þ¤¹¡£
¡¡¥Ü¥¹¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(ÀßÄêÁ°)

¡¡³ÆÇÛÎó¤È List ¤ò½é´ü²½¤·¡¢Ç¤°Õ¤Î¾ðÊó¤òÀßÄꤷ¤Þ¤¹¡£
¡¡¥Ü¥¹¤Î°ÜưÀè¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤³¤ÎÎã¤Ç¤Ï£³²Õ½ê¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¡¡BossActionWeight ¤Î Weight ¤ÎÃͤâǤ°Õ¤Ç¤¹¡£³Æ Enum ¤è¤ê½ÅÊ£¤·¤Ê¤¤¤è¤¦¤Ë£±¤Ä¤òÁªÂò¤·¡¢ÃͤòÀßÄꤷ¤Þ¤¹¡£
¤³¤ÎÃͤϥѡ¼¥»¥ó¥Èɽ¼¨¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£³Æ Weight ¤Î¹ç·×Ãͤò 100 ¤È¤·¤Æ¤ß¤Æ½Å¤ßÉÕ¤±¤Ç·×»»¤¹¤ë¤¿¤á¡¢¤½¤ì¤¾¤ì¤ÎÃͤÏÂ礤¤¤Û¤ÉÁªÂò¤µ¤ì¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(ÀßÄê¸å)

¡¡¥½¡¼¥¹¥³¡¼¥É¤Î½èÍý¤ò¸«Ä¾¤·¤Æ¡¢¤É¤¦¤¤¤¦½èÍý¤¬½ñ¤«¤ì¤Æ¤¤¤ë¤Î¤«¡¢¤Þ¤¿¡¢¥²¡¼¥à¤ò¼Â¹Ô¤·¤¿ºÝ¤Ë¤Ï
¤É¤¦¤¤¤Ã¤¿µóư¤¬ÁÛÄꤵ¤ì¤ë¤Î¤«¤òÍý²ò¤·¤Æ¤«¤é¡¢¥²¡¼¥à¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£
¡¡¥Ç¥Ð¥Ã¥°¤ò¹Ô¤¦ºÝ¤Ë¤Ï»öÁ°¤ÎÍý²ò¤¬½ÅÍפǤ¹¡£¤¿¤À¥²¡¼¥à¤¬Æ°¤±¤Ð¤¤¤¤¡¢¤È¤¤¤¦¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¡ã³Îǧư²è¡ä
ư²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯
¡¡°Ê¾å¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¤ò¥Ù¡¼¥¹¤Ë²þÎɤ·¤Æ¡¢¼«Ê¬¤À¤±¤Î¥Ç¥¶¥¤¥ó¤ò¹Ô¤Ã¤Æ¤ß¤Þ¤·¤ç¤¦¡£
¡¡°Ê¾å¤Ç¤³¤Î¼ê½ç¤Ï½ªÎ»¤Ç¤¹¡£
¡¡¼¡¤Ï¡¡±þÍÑ£²¡¡¡¼¥«¥Ã¥È¥·¡¼¥ó¤Î¼ÂÁõÎã¡¡Ý¡¡¤Ç¤¹¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°




¥³¥á¥ó¥È¤ò¤«¤¯