ããŒã2.ã²ãŒã ãã¬ã€ã®ã¯ã©ã¹ã æ§é ã Unrealã®ãªãã¬ã¯ã·ã§ã³ã ãªããžã§ã¯ã/ã¢ã¯ã¿ãŒã€ãã¬ãŒã¿ã ã¡ã¢ãªãããŒãžã£ãšã¬ããŒãžã³ã¬ã¯ã¿ã
ããŒã3.ã¯ã©ã¹åã®ãã¬ãã£ãã¯ã¹ã æŽæ°åã ã³ã³ããã®çš®é¡ã ã³ã³ããã€ãã¬ãŒã¿ã For-eachã«ãŒããããã·ã¥é¢æ°ã
ããŒã4. Unityéçºè åãã®Unreal Engine 4ã
ããŒã5 ...
èè ããïŒå€ã®å§ãŸãã¯ãããžã§ã¯ãã«ãšã£ãŠæãããšãå€æããããã翻蚳ã®å®è¡ã¯é·ãé延æãããŸãããããã®åŸã¯éããªããŸãã
ãã®èšäºã¯ãUE4ããã¥ã¡ã³ãã®äžéšã®ç¿»èš³ã®ç¶ãã§ãã ãã®ãªã³ã¯ãã¯ãªãã¯ãããš ãå ã®èšäºãèŠã€ããããšãã§ããŸãã
ãŸã ãäŒãã§ããŠããããã§ãã 次ã®ã»ã¯ã·ã§ã³ã§ã¯ãã²ãŒã ãã¬ã€ã¯ã©ã¹ã®éå±€ã«ã€ããŠåŠç¿ããŸãã åºæ¬ãããã¯ããå§ããŠãããããäºãã«ã©ã®ããã«é¢é£ããŠãããã«ã€ããŠè©±ããŸãã ãŸããUEãç¶æ¿ãšæ§æã䜿çšããŠã«ã¹ã¿ã ã²ãŒã ãã¬ã€æ©èœãäœæããæ¹æ³ã«ã€ããŠãåŠç¿ããŸãã
ã²ãŒã ãã¬ã€ã¯ã©ã¹ïŒãªããžã§ã¯ããã¢ã¯ã¿ãŒãããã³ã³ã³ããŒãã³ã
ã»ãšãã©ã®å Žåã4ã€ã®äž»èŠãªã²ãŒã ãã¬ã€ã¯ã©ã¹ãå±éãããŸãã ãããã¯ã UObjectãAActorãUActorComponent ãããã³UStructã§ãã 次ã«ãããããã«ã€ããŠè©³çŽ°ã«èª¬æããã ãããã®ã¯ã©ã¹ãæ¡åŒµããªãã¿ã€ããäœæã§ããŸããããšã³ãžã³ã®çµã¿èŸŒã¿æ©èœã®ã»ãšãã©ã䜿çšããããšã¯ã§ããŸããã ååãšããŠã UObjectéå±€ã®å€éšã§äœæãããã¯ã©ã¹ïŒ UObjectã®æ·±ãã®ç¶æ¿è ã§ã¯ãªãïŒã¯ããµãŒãããŒãã£ã©ã€ãã©ãªã®çµ±åããªãã¬ãŒãã£ã³ã°ã·ã¹ãã æ©èœã®ã©ãããŒãªã©ã®ç®çã§ååšããŸãã
ã¢ã³ãªã¢ã«ãªããžã§ã¯ãïŒUObjectïŒ
UEã®åºæ¬ãŠãããã¯UObjectã¯ã©ã¹ã§ãã ãã®ã¯ã©ã¹ã¯ã UClassã¯ã©ã¹ãšãšãã«ããšã³ãžã³ã®æãéèŠãªåºæ¬æ©èœãæäŸããŸãã
- ããããã£ãšã¡ãœããã®åæ
- ããããã£ã®ã·ãªã¢ã«å
- ã¬ããŒãžã³ã¬ã¯ã¿ãŒ
- ååã§UObjectãæ€çŽ¢
- ããããã£ã®å€ãèšå®ãã
- ããããã£ãšã¡ãœããã®ãããã¯ãŒã¯ã¢ãŒããµããŒã
UObjectããç¶æ¿ãããåã¯ã©ã¹ã«ã¯ã ãã®ããã«äœæãããUClassã·ã³ã°ã«ãã³ãå«ãŸããŠããŸãã ãã®ã¯ã©ã¹ã«ã¯ãã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã«é¢ãããã¹ãŠã®ã¡ã¿ããŒã¿ãå«ãŸããŸãã UObjectãšUClassã®æ©èœã¯ãïŒå ±åã§ïŒã©ã€ããµã€ã¯ã«äžã«ã²ãŒã ãã¬ã€ãªããžã§ã¯ããè¡ããã¹ãŠã®äžæ žãæããŠããŸãã UClassãšUObjectã®éãã¯ã UClassãUObjectã€ã³ã¹ã¿ã³ã¹ãã©ã®ããã«èŠããããã·ãªã¢ã©ã€ãºããããã¯ãŒãã³ã°ãªã©ã«äœ¿çšã§ããããããã£ãæ£ç¢ºã«èšè¿°ãããã®ãšããŠèããã®ãæåã§ãã åºæ¬çã«ãã²ãŒã ãã¬ã€ã®éçºã¯UObjectããçŽæ¥ç¶æ¿ããããšã§ã¯ãªããã¯ã©ã¹AActorããã³UActorComponentsããç¶æ¿ããããšã§ã ã UClass / UObjectã®åäœã®è©³çŽ°ãç¥ãå¿ èŠã¯ãããŸããã ãããããããã®ååšã«é¢ããç¥èã¯æçšã§ãã
俳åª
AActorã¯ã©ã¹ã¯ãã²ãŒã ãã¬ã€ã®äžéšã§ãããªããžã§ã¯ããè¡šããŸãã ãã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãèšèšè ã«ãã£ãŠã¬ãã«ã«é 眮ãããããå®è¡æã«äœæãããŸãïŒã²ãŒã ãã¬ã€ã·ã¹ãã ã䜿çšïŒã ã¬ãã«ã«é 眮ããããã¹ãŠã®ãªããžã§ã¯ãã¯ããã®ã¯ã©ã¹ã®åå«ã§ãã ããšãã°ã AStaticMeshActorãACameraActorãããã³APointLightã§ãã AActorã¯UObjectãç¶æ¿ããŸããã€ãŸããåã®ã»ã¯ã·ã§ã³ã«ãªã¹ããããæšæºé¢æ°ã䜿çšããŸãã AActorã¯ãã²ãŒã ã³ãŒãïŒC ++ãŸãã¯ãã«ãŒããªã³ãïŒãŸãã¯æšæºã®ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¡ã«ããºã ïŒã¡ã¢ãªããã¬ãã«ãã¢ã³ããŒãããå ŽåïŒã䜿çšããŠç Žæ£ã§ããŸãã ã²ãŒã ãªããžã§ã¯ãã®é«ã¬ãã«ã®åäœãæäŸãããããã¯ãŒã¯ã¢ãŒãã®ã¬ããªã±ãŒã·ã§ã³ãæäŸããåºæ¬çãªã¿ã€ãã§ããããŸãã ã¬ããªã±ãŒã·ã§ã³äžïŒãã«ããŠãŒã¶ãŒã¢ãŒãïŒã AActorã¯ããããã¯ãŒã¯ã¢ãŒãã®æäœããµããŒãããããã«å¿ èŠãªUActorComponentã«ã€ããŠã®æ å ±ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã
AActorã«ã¯ç¬èªã®åäœïŒç¶æ¿ã«ç¹åïŒããããŸãããããã«ããããã¯UActorComponentséå±€ã®ã³ã³ããã§ãïŒã³ã³ããžã·ã§ã³ã«ç¹åïŒã ããã¯ã AActorã®RootComponentã®ã¡ã³ããŒã䜿çšããŠå®è¡ã§ããŸãã ããã«ã¯1ã€ã®UActorComponentãå«ãŸãããã®UActorComponentã«ã¯ä»ã®å€ãã®ã³ã³ããŒãã³ããå«ãŸããŸãã AActorãã¬ãã«ã«é 眮ããåã«ãå°ãªããšãAActorã®äœçœ®ãå転ãããã³ã¹ã±ãŒã«ãä¿åããUSceneComponentãå«ãŸããŠããå¿ èŠããããŸãã
AActorã¯ã AActorã®ã©ã€ããµã€ã¯ã«å šäœã§çºçããããã€ãã®ã€ãã³ããžã®ã¢ã¯ã»ã¹ãæäŸããŸãã 以äžã«ãããã®ããã€ãã®çããªã¹ãã瀺ããŸãã
Beginplay | ãªããžã§ã¯ããã²ãŒã ã«å ¥ããšãã«1ååŒã³åºãããŸãã |
ãã | åãã¬ãŒã ã¯ããã®ãã¬ãŒã äžã«ã³ãŒããå®è¡ããããã«åŒã³åºãããŸãã |
ãšã³ããã¬ã€ | ãªããžã§ã¯ããã²ãŒã ãé¢ãããšãã«åŒã³åºãããŸãã |
AActorã¯ã©ã¹ã®ãã詳现ãªç 究ã«ã€ããŠã¯ã ãªã³ã¯ããã©ãããšãã§ããŸãã
ã©ã€ããµã€ã¯ã«
åã®ã»ã¯ã·ã§ã³ã§ã¯ã AActorã®ã©ã€ããµã€ã¯ã«ã®ãããã¯ã«ã€ããŠå°ã觊ããŸããã ã¬ãã«ã«é 眮ãããã¢ã¯ã¿ãŒã®å Žåãã©ã€ããµã€ã¯ã«ã¯æ¬¡ã®ããã«æ³åã§ããŸã- ã¢ã¯ã¿ãŒã®ããŒããšååšã®éå§ãããã³ãã®åŸã®ç Žå£ïŒã¬ãã«ã®ã¢ã³ããŒãæïŒã å®è¡æã®äœæãšç Žæ£ã®ããã»ã¹ãèŠãŠã¿ãŸãããã AActorã®äœæã¯ãéåžžã®ãªããžã§ã¯ãã®äœæãããå°ãè€éã§ãã ããã¯ã AActorãããŸããŸãªã·ã¹ãã ïŒå®è¡æïŒ-ç©çãšã³ãžã³ããã¬ãŒã ããšã«åä¿¡ããæ å ±ã管çãããããŒãžã£ãŒãªã©ã«ãã£ãŠç»é²ãããå¿ èŠãããããã«çºçããŸãã ãããã£ãŠããªããžã§ã¯ããäœæããã«ã¯ãã¡ãœããUWorld :: SpawnActorïŒïŒããããŸãã å¿ èŠãªã¢ã¯ã¿ãŒãæ£åžžã«äœæãããåŸã BeginPlayïŒïŒã¡ãœãããåŒã³åºãããç¶ããŠTickïŒïŒã¡ãœãããïŒæ¬¡ã®ãã¬ãŒã ã§ïŒ åŒã³åºãããŸãã
å¿ èŠãªæéã«ããã£ãŠã¢ã¯ã¿ãååšããŠããå Žåã DestroyïŒïŒã¡ãœãããåŒã³åºãããšã§ã¢ã¯ã¿ãŒãç Žæ£ã§ããŸãã ãã®å Žåã EndPlayïŒïŒã¡ãœãããåŒã³åºãããŸãããã®ã¡ãœããã§ã¯ããªããžã§ã¯ããç Žæ£ããããšãã«å®è¡ãããå¿ èŠãªã³ãŒããèšè¿°ã§ããŸãã ã¢ã¯ã¿ãŒã®ã©ã€ããå¶åŸ¡ããå¥ã®ãªãã·ã§ã³ã¯ã LifeSpanãã£ãŒã«ãïŒã©ã€ãã¿ã€ã ïŒã䜿çšããããšã§ãã ãã®å€ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã§ïŒãŸãã¯åŸã§å®è¡æã«ïŒèšå®ã§ããŸãã æå®ãããæéãçµéãããšã Destroyã¡ãœãããèªåçã«åŒã³åºãããŸãã
ãªã³ã¯ãã¯ãªãã¯ãããšã Actor'ovã®äœæã«é¢ãã詳现ãã芧ããã ã ãŸãã
UActorComponent
UActorComponentsã«ã¯ç¬èªã®åäœããããååãšããŠãã¡ãã·ã¥ãããŒãã£ã¯ã«ã·ã¹ãã ã®è¡šç€ºãã«ã¡ã©ã®æäœãç©ççãªçžäºäœçšãªã©ãããŸããŸãªAActorsã«å ±éã®æ©èœãæ ããŸãã ã²ãŒã ã§ã®åäœã®é«ã¬ãã«ããžãã¯ãæäŸããAActorsãšã¯ç°ãªãã UActorComponentsã¯éåžžãé«ã¬ãã«ãªããžã§ã¯ãããµããŒãããããã«å¿ èŠãªåã ã®ã¿ã¹ã¯ãå®è¡ããŸãã ã³ã³ããŒãã³ãã¯ä»ã®ã³ã³ããŒãã³ãã®åã§ããå ŽåããããŸãã ãããã¯1ã€ã®èŠªã³ã³ããŒãã³ããŸãã¯ã¢ã¯ã¿ãŒã«ã®ã¿ã¢ã¿ããã§ããŸãããã³ã³ããŒãã³ãèªäœã«ã¯å€ãã®åã³ã³ããŒãã³ããå«ããããšãã§ããŸãã ãã®é¢ä¿ã¯ãã³ã³ããŒãã³ãã®ããªãŒãšããŠæ³åã§ããŸãã åã³ã³ããŒãã³ãã«ã¯ã芪ã³ã³ããŒãã³ããŸãã¯ã¢ã¯ã¿ãŒã« çžå¯Ÿçãªäœçœ®ãå転ãããã³ã¹ã±ãŒã«ãããããšã«æ³šæããŠãã ããã
ã¢ã¯ã¿ãŒãšã³ã³ããŒãã³ãã䜿çšããããã®å€ãã®ãªãã·ã§ã³ããããŸãã ã¢ã¯ã¿ãŒãšã³ã³ããŒãã³ãã®é¢ä¿ãæ³åããæ¹æ³ã®1ã€ã¯æ¬¡ã®ãšããã§ãã ã¢ã¯ã¿ãŒ ã¯ãããã¯äœã§ããïŒããšãã質åã«çããŸãã ïŒããã¯äœã§ããïŒïŒ "ãããã³è³ªåã«å¯Ÿããã³ã³ããŒãã³ã"ããã¯äœã§ã§ããŠããŸããïŒ ïŒããã¯äœã§ã§ããŠããã®ã§ããïŒïŒÂ»
- RootComponent- AActorã³ã³ããŒãã³ãããªãŒã®ãããã¬ãã«ã³ã³ããŒãã³ããå«ããªããžã§ã¯ã
- ãã£ãã¯-åãã¬ãŒã ãæŽæ°ãããã³ã³ããŒãã³ãïŒãã£ãã¯ïŒã¯ã ãããææããAActorã® TickïŒïŒã¡ãœããã®äžéšã§ãã
äžäººç§°ãã£ã©ã¯ã¿ãŒã®è§£å
åã®ã»ã¯ã·ã§ã³ã§ã¯ããã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ãªãå€ãã®åèªããããŸããã AActorãšãã®UActorComponentsã®é¢ä¿ã瀺ãããã«ã First Personãã³ãã¬ãŒãã«åºã¥ããŠãããžã§ã¯ããéããããšãã«çæããããã«ãŒããªã³ãã調ã¹ãŠã¿ãŸãããã 以äžã®å³ã¯ã FirstPersonCharacterã¢ã¯ã¿ãŒã®ã³ã³ããŒãã³ãããªãŒã瀺ããŠããŸãã ããã§ã RootComponentã¯CapsuleComponentã§ãã CapsuleComponentã«ã¢ã¿ãããããã³ã³ããŒãã³ãã¯ã ArrowComponentãMeshãããã³FirstPersonCameraComponentã§ãã æãæ·±ããã¹ããããé ç¹ã¯Mesh1Pã³ã³ããŒãã³ãã§ããã®èŠªã¯FirstPersonCameraComponentã§ãã ããã¯ãã¡ãã·ã¥ã®äœçœ®ããã®ã«ã¡ã©ã«å¯ŸããŠçžå¯Ÿçã«èæ ®ãããããšãæå³ããŸãã
ãã®ã³ã³ããŒãã³ãã®ããªãŒã®ã°ã©ãã£ãã¯ã¯ã次ã®å³ã«ç€ºãããã«ãªããŸãã3D空éã®ãã¹ãŠã®ã³ã³ããŒãã³ããèŠãããšãã§ããŸãïŒã¡ãã·ã¥ã³ã³ããŒãã³ããé€ãïŒ
ãã®ã³ã³ããŒãã³ãããªãŒã¯1ã€ã®ã¢ã¯ã¿ãŒã¯ã©ã¹ã«ã¢ã¿ãããããŸãã ã芧ã®ãšãããç¶æ¿ãšåæã®äž¡æ¹ã䜿çšããŠè€éãªã²ãŒã ãã¬ã€ãªããžã§ã¯ããäœæã§ããŸãã æ¢åã®AActorãŸãã¯UActorComponentãå€æŽããå Žåã¯ç¶æ¿ã䜿çšããå€ãã®AActorã¿ã€ããåæ§ã®æ©èœãæã€å¿ èŠãããå Žåã¯æ§æã䜿çšããå¿ èŠããããŸãã
UStruct
UStructã䜿çšããã«ã¯ãç¹å®ã®ã¯ã©ã¹ããç¶æ¿ããå¿ èŠã¯ãããŸãããUSTRUCTïŒïŒãã¯ãã§æ§é ãããŒã¯ããã ãã§ãæ§ç¯ããŒã«ãåºæ¬çãªäœæ¥ãè¡ããŸãã UObjectãšã¯ç°ãªããã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯UStructã远跡ããŸããã ã€ã³ã¹ã¿ã³ã¹ãåçã«äœæããå Žåãã©ã€ããµã€ã¯ã«ãåå¥ã«ç®¡çããå¿ èŠããããŸãã UStructsã䜿çšããŠã PODã¿ã€ããUEã§ã®ç·šéã ãã«ãŒããªã³ãã«ããå¶åŸ¡ãã·ãªã¢ã«åããããã¯ãŒãã³ã°ãªã©ã®UObjectãªãã¬ã¯ã·ã§ã³ããµããŒãããããã«ããŸã ã
ããã§ãã²ãŒã ãã¬ã€ã¯ã©ã¹ãäœæããããã®éå±€ã®åºæ¬ã«ã€ããŠèª¬æããåŸãåã³ãã¹ãéžæããŸãã ã²ãŒã ãã¬ã€ã¯ã©ã¹ã®è©³çŽ°ã調ã¹ãããè¿œå æ å ±ãæ±ããŠãµã³ãã«ã調ã¹ãããã²ãŒã ãäœæããããã®C ++æ©èœã®ç 究ãããã«æãäžãããããããšãã§ããŸãã
ããæ·±ãæœã
ãã£ãšç¥ããããšç¢ºä¿¡ããŠããŸãã ãšã³ãžã³ã®åäœãåŒãç¶ã調æ»ããŸãã
ã¢ã³ãªã¢ã«ãªãã¬ã¯ã·ã§ã³ã·ã¹ãã
ããã°æçš¿ïŒ Unrealã®ããããã£ã·ã¹ãã ïŒReflectionïŒ
ã²ãŒã ãã¬ã€ã¯ã©ã¹ã¯ç¹å¥ãªããŒã¯ã¢ããã䜿çšãããããã¯ã©ã¹ã«é²ãåã«ã Unrealããããã£ã·ã¹ãã ã®åºæ¬çãªãã®ãèŠãŠã¿ãŸãããã UE4ã¯ç¬èªã®ãªãã¬ã¯ã·ã§ã³ã·ã¹ãã ã䜿çšããŸããããã«ãããã¬ããŒãžã³ã¬ã¯ã¿ãŒãã·ãªã¢ã«åããããã¯ãŒã¯ã¬ããªã±ãŒã·ã§ã³ã Blueprint / C ++çžäºéçšæ§ãªã©ã®ããŸããŸãªåçæ©èœãæäŸãããŸãã ãããã®æ©èœã¯ãªãã·ã§ã³ã§ããã€ãŸããèªåã®ã¿ã€ãã«å¿ èŠãªããŒã¯ã¢ãããèªåã§è¿œå ããå¿ èŠããããŸããããããªããšã Unrealã¯ããããç¡èŠãããªãã¬ã¯ã·ã§ã³ã«å¿ èŠãªããŒã¿ãçæããŸããã 以äžã¯ãäž»èŠãªããŒã¯ã¢ããèŠçŽ ã®ç°¡åãªæŠèŠã§ãã
- UCLASSïŒïŒ-ã¯ã©ã¹ã®åå°ããŒã¿ãçæããããã«äœ¿çšãããŸãã ã¯ã©ã¹ã¯UObjectã®åå«ã§ããå¿ èŠããããŸã
- USTRUCTïŒïŒ-æ§é ã®åå°ããŒã¿ãçæããããã«äœ¿çš
- GENERATED_BODYïŒïŒ-UE4ã¯ãããããã®ã¿ã€ãçšã«äœæããããã¹ãŠã®å¿ èŠãªãã³ãã¬ãŒãã³ãŒãã§çœ®ãæããŸãã
- UPROPERTYïŒïŒ-UCLASSãŸãã¯USTRUCTã¡ã³ããŒå€æ°ã®UPROPERTYãšããŠã®äœ¿çšãæå¹ã«ããŸãã UPROPERTYã«ã¯å€ãã®çšéãããããã®ãã¯ãã䜿çšãããšãå€æ°ãè€è£œå¯èœãã·ãªã¢ã©ã€ãºå¯èœãããã³ãã«ãŒããªã³ãããã¢ã¯ã»ã¹å¯èœã«ããããšãã§ããŸãã ãŸããUObjectãžã®ãªã³ã¯ã®æ°ã远跡ããããã«ã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠäœ¿çšãããŸãã
- UFUNCTIONïŒïŒ-ã¯ã©ã¹ã¡ãœããUCLASSãŸãã¯USTRUCTãUFUNCTIONãšããŠäœ¿çšã§ããŸãã UFUNCTIONã䜿çšãããšãã¡ãœããããã«ãŒããªã³ãããåŒã³åºããŠRPCãªã©ãšããŠäœ¿çšã§ããŸãã
UCLASSã¯ã©ã¹å®çŸ©ã®äŸïŒ
#include "MyObject.generated.h" UCLASS(Blueprintable) class UMyObject : public UObject { GENERATED_BODY() public: MyUObject(); UPROPERTY(BlueprintReadOnly, EditAnywhere) float ExampleProperty; UFUNCTION(BlueprintCallable) void ExampleFunction(); };
ãMyClass.generated.hãããããŒãå«ãŸããŠããããšã«åããŠæ°ã¥ããã®ã§ãã Unrealã¯ãçæããããã¹ãŠã®ããŒã¿ããã®ãã¡ã€ã«ã«åæ ããŸãã ã¿ã€ãã®å®£èšïŒã€ã³ã¯ã«ãŒããã¡ã€ã«ã®ãªã¹ãïŒã§ã¯ããã®ãã¡ã€ã«ãæåŸã«é 眮ããå¿ èŠããããŸãã
ãŸããããŒã¯ã¢ãããã¯ãã«è¿œå ã®ä¿®é£Ÿåãè¿œå ã§ããããšã«ãæ°ã¥ããããããŸããã äžèšã®ã³ãŒãã§ã¯ããã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ããã«ãæãäžè¬çãªãã®ã®ããã€ããè¿œå ãããŠããŸãã ãããã¯ãç§ãã¡ã®åãæã€ç¹å®ã®åäœãæå®ããããšãå¯èœã«ããŸãïŒ
- ãã«ãŒããªã³ãå¯èœ-ã¯ã©ã¹ã¯ãã«ãŒããªã³ãã䜿çšããŠæ¡åŒµã§ããŸãã
- BlueprintReadOnly-ããããã£ã¯Blueprintããèªã¿åãå°çšã§ãããæžã蟌ã¿äžå¯ã§ãã
- ã«ããŽãª-ãšãã£ã¿ã®è©³çŽ°ãã¥ãŒã§ããããã£ã衚瀺ãããã»ã¯ã·ã§ã³ãå®çŸ©ããŸãã çµç¹ã«äœ¿çšãããŸãã
- BlueprintCallable-é¢æ°ããã«ãŒããªã³ãããåŒã³åºãããšãã§ããŸãã
æå®åã®æ°ã¯éåžžã«å€ããããããã§ã¯ãããããªã¹ãããŸããããããã¥ã¡ã³ãã®é¢é£ã»ã¯ã·ã§ã³ãžã®ãªã³ã¯ãæäŸããŸãã
- UCLASSæå®åãªã¹ã
- UPROPERTYæå®åãªã¹ã
- UFUNCTION修食åãªã¹ã
- USTRUCT修食åãªã¹ã
ãªããžã§ã¯ã/ã¢ã¯ã¿ãŒã€ãã¬ãŒã¿
ãªããžã§ã¯ãã€ãã¬ãŒã¿ã¯ãç¹å®ã®ã¿ã€ãã®UObjectãšãã®ãµãã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãå埩åŠçããããã®éåžžã«äŸ¿å©ãªããŒã«ã§ãã
// UObject for (TObjectIterator<UObject> It; It; ++It) { UObject* CurrentObject = *It; UE_LOG(LogTemp, Log, TEXT("Found UObject named: %s"), *CurrentObject.GetName()); }
ããå ·äœçãªã¿ã€ãã®ã€ãã¬ãŒã¿ãŒãæäŸããããšã«ãããæ€çŽ¢ãå¶éã§ããŸãã UObjectããç¶æ¿ãããUMyClassãšããã¯ã©ã¹ããããšããŸãã 次ã®ããã«ããŠããã®ã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ïŒããã³ãã®åå«ã§ãããã¹ãŠïŒãèŠã€ããããšãã§ããŸãã
for (TObjectIterator<UMyClass> It; It; ++It) { // ... }
èŠåïŒ PIEïŒãšãã£ã¿ã§åçïŒã§ãªããžã§ã¯ãã€ãã¬ãŒã¿ã䜿çšãããšãäºæããªãçµæãçããå¯èœæ§ããããŸãã ãšãã£ã¿ãŒãããŒããããŠããéããªããžã§ã¯ãã€ãã¬ãŒã¿ãŒã¯ããšãã£ã¿ãŒã§äœ¿çšããããã®ã«å ããŠãã²ãŒã ã¯ãŒã«ãã®ã€ã³ã¹ã¿ã³ã¹çšã«äœæããããã¹ãŠã®UObjectãè¿ããŸãã
ã¢ã¯ã¿ãŒã€ãã¬ãŒã¿ã¯ããªããžã§ã¯ãã€ãã¬ãŒã¿ãšåæ§ã«æ©èœããŸããã AActorã®çžç¶äººã«å¯ŸããŠã®ã¿æ©èœããŸãã ã¢ã¯ã¿ãŒã€ãã¬ãŒã¿ã«ã¯äžèšã®åé¡ã¯ãªããçŸåšã®ã²ãŒã ã¯ãŒã«ãã€ã³ã¹ã¿ã³ã¹ã§äœ¿çšãããŠãããªããžã§ã¯ãã®ã¿ãè¿ããŸãã
ã¢ã¯ã¿ãŒã€ãã¬ãŒã¿ãäœæããããšã UWorldã®ã€ã³ã¹ã¿ã³ã¹ã«ãã€ã³ã¿ãŒãæž¡ãå¿ èŠããããŸãã APlayerControllerãªã©ã UObjectã®å€ãã®åã¯ã©ã¹ããã®ã¡ãœãããæäŸããŸãã äžæãªå Žåã¯ã ImplementsGetWorldã¡ãœããã®æ»ãå€ã確èªããŠãç¹å®ã®ã¯ã©ã¹ãGetWorldã¡ãœããããµããŒãããŠãããã©ããã確èªã§ããŸãã
APlayerController* MyPC = GetMyPlayerControllerFromSomewhere(); UWorld* World = MyPC->GetWorld(); // Like object iterators, you can provide a specific class to get only objects that are // or derive from that class for (TActorIterator<AEnemy> It(World); It; ++It) { // ... }
AActorã¯UObjectã®åå«ãªã®ã§ã TObjectIteratorã䜿çšããŠAActorsã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãæ€çŽ¢ããããšãã§ããŸãã ãã ãã PIEã«ã¯æ³šæããŠãã ããïŒ
ã¡ã¢ãªãããŒãžã£ãšã¬ããŒãžã³ã¬ã¯ã¿
éåžžã ã¢ã¯ã¿ãŒã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠåéãããŸããã ã¢ã¯ã¿ãŒãäœæããåŸã Destroyã¡ãœãããæåã§åŒã³åºãå¿ èŠããããŸãã åé€ã¯ããã«ã¯è¡ãããŸããããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®æ¬¡ã®æ®µéã§ã®ã¿è¡ãããŸãã
ãã®ã±ãŒã¹ã¯ã UObjectããããã£ãæã€ã¢ã¯ã¿ãŒãããå Žåã«æãäžè¬çã§ãã
UCLASS() class AMyActor : public AActor { GENERATED_BODY() public: UPROPERTY() MyGCType* SafeObject; MyGCType* DoomedObject; AMyActor(const FObjectInitializer & ObjectInitializer) : Super(ObjectInitializer) { SafeObject = NewObject<MyGCType>(); DoomedObject = NewObject<MyGCType>(); } }; void SpawnMyActor(UWorld * World, FVector Location, FRotator Rotation) { World->SpawnActor<AMyActor>(Location, Rotation); }
ãã®é¢æ°ãåŒã³åºããšãäžçã«ã¢ã¯ã¿ãŒãäœæããŸãã ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯2ã€ã®ãªããžã§ã¯ããäœæããŸãã 1ã€ã¯UPROPERTYãšã©ãã«ä»ãããããã1ã€ã¯éåžžã®ãã€ã³ã¿ãŒã§ãã ã¢ã¯ã¿ãŒãã«ãŒããªããžã§ã¯ãã®äžéšã§ããéãã SafeObjectã¯ãã®ã«ãŒãããã¢ã¯ã»ã¹ã§ãããããã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠåéãããŸããã ãã ãã DoomedObjectã®ã©ã€ããµã€ã¯ã«ã¯ç°ãªããŸãã UPROPERTYãšããŠããŒã¯ãããŠããªããããã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ãããžã®ãªã³ã¯ã«ã€ããŠäœãç¥ãããæçµçã«ç Žæ£ãããŸãã
UObjectãã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠåéããããšããã¹ãŠã®UPROPERTYåç §ã¯nullptrã«ãªããŸãã ããã¯ããªããžã§ã¯ããã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠç Žæ£ããããã©ãããå®å šã«ç¢ºèªããããã«è¡ãããŸãã
if (MyActor->SafeObject != nullptr) { // Use SafeObject }
åè¿°ã®ããã«ã DestroyïŒïŒã¡ãœãããåŒã³åºãããã¢ã¯ã¿ãŒã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®æ¬¡ã®æ®µéãŸã§åé€ãããªããããããã¯éèŠãªãã€ã³ãã§ãã IsPendingKillïŒïŒã¡ãœããã䜿çšããŠã UObjectãåé€ãããã®ãåŸ ã£ãŠãããã©ããã確èªã§ããŸãã ã¡ãœãããtrueãè¿ãå Žåããªããžã§ã¯ãã¯ç¡å¹ã§ãããšèŠãªããã䜿çšã§ããŸããã
UStructs
åè¿°ã®ããã«ã UStructsã¯UObjectã®è»œéããŒãžã§ã³ã§ãã UStructã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠåéã§ããŸããã UStructsã®åçã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠããå Žåãã¹ããŒããã€ã³ã¿ãŒã䜿çšã§ããŸããããã«ã€ããŠã¯åŸã§èª¬æããŸãã
UObjectãžã®ãªã³ã¯ã§ã¯ãããŸãã
éåžžã éUObjectã¯ãªããžã§ã¯ãåç §ãè¿œå ããŠãã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠåé€ãããªãããã«ããããšãã§ããŸãã ãããè¡ãã«ã¯ããªããžã§ã¯ãã¯FGCObjectã®ç¶æ¿ã§ããã AddReferencedObjectsã¡ãœããããªãŒããŒã©ã€ãããå¿ èŠããããŸãã
class FMyNormalClass : public FGCObject { public: UObject * SafeObject; FMyNormalClass(Uobject * Object) : SafeObject(Object) { } void AddReferencedObjects(FReferenceCollector & Collector) override { Collector.AddReferencedObject(SafeObject); } }
FReferenceCollectorã䜿çšããŠãå¿ èŠãªUObjectã«ããŒããªã³ã¯ãæåã§è¿œå ããŸããããã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠåéãããã¹ãã§ã¯ãããŸããã ãªããžã§ã¯ããåé€ãããïŒãã¹ãã©ã¯ã¿ãèµ·åããïŒãšããªããžã§ã¯ãã«ãã£ãŠè¿œå ããããã¹ãŠã®ãªã³ã¯ãåé€ãããŸãã
PSïŒPMã®ãšã©ãŒãšäžæ£ç¢ºããä¿®æ£ããããã®ãã¹ãŠã®ææ¡ããéããã ããã