https://youtu.be/8RlLQosYFPA

00:00¡¡¥ª¡¼¥×¥Ë¥ó¥°
00:22¡¡1.NavMeshBound Volume¤ÎÇÛÃÖ
01:21¡¡2.NPC¥­¥ã¥é¥¯¥¿¡¼¤ÎºîÀ®
02:16¡¡3.NPC¥Ö¥ë¡¼¥×¥ê¥ó¥È¤ÎºîÀ®
04:08¡¡4.ÆÃÄê¤Î¾ì½ê¤Ç°ÜÆ°¤¹¤ëNPC
06:26¡¡¤¶¤Ã¤¯¤ê¤Þ¤È¤á¡ª
06:37¡¡ÀßÄê¥Õ¥¡¥¤¥ë
06:44¡¡¥¨¥ó¥Ç¥£¥ó¥°

1.NavMeshBound Volume¤ÎÇÛÃÖ¡¡00:22

Unreal Engine¤Î¥Ê¥Ó¥²¡¼¥·¥ç¥ó¥·¥¹¥Æ¥à¤Ï¡¢
¿Í¹©ÃÎǽ¡ÊAI¡Ë¤Ç¥¹¥¿¡¼¥È°ÌÃÖ¤«¤éÌÜŪÃϤޤǡ¢ºÇŬ¤Ê¥Ñ¥¹¤ò¸¡º÷¤·¤Þ¤¹¡£

¡Ö¥¢¥¯¥¿¤òÇÛÃ֡פè¤ê
NavMeshBound Volume¤ò¥ì¥Ù¥ë¾å¤Ë¥É¥é¥Ã¥°¥¢¥ó¥É¥É¥í¥Ã¥×¤·¤Þ¤¹¡£

¥Ê¥Ó¥²¡¼¥·¥ç¥ó ¥á¥Ã¥·¥å ¥Ð¥¦¥ó¥º ¥Ü¥ê¥å¡¼¥à¡£

NavMeshBound Volume¤Ï¡¢
¥ì¥Ù¥ëÆâ¤Ç¥Ê¥Ó¥²¡¼¥·¥ç¥ó¤¹¤ëÎΰè¤ò»ØÄꤷ¤Þ¤¹¡£

[¾ÜºÙ]¥Ñ¥Í¥ë¡ä[Scale] ¤Ç¥×¥ì¥¤ÎΰèÁ´ÂΤòʤ¤¦¤è¤¦¤Ë¤·¤Þ¤¹¡£

X = 30¡¢Y= 30¡¢Z = 30 ¤ËÀßÄꤷ¤Þ¤¹¡£

¥­¡¼¥Ü¡¼¥É¤ÎP¥­¡¼¤ò²¡¤¹¤È¡¢
¥ì¥Ù¥ëÆâ¤Î¥Ê¥Ó¥²¡¼¥·¥ç¥ó¥á¥Ã¥·¥å¤ò»ë³Ð²½¤Ç¤­¤Þ¤¹¡£
¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏÎп§¤Ç»ë³Ð²½¤µ¤ì¤Þ¤¹¡£

»ë³Ð²½¤¬¸«¤Ë¤¯¤¤¾ì¹ç¤Ï¡¢
¥¢¥¦¥È¥é¥¤¥Ê¡¼¤Ç¡¢ [RecastNavMesh-Default]¤òÁªÂò¤·¤Þ¤¹¡£



[¾ÜºÙ]¥Ñ¥Í¥ë¡ä[ɽ¼¨]¡ä[¥ª¥Õ¥»¥Ã¥È¤òÉÁ²è]¤Ç
¥Ê¥Ó¥²¡¼¥·¥ç¥ó ¥á¥Ã¥·¥å¤¬ÉÁ²è¤µ¤ì¤ë¹â¤µ¤òÄ´À°¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£



Ãͤò¡Ö50¡×¤Ë¤·¤Æ¤ß¤Þ¤¹¡£
¹â¤µ¤¬ÊѤï¤ê¤Þ¤¹¡£

2.NPC¥­¥ã¥é¥¯¥¿¡¼¤ÎºîÀ®¡¡01:21

[BP_ThirdPersonCharacter] ¥Ö¥ë¡¼¥×¥ê¥ó¥È¤òÊ£À½¤·¤Þ¤¹¡£

̾Á°¤ò¡ÖBP_NPC_Nav¡×¤Ë¤·¤Þ¤¹¡£
¥Õ¥¡¥¤¥ë¤ò³«¤­¤Þ¤¹¡£

¥«¥á¥é¤ÏÉÔÍפʤΤǺï½ü¤·¤Þ¤¹¡£

ʬ¤«¤ê¤ä¤¹¤¤¤è¤¦¤Ë¥Þ¥Æ¥ê¥¢¥ë¤òÊѹ¹¤·¤Þ¤¹¡£

Ê⤯¥¹¥Ô¡¼¥É¤ò300¤Ë¤·¤Þ¤¹¡£

¥¤¥Ù¥ó¥È¥°¥é¥Õ¤Ç¡¢ÆþÎϥΡ¼¥É¤ò¤¹¤Ù¤Æºï½ü¤·¤Þ¤¹¡£

3.NPC¥Ö¥ë¡¼¥×¥ê¥ó¥È¤ÎºîÀ®¡¡02:16

½àÈ÷¤¬¤Ç¤­¤¿¤Î¤Ç¡¢¥Ö¥ë¡¼¥×¥ê¥ó¥È¤òµ­½Ò¤·¤Æ¤¤¤­¤Þ¤¹¡£

Custom Event¥Î¡¼¥É¤òÇÛÃÖ¤·¤Þ¤¹¡£
̾Á°¤ò¡ÖMoveNPC¡×¤Ë¤·¤Þ¤¹¡£

Get Actor Location¥Î¡¼¥É¤òÇÛÃÖ¤·¤Þ¤¹¡£

GetActorLocation ¥Î¡¼¥É¤«¤éGet Random Reachable Point In Radius¥Î¡¼¥É¤òÇÛÃÖ¤·¤Þ¤¹¡£
[Radius (Ⱦ·Â)]¤ò1000¤ËÀßÄꤷ¤Þ¤¹¡£



Get Random Reachable Point In Radius¥Î¡¼¥É¤Ï¡¢
»ØÄꤵ¤ì¤¿¸¶ÅÀ°ÌÃÖ¤«¤éÅþã²Äǽ¤Ê¡¢¥é¥ó¥À¥à¤Ê°ÌÃÖ¤òÀ¸À®¤·¤Þ¤¹¡£

AI Move To¥Î¡¼¥É¤òÇÛÃÖ¤·¤Þ¤¹¡£
¥«¥¹¥¿¥à¥¤¥Ù¥ó¥ÈMoveNPC ¥Î¡¼¥É¤Ë¤Ä¤Ê¤®¤Þ¤¹¡£
Pawn¥Ô¥ó¤ËSelf¤ò¤Ä¤Ê¤®¤Þ¤¹¡£
Destination¥Ô¥ó¤ËGet Random Reachable Point In Radius¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£

½ÐÎÏ¥Ô¥ó¡¢[On Success]¥Ô¥ó¤Ë¡¢Delay¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£
[Duration] ¤ò¡Ö2¡×¤ËÀßÄꤷ¤Þ¤¹¡£
¥«¥¹¥¿¥à¥¤¥Ù¥ó¥ÈMoveNPC¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£

½ÐÎÏ¥Ô¥ó¡¢[On Fail]¥Ô¥ó¤Ë¡¢Delay¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£
[Duration] ¤ò¡Ö0.1¡×¤ËÀßÄꤷ¤Þ¤¹¡£

Event BeginPlay¥Î¡¼¥É¤òÇÛÃÖ¤·¤Þ¤¹¡£
¥«¥¹¥¿¥à¥¤¥Ù¥ó¥ÈMoveNPC¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£

¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¡¢Êݸ¤·¤Þ¤¹¡£

¥ì¥Ù¥ëÆâ¤Ë¡ÖBP_NPC_Nav¡×¤ò¥É¥é¥Ã¥°¥¢¥ó¥É¥É¥í¥Ã¥×¤·¤Þ¤¹¡£
¤¿¤¯¤µ¤óÇÛÃÖ¤·¤Þ¤¹¡£



µ¯Æ°¤·¤Þ¤¹¡£

NPC¤¬¥ì¥Ù¥ëÆâ¤ò¥é¥ó¥À¥à¤ËÊ⤭¤Þ¤ï¤ê¤Þ¤¹¡£

4.ÆÃÄê¤Î¾ì½ê¤Ç°ÜÆ°¤¹¤ëNPC¡¡04:08

ÆÃÄê¤Î¾ì½ê¤ò¥é¥ó¥À¥à¤Ë¹Ô¤­Í褹¤ëNPC¤òºîÀ®¤·¤Þ¤¹¡£

¡ÖBP_NPC_Nav¡×¤òÊ£À½¤·¤Þ¤¹¡£
̾Á°¤ò¡ÖBP_NPC_aimNav¡×¤Ë¤·¤Þ¤¹¡£

¥Õ¥¡¥¤¥ë¤ò³«¤­¤Þ¤¹¡£

ʬ¤«¤ê¤ä¤¹¤¤¤è¤¦¤Ë¥Þ¥Æ¥ê¥¢¥ë¤òÊѹ¹¤·¤Þ¤¹¡£
Ê⤯Speed¤âÊѹ¹¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
¡Ö1000¡×¤Ë¤·¤Æ¤ß¤Þ¤¹¡£

¡Ö+¡×¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¡¢ÊÑ¿ô¤òÄɲä·¤Þ¤¹¡£
ÊÑ¿ô̾¡ÖTargetList¡×¤Ë¤·¤Þ¤¹¡£
ÊÑ¿ô¤Î·¿¤ò¡ÖActor¡×¡¢[¥ª¥Ö¥¸¥§¥¯¥È»²¾È] ¤òÁªÂò¤·¤Þ¤¹¡£
[¾ÜºÙ]¥Ñ¥Í¥ë¤Ç¡ÖÇÛÎó¡×¤ËÊѹ¹¤·¤Þ¤¹¡£
¥¤¥ó¥¹¥¿¥ó¥¹ÊÔ½¸²Äǽ¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£

ÊÑ¿ôTargetList Get¥Î¡¼¥É¤òÇÛÃÖ¤·¤Þ¤¹¡£

ÊÑ¿ôTargetList Get¥Î¡¼¥É¤«¤é¡¢Last Index¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£
Random Integer in Range¥Î¡¼¥É¤òÇÛÃÖ¤·¤Þ¤¹¡£
Max¥Ô¥óLast Index¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£

ÊÑ¿ôTargetList Get¥Î¡¼¥É¤«¤é¡¢Get (a copy)¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£
²¼¤Î¥Ô¥ó¤ËRandom Integer in Range¥Î¡¼¥É¤ò¤Ä¤Ê¤®¤Þ¤¹¡£


Get (a copy)¥Î¡¼¥É¤ò
Get Actor Location¥Î¡¼¥É¤ÎTarget¥Ô¥ó¤Ë¤Ä¤Ê¤®¤Þ¤¹¡£

Get Random Reachable Point In Radius¥Î¡¼¥É¤Î[Radius¡ÊȾ·Â¡Ë] ¤ÎÃͤò 150 ¤òÀßÄꤷ¤Þ¤¹¡£
°ÜÆ°ÀèActor¤ÎȾ·Â150cmÆâ¤Ç¥é¥ó¥À¥à¤ÊºÂɸ¤òºîÀ®¤·¤Þ¤¹¡£

AI MoveTo ¥Î¡¼¥É¤Î Acceptance Radius ¡ÊµöÍÆȾ·Â¡Ë¤ò¡Ö50¡×¤ËÀßÄꤷ¤Þ¤¹¡£

¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¡¢Êݸ¤·¤Þ¤¹¡£

¥ì¥Ù¥ëÆâ¤Ë¡ÖBP_NPC_aimNav¡×¤ò¥É¥é¥Ã¥°¥¢¥ó¥É¥É¥í¥Ã¥×¤·¤Þ¤¹¡£

ŬÅö¤ÊStatic Meshes¤òÇÛÃÖ¤·¤Þ¤¹¡£
4¤ÄÇÛÃÖ¤·¤Þ¤¹¡£



¥ì¥Ù¥ëÆâ¤Ë¡ÖBP_NPC_aimNav¡×¤òÁªÂò¤·¤Þ¤¹¡£
[¾ÜºÙ]¥Ñ¥Í¥ë¤Î¥Ç¥Õ¥©¥ë¥È¡ä[Target List]¤Ç
¡Ö+¡×¤ò¥¯¥ê¥Ã¥¯¤·¤Æ°ÜÆ°Àè¤ÎActor¤òÄɲä·¤Þ¤¹¡£



ItemLabel¤«¤éÁªÂò¤·¤Þ¤¹¡£
¤Þ¤¿¤Ï¡¢¥¹¥Ý¥¤¥È¤ÇÁªÂò¤·¤Þ¤¹¡£

µ¯Æ°¤·¤Þ¤¹¡£

NPC¤¬»ØÄꤷ¤¿Actor´Ö¤ò¥é¥ó¥À¥à¤Ë¹Ô¤­Í褷¤Þ¤¹¡£



5.²óÈòÀßÄê¡¡Äɵ­

NPCƱ»Î¤¬¾×Æͤ¹¤ë¾ì¹ç¡¢²óÈò¤òÀßÄꤷ¤Þ¤¹¡£

5-1.RVO²óÈò

[BP_Ther] ¥Ö¥ë¡¼¥×¥ê¥ó¥È¤ò³«¤­¤Þ¤¹¡£
[Character Movement] ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òÁªÂò¤·¤Þ¤¹¡£
¾ÜºÙ¥Ñ¥Í¥ë¡ä[Character Movement: Avoidance (¥­¥ã¥é¥¯¥¿¡¼¥à¡¼¥Ö¥á¥ó¥È¡§²óÈò)]
[Use RVOAvoidance (RVO ²óÈò¤ò»ÈÍÑ)] ¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£
[Avoidance Consideration Radius (²óÈò¹ÍθȾ·Â)] ¤òÄ´À°¤·¤Þ¤¹¡£

¥³¥ó¥Ñ¥¤¥ë¤·¤ÆÊݸ¤·¤Þ¤¹¡£

5-2.Crowd Detour ²óÈò

[BP_NPC_NoAvoidance] ¥Ö¥ë¡¼¥×¥ê¥ó¥È³«¤­¤Þ¤¹¡£
¾ÜºÙ¥Ñ¥Í¥ë¡ä¥Ü¡¼¥ó¡äAI Controller Class
[AIController] ¤«¤é[DetourCrowdAIController] ¤ËÊѹ¹¤·¤Þ¤¹¡£

¥³¥ó¥Ñ¥¤¥ë¤·¤ÆÊݸ ¤·¤Þ¤¹¡£

Detour Crowd Manager ¤ÎÄ´À°¤Ï¡¢
[Settings (ÀßÄê)] ¡ä [Project Settings (¥×¥í¥¸¥§¥¯¥ÈÀßÄê)] ¡ä [Crowd Manager]
[Max Agents (ºÇÂ票¡¼¥¸¥§¥ó¥È)]¡¢ [Max Agent Radius (ºÇÂ票¡¼¥¸¥§¥ó¥ÈȾ·Â)] ¤Ê¤É¤òÄ´À°¤·¤Þ¤¹¡£

¤¶¤Ã¤¯¤ê¤Þ¤È¤á¡ª¡¡06:26

ÀßÄê¥Õ¥¡¥¤¥ë¡¡06:37

BP_NPC_Nav


BP_NPC_aimNav

NPC¤òÇÛÃÖ¤¹¤ë¥á¥ê¥Ã¥È

ʪ¸ì¤Î¿¼²½:

NPC¤Ï¡¢¥×¥ì¥¤¥ä¡¼¤ËÂФ·¤Æ¥¯¥¨¥¹¥È¤òÍ¿¤¨¤¿¤ê¡¢¥¹¥È¡¼¥ê¡¼¤Î¿Ê¹Ô¤Ë´Ø¤ï¤ëÌò³ä¤òô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥×¥ì¥¤¥ä¡¼¤Ï¤è¤ê¿¼¤¯Êª¸ì¤ËË×Æþ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¥²¡¼¥à¤ÎÀ¤³¦´Ñ¤Î³ÈÂç:

NPC¤Ï¡¢¥²¡¼¥à¤ÎÀ¤³¦´Ñ¤ò³ÈÂ礹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
NPC¤¬»ý¤ÄÆȼ«¤Î¥Ð¥Ã¥¯¥¹¥È¡¼¥ê¡¼¤ä¡¢¥²¡¼¥àÆâ¤Îʸ²½¤äÎò»Ë¤Ë´Ø¤¹¤ë¾ðÊó¤òÄ󶡤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¥×¥ì¥¤¥ä¡¼¤Î¥µ¥Ý¡¼¥È:

NPC¤Ï¡¢¥×¥ì¥¤¥ä¡¼¤ËÂФ·¤Æ¥¢¥É¥Ð¥¤¥¹¤ä¥Ò¥ó¥È¤òÄ󶡤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥×¥ì¥¤¥ä¡¼¤Ï¥²¡¼¥à¤Î¿Ê¹Ô¤ò¥¹¥à¡¼¥º¤Ë¿Ê¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¥²¡¼¥à¤ÎÆñ°×ÅÙ¤ÎÄ´À°:

NPC¤Ï¡¢¥²¡¼¥à¤ÎÆñ°×ÅÙ¤òÄ´À°¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
NPC¤¬¥×¥ì¥¤¥ä¡¼¤ËÄ󶡤¹¤ë¥¯¥¨¥¹¥È¤ä¥¢¥¤¥Æ¥à¤Ï¡¢¥×¥ì¥¤¥ä¡¼¤Î¥ì¥Ù¥ë¤Ë¹ç¤ï¤»¤ÆÄ´À°¤µ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£

INDEX

¢£Unreal Engine 5 ³Ð½ñ ¢£UnrealEngineJP¡Ú¸ø¼°¡ÛYoutube
¢£miniGame ¢£UMG ¢£Save&Load ¢£¥­¥ã¥é¥¯¥¿¡¼ ¢£Navigation ¢£¥Ý¥¹¥È¥×¥í¥»¥¹ ¢£Environment ¢£¥Þ¥Æ¥ê¥¢¥ë ¢£¥·¥Í¥Þ¥Æ¥£¥¯¥¹ ¢£¥¢¥Ë¥á¡¼¥·¥ç¥ó¡ÚUE5/UE4¡Û
¢£Æ°²è ¢£Enemy ¢£¥¢¥¯¥·¥ç¥ó ¢£¹¶·â ¢£¥®¥ß¥Ã¥¯ ¢£¥×¥é¥°¥¤¥ó ¢£¥Î¥Ù¥ë
¢£Blender

¡Ú¥á¥Ë¥å¡¼ÊÔ½¸¡Û

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹