¡¡¥Ü¥¹¤Î¹ÔÆ°¥Ñ¥¿¡¼¥ó¤ò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 ʸ¤¬ºÇ½é¤ËÌá¤ê¡¢ºÆÅÙ¡¢¥Ü¥¹¤Î¹ÔÆ°¤ò¥é¥ó¥À¥à¤Ç·èÄꤷ¡¢¹ÔÆ°¤ò·«¤êÊÖ¤·¤Þ¤¹¡£