ºÇ½ª¹¹¿·¡§ orika_ex_miyako 2023ǯ09·î11Æü(·î) 10:46:41ÍúÎò
Ê£¿ô¤ÎŨ¤ò¸«¤Ä¤±¤¿¤ê¡¢ÄÉÈø¤¹¤ëµ¡Ç½¤âÉÕ¤¤¤Æ¤¤¤Þ¤¹¡£
¡¡GameData ¥¯¥é¥¹¤¬¤¢¤ê¡¢¤½¤³¤Ç¤ÏŨ¤Î¾ðÊó¤ÈÄÉÈøÂоݤò List ¤Ç´ÉÍý¤·¤Æ¤¤¤Þ¤¹¡£
Ũ¤Î¾ðÊó¤Î List ¤Ë¤Ï¡¢Å¨¤ÎÀ¸À®»þ¤ËŨ¤Î¾ðÊó¤¬Äɲ䵤ì¤ë»ÅÁȤߤǤ¹¡£
ÄÉÈøÂоݤΠList ¤Ë¤Ï¡¢¥×¥ì¥¤¥ä¡¼¤Ë¶á¤¤Å¨¤Î¾ðÊ󤬤½¤ÎÅÔÅÙÄɲ䵤졢ÃƤ¬¤Ê¤¯¤Ê¤ë¤ÈƱ»þ¤Ë List ¤«¤é¤âºï½ü¤µ¤ì¤ë»ÅÁȤߤǤ¹¡£
¡¡List ¤Î·¿¤ÏŨ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë EnemyController ¥¯¥é¥¹¤Ç¤¹¡£
GameObject ·¿¤è¤ê¤âÌ¿Îá¤ò½Ð¤¹ºÝ¤Ë GetComponent ¤¬ÉÔÍפȤʤꡢͻÄ̤¬Íø¤¯¤¿¤á¤Ç¤¹¡£
¡¡²¼µ¤Ë¥µ¥ó¥×¥ë¤òÄ󼨤·¤Þ¤¹¡£
EnemyController.cs
GameData.cs
¡¡Update ¥á¥½¥Ã¥ÉÆâ¤Ë¤¢¤ë²¼µ¤Î½èÍý¤Ë¤è¤Ã¤ÆŨ¤òÄÉÈø¤·¤Æ¤¤¤ë¤¿¤á¡¢ºï½ü¤¹¤ë¤«¡¢¥³¥á¥ó¥È¥¢¥¦¥È¤¹¤ì¤ÐÄÉÈø¤Ï¤·¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
// ÄÉÈøÂоݤòÄɤ¤¤«¤±¤ë transform.position = Vector2.MoveTowards(transform.position, target.transform.position, bulletSpeed * Time.deltaTime);
¡¡transform.position¤Ï¡¢¤³¤Î¥³¡¼¥É¤ò´Þ¤à¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¸½ºß¤Î°ÌÃÖ¤òɽ¤·¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢ÃƤΰÌÃ֤Ǥ¹¡£
¡¡Vector2.MoveTowards ¥á¥½¥Ã¥É¤Ï¡¢¸½ºß¤Î°ÌÃÖ¤«¤é»ØÄꤵ¤ì¤¿°ÌÃ֤˸þ¤«¤Ã¤Æ°ÜÆ°¤¹¤ë¤¿¤á¤Î¥á¥½¥Ã¥É¤Ç¤¹¡£
Âè1°ú¿ô¤Ë»ØÄꤷ¤¿ÂоÝ(ÃÆ)¤ò¡¢Âè2°ú¿ô¤Ë»ØÄꤵ¤ì¤¿°ÌÃÖ¡Êtarget.transform.position¡Ë¤Ë¸þ¤«¤Ã¤Æ¡¢ÃƤ¬¿Ê¤à¤È¤¤Î¿·¤·¤¤°ÌÃÖ¤ò·×»»¤·¤Þ¤¹¡£
¡¡target.transform.position ¤Ï¡¢ÃƤ¬Äɤ¤¤«¤±¤ëÂоݤΰÌÃÖ¤òɽ¤·¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢ÃƤϤ³¤Î°ÌÃ֤˸þ¤«¤Ã¤Æ°ÜÆ°¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¡£
¡¡bulletSpeed * Time.deltaTime¤Ï¡¢ÃƤοʤதµ¤òɽ¤·¤Þ¤¹¡£
bulletSpeed ¤ÏÃƤΰÜư®ÅÙ¤òɽ¤·¡¢Time.deltaTime ¤Ï¥Õ¥ì¡¼¥à´Ö¤Î»þ´Öº¹¤ò¹Íθ¤·¤Æ°ÜÆ°µ÷Î¥¤òÄ´À°¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥²¡¼¥à¤¬¤É¤ì¤À¤±Á᤯¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¤«¤Ë´Ø·¸¤Ê¤¯¡¢°ìÄê¤Î®¤µ¤Ç°ÜÆ°¤·¤Þ¤¹¡£
¡¡°Ê¾å¡¢¤³¤Î½èÍý¤ÏÃƤ¬Ëè¥Õ¥ì¡¼¥à¤´¤È¤ËÂоݤΰÌÃ֤˸þ¤«¤Ã¤Æ°ìÊâ¿Ê¤à¤³¤È¤òɽ¤·¤Æ¤¤¤Þ¤¹¡£
ÃÆ¤Ï bulletSpeed ¤Ç»ØÄꤵ¤ì¤¿Â®ÅÙ¤ÇÂоݤòÄɤ¤¤«¤±¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢ÃƤÏÌÜɸ¤òÄÉÀפ·¡¢¤½¤Î°ÌÃ֤˶á¤Å¤¤¤Æ¤¤¤¤Þ¤¹¡£
»²¹Í¥µ¥¤¥È
Unity ¸ø¼°¥¹¥¯¥ê¥×¥È¡¦¥ê¥Õ¥¡¥ì¥ó¥¹
Vector2.MoveTowards
var sortedEnemies = GameData.instance.enemiesList.OrderBy(enemy => Vector2.Distance(transform.position, enemy.transform.position));
¡¡¤³¤ÎÉôʬ¤Ç¤Ï¡¢enemiesList ¤È¸Æ¤Ð¤ì¤ë¥ê¥¹¥ÈÆâ¤ÎŨ¥¥ã¥é¥¯¥¿¡¼¤ò¡¢¥×¥ì¥¤¥ä¡¼¤Î°ÌÃÖ¤«¤é¤Îµ÷Î¥¤¬¶á¤¤½ç¤ËʤÙÂؤ¨¤Æ¤¤¤Þ¤¹¡£
¡¡GameData.instance.enemiesList ¤Ï GameData ¥¯¥é¥¹¤«¤é¼èÆÀ¤·¤¿Å¨¥¥ã¥é¥¯¥¿¡¼¤Î¥ê¥¹¥È¤Ç¤¹¡£
¡¡.OrderBy(enemy => Vector2.Distance(transform.position, enemy.transform.position)) ¤Î¤¦¤Á¡¢
OrderBy ¥á¥½¥Ã¥É¤Ï¡¢»ØÄꤵ¤ì¤¿¾ò·ï¤Ë½¾¤Ã¤ÆÍ×ÁǤòʤÙÂؤ¨¤ë¤¿¤á¤ÎLINQ¥á¥½¥Ã¥É¤Ç¤¹¡£
¤³¤Î¾ì¹ç¡¢enemy ¤È¤¤¤¦³ÆŨ¥¥ã¥é¥¯¥¿¡¼¤ËÂФ·¤Æ¡¢Vector2.Distance(transform.position, enemy.transform.position) ¤ò¹Ô¤¤¤Þ¤¹¡£
enemy ¤Î°ÌÃÖ¤«¤é¥×¥ì¥¤¥ä¡¼¤Î°ÌÃ֤ޤǤε÷Î¥¤ò·×»»¤·¤Æ¡¢¤½¤Îµ÷Î¥¤¬¾®¤µ¤¤½ç¤ËʤÙÂؤ¨¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤ì¤Ë¤è¤ê¡¢°ìÈֶᤤŨ¤¬ºÇ½é¤ËÍè¤ë¤è¤¦¤Ë¥½¡¼¥È¤µ¤ì¤¿ sortedEnemies ¤È¤¤¤¦¿·¤·¤¤ List ¤¬´°À®¤·¤Þ¤¹¡£
»²¹Í¥µ¥¤¥È
MicroSoft
Enumerable.OrderBy ¥á¥½¥Ã¥É
target = sortedEnemies.FirstOrDefault(enemy => !GameData.instance.targetList.Contains(enemy));
¡¡¤³¤ÎÉôʬ¤Ç¤Ï¡¢sortedEnemies ¥ê¥¹¥ÈÆ⤫¤éºÇ¤â¶á¤¤Ì¤ÁªÂò¤ÎŨ¡Êtarget¡Ë¤ò¸«¤Ä¤±¤Æ¤¤¤Þ¤¹¡£
¡¡sortedEnemies ¤Ï°ìÈֶᤤŨ¤¬Í×ÁǤκǽé¤ËÍè¤ë¤è¤¦¤Ë¥½¡¼¥È¤µ¤ì¤¿Å¨¥¥ã¥é¥¯¥¿¡¼¤Î¥ê¥¹¥È¤Ç¤¹¡£
.FirstOrDefault(enemy => !GameData.instance.targetList.Contains(enemy)) ¤Î¤¦¤Á FirstOrDefault ¥á¥½¥Ã¥É¤Ï¡¢
»ØÄꤵ¤ì¤¿¾ò·ï¤Ë¹çÃפ¹¤ëºÇ½é¤ÎÍ×ÁǤòÊÖ¤¹LINQ¥á¥½¥Ã¥É¤Ç¤¹¡£
¤³¤³¤Ç¤Ï¡¢enemy ¤È¤¤¤¦³ÆŨ¥¥ã¥é¥¯¥¿¡¼¤ËÂФ·¤Æ¡¢¤½¤ÎŨ¤¬¤Þ¤ÀÁªÂò¤µ¤ì¤Æ¤¤¤Ê¤¤¡ÊtargetList ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¡Ë¾ì¹ç¡¢¤½¤ÎŨ¤ò target ¤ËÀßÄꤷ¤Þ¤¹¡£
targetList ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¤«¤É¤¦¤«¤Ï¡¢Contains ¥á¥½¥Ã¥É¤òÍøÍѤ·¤ÆȽÄꤷ¤Æ¤¤¤Þ¤¹¡£
¡¡°Ê¾å¤Î¤³¤È¤«¤é¡¢¤³¤Î½èÍý¤ÎÌÜŪ¤Ï¡¢¥×¥ì¥¤¥ä¡¼¤«¤éºÇ¤â¶á¤¤Ì¤ÁªÂò¤ÎŨ¤ò¸«¤Ä¤±¤Æ target ¤ËÀßÄꤹ¤ë¤³¤È¤Ç¤¹¡£
»²¹Í¥µ¥¤¥È
MicroSoft
Enumerable.FirstOrDefault ¥á¥½¥Ã¥É
¡¡¾åµ¤Î½èÍý¤Ë¤è¤ê¡¢¥×¥ì¥¤¥ä¡¼¤Ë¶á¤¤Å¨¤«¤é½çÈÖ¤ËÂоÝÀè¤Î List ¤ËÆþ¤ê¤Þ¤¹¡£
// ¥¿¡¼¥²¥Ã¥È¤ò¥ê¥¹¥È¤ËÄɲà GameData.instance.targetList.Add(target);
¡¡¤½¤Î¤¿¤á¡¢£²¤ÄÌܤÎÃƤòȯ¼Í¤·¤¿¾ì¹ç¡¢ºÇ½é¤ÎÂоݤǤϤʤ¯¡¢¼¡¤Ë¶á¤¤Å¨¤òÂоݤȤ·¤Æ¼è¤ê¤Þ¤¹¡£
¡¡¤â¤·¤â¡¢Ê£¿ô¤ÎÃƤòºÇ¤â¶á¤¤Å¨¤Ë¸þ¤±¤Æ¤À¤±È¯¼Í¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢¤³¤Î List ¤ËÆþ¤ì¤ë½èÍý¤ò¤Ê¤¯¤¹¤³¤È¤Ç¼Â¸½¤Ç¤¤Þ¤¹¡£
¡¡£²ÅÀ´Ö¤ÎÂоݤε÷Î¥¤Ë¤Ä¤¤¤Æ¤Ï¡¢¾åµ¤Î£²¤Ä¤Î½èÍý¤òÍøÍѤ¹¤ë¥±¡¼¥¹¤¬Â¿¤¤¤Ç¤¹¡£
»²¹Í¥µ¥¤¥È
Unity ¸ø¼°¥¹¥¯¥ê¥×¥È¡¦¥ê¥Õ¥¡¥ì¥ó¥¹
Vector2.Distance
Unity ¸ø¼°¥¹¥¯¥ê¥×¥È¡¦¥ê¥Õ¥¡¥ì¥ó¥¹
Vector2.sqrMagnitude
¡¡SqrMagnitude ¤Ïµ÷Î¥¤Î2¾è¤ò·×»»¤·¤Þ¤¹¤¬¡¢Distance ¤Ïµ÷Î¥¤ÎÊ¿Êýº¬¤ò·×»»¤·¤Þ¤¹¡£
Ê¿Êýº¬¤Î·×»»¤Ï·×»»Î̤¬Â¿¤¤¤¿¤á¡¢Èó¾ï¤ËÂçÎ̤Υª¥Ö¥¸¥§¥¯¥È¤ò¥½¡¼¥È¤¹¤ë¾ì¹ç¤Ë¤Ï SqrMagnitude ¤ÎÊý¤¬¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬¸þ¾å¤·¤Þ¤¹¡£
¤·¤«¤·¡¢Ä̾ï¤Î¥²¡¼¥àÆâ¤Ç¿ô¸Ä¤ÎŨ¤ò¥½¡¼¥È¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Îº¹¤Ï¤Û¤È¤ó¤É´¶¤¸¤é¤ì¤Ê¤¤¤Ç¤·¤ç¤¦¡£
¡¡Distance ¤ÏÀµ³Î¤Êµ÷Î¥¤òÄ󶡤·¤Þ¤¹¤¬¡¢SqrMagnitude ¤Ïµ÷Î¥¤Î2¾è¤òÄ󶡤·¤Þ¤¹¡£
Àµ³Î¤µ¤¬½ÅÍפʾì¹ç¤Ë¤Ï Distance ¤ò»ÈÍѤ·¤Þ¤¹¡£¤¿¤È¤¨¤Ðº£²ó¤Î¤è¤¦¤Ê¡¢Å¨¤Î´Ö³Ö¤ò¸·Ì©¤ËÈæ³Ó¤¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¤Ç¤¹¡£
¡¡Distance ¤Ïµ÷Î¥¤òľÀÜɽ¤¹¤¿¤á¡¢¥³¡¼¥É¤¬Æɤߤ䤹¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
SqrMagnitude ¤Î¾ì¹ç¡¢µ÷Î¥¤Î2¾è¤òÈæ³Ó¤¹¤ë¤¿¤á¡¢¥³¡¼¥É¤Î°Õ¿Þ¤¬¾¯¤·Ê¬¤«¤ê¤Ë¤¯¤¯¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¡¡¤·¤¿¤¬¤Ã¤Æ¡¢¤É¤Á¤é¤ò»ÈÍѤ¹¤ë¤«¤Ï¥²¡¼¥à¤ÎÍ×·ï¤È¥³¡¼¥É¤Î¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹Í×·ï¤Ë°Í¸¤·¤Þ¤¹¡£
Ä̾¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤ËÂФ¹¤ëÂ礤ʷüÇ°¤¬¤Ê¤¤¾ì¹ç¤Ï¡¢Distance ¤ò»ÈÍѤ¹¤ë¤³¤È¤¬°ìÈÌŪ¤Ç¤¹¡£
SqrMagnitude ¤Ï·×»»¸úΨ¤òºÇŬ²½¤·¤¿¤¤¾ì¹ç(ÂçÎ̤η׻»¤¬É¬Íפʾì¹ç)¤ËÌòΩ¤Ä¥Ä¡¼¥ë¤È¤·¤Æ»È¤ï¤ì¤Þ¤¹¡£
ɬÍפ˱þ¤¸¤Æ¡¢¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬ÌäÂê¤Ë¤Ê¤ë¾ì¹ç¤Ë Distance ¤Ç¤Ï¤Ê¤¯ SqrMagnitude ¤ËÀÚ¤êÂؤ¨¤ë¤³¤È¤ò¸¡Æ¤¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡¤¿¤À¤·¡¢Àµ³Î¤Êµ÷Î¥¤¬É¬Íפʾì¹ç¤ä¡¢Æɤߤ䤹¤¤¥³¡¼¥É¤ò½ñ¤¤¿¤¤¾ì¹ç¤Ë¤Ï Distance ¤òÁª¤Ö¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯