ºÇ½ª¹¹¿·¡§
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 ¤È¤·¤Æ¤ß¤Æ½Å¤ßÉÕ¤±¤Ç·×»»¤¹¤ë¤¿¤á¡¢¤½¤ì¤¾¤ì¤ÎÃͤÏÂ礤¤¤Û¤ÉÁªÂò¤µ¤ì¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(ÀßÄê¸å)

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