ãã«ãŒããªã³ãã¯ãUnreal Engine 4ã§ã²ãŒã ãã¬ã€ãäœæããéåžžã«äžè¬çãªæ¹æ³ã§ãããã ããé·ãéããã°ã©ãã³ã°ããŠã³ãŒãã奜ãã§ãããªããC ++ãçæ³çã§ãã C ++ã䜿çšãããšããšã³ãžã³ã«å€æŽãå ããŠç¬èªã®ãã©ã°ã€ã³ãäœæããããšãã§ããŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ã次ã®ããšãåŠã³ãŸãã
- C ++ã¯ã©ã¹ãäœæãã
- ã³ã³ããŒãã³ãã远å ãããã«ãŒããªã³ãã«è¡šç€ºãã
- C ++ã¯ã©ã¹ã«åºã¥ããŠãã«ãŒããªã³ãã¯ã©ã¹ãäœæãã
- 倿°ã远å ãããã«ãŒããªã³ãããå¯å€ã«ããŸã
- 軞ãšã¢ã¯ã·ã§ã³ã®ãã€ã³ãã£ã³ã°ã颿°ã«é¢é£ä»ããŸã
- ãã«ãŒããªã³ãã®C ++颿°ããªãŒããŒã©ã€ããã
- è¡çªã€ãã³ããæ©èœã«é¢é£ä»ãã
ããã¯C ++ã®åŠç¿ã«é¢ãããã¥ãŒããªã¢ã«ã§ã¯
ãªãããšãèæ
®ãã䟡å€ã
ãããŸãã Unreal Engineã®ã³ã³ããã¹ãã§C ++ã䜿çšããããšã«çŠç¹ãåœãŠãŸãã
泚ïŒãã®ãã¥ãŒããªã¢ã«ã§ã¯ãUnreal Engineã®åºæ¬ããã§ã«çè§£ããŠããããšãåæãšããŠããŸãã Unreal EngineãåããŠäœ¿çšããå Žåã¯ããŸãåå¿è
åãã® 10éšæ§æã®Unreal Engineãã¥ãŒããªã¢ã«ãã芧ãã ãã ã
ä»äºãå§ãã
ãŸã è¡ã£ãŠããªãå Žåã¯ã
Visual Studioãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã Unreal Engine 4çšã®Visual Studioã®ã»ããã¢ããã«ã€ããŠã¯ã
å
¬åŒã® Epic
ããã¥ã¢ã«ã®æç€ºã«åŸã£ãŠãã ããïŒä»£æ¿IDEã䜿çšã§ããŸãããUnrealã¯åäœããããã«èšèšãããŠããããããã®ãã¥ãŒããªã¢ã«ã§ã¯Visual Studioã䜿çšããŸãïŒã
次ã«ã
ãããžã§ã¯ããã©ã³ã¯ãããŠã³ããŒãããŠè§£åããŸãã ãããžã§ã¯ããã©ã«ããŒã«ç§»åãã
CoinCollector.uprojectãéã
ãŸã ã ã¢ããªã±ãŒã·ã§ã³ãã¢ãžã¥ãŒã«ãåæ§ç¯ããããã«æ±ãããããã[
ã¯ã ]ãã¯ãªãã¯ããŸãã
ãããå®äºãããšã次ã®ã·ãŒã³ã衚瀺ãããŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãã³ã€ã³ãåéããããã«ãã¬ãŒã€ãŒãç§»åããããŒã«ãäœæããŸãã åã®ãã¥ãŒããªã¢ã«ã§ã¯ããã«ãŒããªã³ãã䜿çšããŠãã¬ã€ã€ãŒãå¶åŸ¡ãããã£ã©ã¯ã¿ãŒã䜿çšããŸããã ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãC ++ã䜿çšããŠäœæããŸãã
C ++ã¯ã©ã¹ã®äœæ
C ++ã¯ã©ã¹ãäœæããã«ã¯ãã³ã³ãã³ããã©ãŠã¶ã«ç§»åãã[
æ°èŠè¿œå ]> [
æ°ããC ++ã¯ã©ã¹]ãéžæããŸãã
ãã®åŸãC ++ã¯ã©ã¹ãŠã£ã¶ãŒããéããŸãã ãŸããç¶æ¿ããã¯ã©ã¹ãéžæããå¿
èŠããããŸãã ã¯ã©ã¹ã¯ãã¬ã€ã€ãŒäž»å°ã§ãªããã°ãªããªããããPawnãå¿
èŠã§ãã
Pawnãéžæãã
Nextãã¯ãªãã¯ããŸãã
次ã®ç»é¢ã§ã.hããã³.cppãã¡ã€ã«ã®ååãšãã¹ãæå®ã§ããŸãã
Nameã
BasePlayerã«çœ®ãæãã
Create Classãã¯ãªãã¯ã
ãŸã ã
ããã«ããããã¡ã€ã«ãäœæããããããžã§ã¯ããã³ã³ãã€ã«ãããŸãã ã³ã³ãã€ã«åŸãUnrealã¯Visual StudioãéããŸãã
BasePlayer.cppãš
BasePlayer.hãéã
ãŠããªãå Žåã¯ããœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã«ç§»åããŠéããŸãã ãããã¯ã
Games \ CoinCollector \ Source \ CoinCollectorãã©ã«ãã«ãããŸã ã
å
ã«é²ãåã«
ã Unrealã®
ãªãã¬ã¯ã·ã§ã³ã·ã¹ãã ã«ã€ããŠç¥ãå¿
èŠããã
ãŸã ã ãã®ã·ã¹ãã ã¯ã詳现ããã«ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãªã©ããšã³ãžã³ã®ããŸããŸãªéšåã管çããŸãã C ++ Class Wizardã䜿çšããŠã¯ã©ã¹ãäœæãããšãUnrealãšã³ãžã³ã¯ã¿ã€ãã«ã«3è¡ã远å ããŸãã
#include "TypeName.generated.h"
UCLASS()
GENERATED_BODY()
Unrealãšã³ãžã³ã¯ãã¯ã©ã¹ããªãã¬ã¯ã·ã§ã³ã·ã¹ãã ããèŠããããã«ããããã«ãããã®è¡ãå¿
èŠãšããŸãã ãããæç¢ºã§ãªãå Žåã§ãå¿é
ããå¿
èŠã¯ãããŸããã ãªãã¬ã¯ã·ã§ã³ã·ã¹ãã ã«ããããã«ãŒããªã³ãã®é¢æ°ã倿°ããšãã£ã¿ãŒã«å±éãããªã©ã®ããšãã§ããããšãç¥ã£ãŠããå¿
èŠããããŸãã
ãŸããã¯ã©ã¹ã
ABasePlayer
ã§ã¯ãªã
BasePlayer
ãšåŒã°ããŠããããšã«
ABasePlayer
ãããããŸã
BasePlayer
ã ã¿ã€ãactorã®ã¯ã©ã¹ãäœæãããšããUnrealã¯ã¯ã©ã¹åã®åã«æ¥é èŸ
A ïŒåèª
actorããïŒãä»ããŸãã ãªãã¬ã¯ã·ã§ã³ã·ã¹ãã ãæ©èœããã«ã¯ãã¯ã©ã¹ã«é©åãªãã¬ãã£ãã¯ã¹ãå¿
èŠã§ãã Epic
Code Standardã®ãã¬ãã£ãã¯ã¹ã®è©³çްãã芧ãã ããã
泚ïŒãã¬ãã£ãã¯ã¹ã¯ãšãã£ã¿ãŒã«è¡šç€ºãããŸããã ããšãã°ã ABasePlayeråã®å€æ°ãäœæããå¿
èŠãããå Žåã¯ã BasePlayerãæ¢ãå¿
èŠããããŸãã
åå°ã·ã¹ãã ã«ã€ããŠç¥ãå¿
èŠãããã®ã¯ããã ãã§ãã æ¬¡ã«ããã¬ãŒã€ãŒã¢ãã«ãšã«ã¡ã©ã远å ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã
ã³ã³ããŒãã³ãã䜿çšã
ãŸã ã
ã³ã³ããŒãã³ãã远å ãã
Pawnãã¬ãŒã€ãŒã®å Žåã3ã€ã®ã³ã³ããŒãã³ãã远å ããå¿
èŠããããŸãã
- éçã¡ãã·ã¥ïŒãã¬ã€ã€ãŒã¢ãã«ã§ããã¡ãã·ã¥ãéžæã§ããŸã
- ã¹ããªã³ã°ã¢ãŒã ïŒãã®ã³ã³ããŒãã³ãã¯ãã«ã¡ã©ã®äžèãšããŠäœ¿çšãããŸãã äžç«¯ãã¡ãã·ã¥ã«åãä»ããããã«ã¡ã©ãããäžç«¯ã«åãä»ããããŸãã
- ã«ã¡ã©ïŒ Unrealã¯ãã«ã¡ã©ãèŠããã¹ãŠã®ãã®ããã¬ãŒã€ãŒã«è¡šç€ºããŸãã
ãŸããåã¿ã€ãã®ã³ã³ããŒãã³ãã«ããããŒã远å ããå¿
èŠããããŸãã
BasePlayer.hãéãã
#include "BasePlayer.generated.h"
äžã«æ¬¡ã®è¡ã远å ããŸãã
#include "Components/StaticMeshComponent.h" #include "GameFramework/SpringArmComponent.h" #include "Camera/CameraComponent.h"
æ³šïŒ .generated.hãã¡ã€ã«ãæåŸã«è¿œå ããããšãéèŠã§ãã ãã®å Žåãã€ã³ã¯ã«ãŒããã£ã¬ã¯ãã£ãã¯æ¬¡ã®ããã«ãªããŸãã
#include "CoreMinimal.h" #include "GameFramework/Pawn.h" #include "Components/StaticMeshComponent.h" #include "GameFramework/SpringArmComponent.h" #include "Camera/CameraComponent.h" #include "BasePlayer.generated.h"
æåŸã®ã€ã³ã¯ã«ãŒãã§ãªãå Žåãã³ã³ãã€ã«æã«ãšã©ãŒãçºçããŸãã
次ã«ãåã³ã³ããŒãã³ãã®å€æ°ã宣èšããå¿
èŠããããŸãã
SetupPlayerInputComponent()
åŸã«æ¬¡ã®è¡ã远å ããŸãã
UStaticMeshComponent* Mesh; USpringArmComponent* SpringArm; UCameraComponent* Camera;
ããã§äœ¿çšãããååã¯ããšãã£ã¿ãŒå
ã®ã³ã³ããŒãã³ãã®ååã«ãªããŸãã ãã®å Žåãã³ã³ããŒãã³ãã¯
Mesh ã
SpringArmããã³
CameraãšããŠè¡šç€ºãããŸãã
次ã«ãå倿°ãåå°ã·ã¹ãã ããèŠããããã«ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãå倿°ã®äžã«
UPROPERTY()
远å ããŸãã ããã§ãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
UPROPERTY() UStaticMeshComponent* Mesh; UPROPERTY() USpringArmComponent* SpringArm; UPROPERTY() UCameraComponent* Camera;
UPROPERTY()
ïŒã« UPROPERTY()
ã远å ããããšãã§ã
UPROPERTY()
ã ãããã¯ããšã³ãžã³ã®ããŸããŸãªåŽé¢ã§å€æ°ã®åäœãå¶åŸ¡ããŸãã
å
UPROPERTY()
æ¬åŒ§å
ã«
VisibleAnywhere
ãš
BlueprintReadOnly
ã远å ããŸãã åèšè¿°åã¯ã³ã³ãã§åºåããŸãã
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
VisibleAnywhere
䜿çšãããšãåã³ã³ããŒãã³ãããšãã£ã¿ãŒïŒãã«ãŒããªã³ããå«ãïŒã§è¡šç€ºã§ããŸãã
BlueprintReadOnly
䜿çšãã
ãšããã«ãŒããªã³ãããŒãã䜿çšããŠã³ã³ããŒãã³ããžã®ãªã³ã¯
ãååŸã§ããŸãã ãã ããã³ã³ããŒãã³ã
ãå®çŸ©ããããšã¯ã§ããŸããã ã³ã³ããŒãã³ãã¯å€æ°ã§ãããããã³ã³ããŒãã³ãã¯èªã¿åãå°çšã§ããããšãéèŠã§ãã ãŠãŒã¶ãŒã«å°ããŠ
欲ãããããŸãã ãããããªããšãã¡ã¢ãªå
ã®ã©ã³ãã ãªå Žæã瀺ãå ŽåããããŸãã
BlueprintReadOnly
䜿çšãããš
ãã³ã³ããŒãã³ã
å
ã§å€æ°ãèšå®ã§ããããšã«æ³šæããŠãã ãããããããŸãã«ç§ãã¡ãç®æããŠããããšã§ãã
泚ïŒãã€ã³ã¿ãŒã§ã¯ãªã倿°ïŒintãfloatãbooleanãªã©ïŒã®å Žåã¯ã EditAnywhere
ãšBlueprintReadWrite
䜿çšããŸãã
åã³ã³ããŒãã³ãã®å€æ°ãã§ããã®ã§ãããããåæåããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã
ã³ã³ã¹ãã©ã¯ã¿ãŒå
ã§äœæããŸãã
ã³ã³ããŒãã³ãã®åæå
CreateDefaultSubobject<Type>("InternalName")
ã䜿çšããŠã³ã³ããŒãã³ããäœæã§ããŸãã
BasePlayer.cppãéããæ¬¡ã®è¡ã
ABasePlayer()
远å ããŸãã
Mesh = CreateDefaultSubobject<UStaticMeshComponent>("Mesh"); SpringArm = CreateDefaultSubobject<USpringArmComponent>("SpringArm"); Camera = CreateDefaultSubobject<UCameraComponent>("Camera");
ããã«ãããåã¿ã€ãã®ã³ã³ããŒãã³ããäœæãããæž¡ããã倿°ã®ã¡ã¢ãªã«ã¢ãã¬ã¹ãå²ãåœãŠãããŸãã æåååŒæ°ã¯ããšã³ãžã³ã§äœ¿çšãããã³ã³ããŒãã³ãã®å
éšåã«ãªããŸãïŒãã®äŸã§ã¯åãã§ããã衚瀺åã§
ã¯ãããŸãã ïŒã
次ã«ãéå±€ãèšå®ããå¿
èŠããããŸãïŒã«ãŒãã³ã³ããŒãã³ããéžæãããªã©ïŒã åã®ã³ãŒãã®åŸã«ââæ¬¡ã远å ããŸãã
RootComponent = Mesh; SpringArm->SetupAttachment(Mesh); Camera->SetupAttachment(SpringArm);
æåã®è¡ã¯ã
Mesh
ã«ãŒãã³ã³ããŒãã³ãã«ããŸãã 2è¡ç®ã¯ã
SpringArm
ã
Mesh
ã¢ã¿ããããŸãã æåŸã«ã3è¡ç®ã§
Camera
ã
SpringArm
æ¥ç¶ã
SpringArm
ã
ã³ã³ããŒãã³ãã³ãŒãã®å®æåŸãã³ã³ãã€ã«ããå¿
èŠããããŸãã æ¬¡ã®ã³ã³ãã€ã«æ¹æ³ã®ãããããéžæããŸãã
- Visual Studioã§ã ãã«ã\ãœãªã¥ãŒã·ã§ã³ã®ãã«ããéžæããŸã
- ã¢ã³ãªã¢ã«ãšã³ãžã³ã§ã ããŒã«ããŒã® [ ã³ã³ãã€ã« ]ãã¯ãªãã¯ããŸã
次ã«ã䜿çšããã¡ãã·ã¥ãšã¹ããªã³ã°ã¬ããŒã®å転ãæå®ããå¿
èŠããããŸãã C ++ã§ãªãœãŒã¹ãã¹ãããŒãã³ãŒãããããšã¯æãŸãããªãããããã«ãŒããªã³ãã§ãããè¡ãããšããå§ãããŸãã ããšãã°ãC ++ã§éçã¡ãã·ã¥ãèšå®ããã«ã¯ãåæ§ã®ããšãè¡ãå¿
èŠããããŸãã
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshToUse(TEXT("StaticMesh'/Game/MyMesh.MyMesh"); MeshComponent->SetStaticMesh(MeshToUse.Object);
ãã ãããã«ãŒããªã³ãã§ã¯ãããããããŠã³ãªã¹ãããã¡ãã·ã¥ãéžæããã ãã§ååã§ãã
ãªãœãŒã¹ãå¥ã®ãã©ã«ããŒã«ç§»åããŠãããã«ãŒããªã³ãã§ã¯äœãæªããªããŸããã ãã ããC ++ã§ã¯ããã®ãªãœãŒã¹ãžã®ãã¹ãŠã®ãªã³ã¯ã倿Žããå¿
èŠããããŸãã
ãã«ãŒããªã³ãã§ã¡ãã·ã¥ãšã¹ããªã³ã°ã¬ããŒã®å転ãèšå®ããã«ã¯ã
BasePlayerã«åºã¥ãããã«ãŒããªã³ããäœæããå¿
èŠããããŸãã
泚ïŒéåžžãC ++ã§åºæ¬ã¯ã©ã¹ãäœæããŠããããµãã¯ã©ã¹ãã«ãŒããªã³ããäœæããã®ãå®çšçã§ãã ããã«ãããã¢ãŒãã£ã¹ãããã¶ã€ããŒã®ã¯ã©ã¹ãç°¡åã«å€æŽã§ããŸãã
C ++ã¯ã©ã¹ã®ãµãã¯ã©ã¹å
Unreal Engineã§ã
Blueprintsãã©ã«ããŒã«ç§»åããŠ
Blueprint ClassãäœæããŸãã [
ãã¹ãŠã®ã¯ã©ã¹]ã»ã¯ã·ã§ã³ãå±éãã
BasePlayerãèŠã€ã
ãŸã ã
BasePlayerã
éžæã ã[
éžæ ]ãã¯ãªãã¯ããŸãã
ååã
BP_Playerã«å€æŽããŠããéããŸãã
ãŸããã¡ãã·ã¥ãèšå®ããŸãã
Meshã³ã³ããŒãã³ããéžæãããã®
Static Meshã
SM_Sphereã«èšå®ããŸãã
次ã«ãã¹ãââãªã³ã°ã¬ããŒã®å転ãšé·ããèšå®ããå¿
èŠããããŸãã ç§ãã¡ã®ã²ãŒã ã¯äžé¢å³ã«ãªããŸãã®ã§ãã«ã¡ã©ã¯ãã¬ãŒã€ãŒã®äžã«ãªããã°ãªããŸããã
SpringArmã³ã³ããŒãã³ããéžæãã
å転ã
ïŒ0ã -50ã0 ïŒã«èšå®ããŸãã ããã«ãããã«ã¡ã©ãã¡ãã·ã¥ãèŠäžããããã«ã¹ããªã³ã°ã¬ããŒãå転ããŸãã
ã¹ããªã³ã°ã¬ããŒã¯ã¡ãã·ã¥ã®åã§ãããããããŒã«ãå転ãå§ãããšå転ãå§ããŸãã
ãããä¿®æ£ããã«ã¯ãã¬ããŒã®å転ã
絶察ã§ããããšã確èªããå¿
èŠããããŸãã [
å転]ã®æšªã«ãã
ç¢å°ãã¯ãªãã¯ããŠã[
ã¯ãŒã«ã]ãéžæããŸãã
次ã«ã
ã¿ãŒã²ããã¢ãŒã ã®é·ãã
1000ã«èšå®ã
ãŸã ã ãã®ãããã«ã¡ã©ãã¡ãã·ã¥ãã1000ãŠãããé¢ãããšããã«ç§»åããŸãã
次ã«ãããã©ã«ãã®ããŒã³ã¯ã©ã¹ãèšå®ããŠãããŒã³ã䜿çšããå¿
èŠããããŸãã [
ã³ã³ãã€ã«]ãã¯ãªãã¯ããŠããšãã£ã¿ãŒã«æ»ããŸãã
World Settingsãéãã
Default Pawnã
BP_Playerã«èšå®ã
ãŸã ã
[
ãã¬ã€]ãã¯ãªãã¯ããŠãã²ãŒã ã®ããŒã³ã確èªããŸãã
次ã®ã¹ãããã¯ããã¬ãŒã€ãŒãåãåããããã«ãã¬ãŒã€ãŒã«æ©èœã远å ããããšã§ãã
ã¢ãŒã·ã§ã³å®è£
ç§»åã«å€äœã远å ãã代ããã«ãç©çåŠã䜿çšããŠç§»åããŸãïŒ ãŸããããŒã«ã«å ããããåã®å€§ããã瀺ã倿°ãå¿
èŠã§ãã
Visual Studioã«æ»ãã
BasePlayer.hãéã
ãŸã ã 倿°ã³ã³ããŒãã³ãã®åŸã«æ¬¡ã远å ããŸãã
UPROPERTY(EditAnywhere, BlueprintReadWrite) float MovementForce;
EditAnywhere
ã§ã¯ã詳现ããã«ã§
MovementForce
ã倿Žã§ã
EditAnywhere
ã
BlueprintReadWrite
䜿çšãããšãBlueprintããŒãã䜿çšããŠ
MovementForce
ãèšå®ããã³èªã¿åãããšãã§ããŸãã
次ã«ã2ã€ã®é¢æ°ãäœæããå¿
èŠããããŸãã 1ã€ã¯äžäžã«ç§»åãããã1ã€ã¯å·Šå³ã«ç§»åããŸãã
ã¢ãŒã·ã§ã³é¢æ°ãäœæãã
MovementForce
äžã«æ¬¡ã®é¢æ°å®£èšã远å ããŸãã
void MoveUp(float Value); void MoveRight(float Value);
åŸã§ãããã®è»žãã€ã³ãã£ã³ã°é¢æ°ã
é¢é£ä»ããŸãã ãã®ããã軞ãã€ã³ãã£ã³ã°ã¯
ã¹ã±ãŒã«ã転éã§ããŸãïŒãããã£ãŠã颿°ã«ã¯
float Value
ãã©ã¡ãŒã¿ãŒãå¿
èŠã§ãïŒã
泚ïŒè»žãšã¹ã±ãŒã«ã®ãã€ã³ãã«æ
£ããŠããªãå Žåã¯ã ãã«ãŒããªã³ããã¥ãŒããªã¢ã«ãã芧ãã ããã
次ã«ãå颿°ã®å®è£
ãäœæããå¿
èŠããããŸãã
BasePlayer.cppãéãããã¡ã€ã«ã®æåŸã«æ¬¡ã远å ããŸãã
void ABasePlayer::MoveUp(float Value) { FVector ForceToAdd = FVector(1, 0, 0) * MovementForce * Value; Mesh->AddForce(ForceToAdd); } void ABasePlayer::MoveRight(float Value) { FVector ForceToAdd = FVector(0, 1, 0) * MovementForce * Value; Mesh->AddForce(ForceToAdd); }
MoveUp()
ã¯
ãXè»žã«æ²¿ã£
㊠Mesh
ã«ç©ççãªåŒ·åºŠã远å ããŸãã 匷床å€ã¯
MovementForce
ã«ãã£ãŠèšå®ãããŸãã çµæã«
Value
ïŒè»žã¹ãããã¹ã±ãŒã«ïŒãæããããšã§ãã¡ãã·ã¥ã¯
æ£ãŸãã¯
è² ã®æ¹åã«ç§»åã§ããŸãã
MoveRight()
ã¯
MoveRight()
ãšåãã§ãã
ãYè»žã«æ²¿ã£
ãŠããŸã ã
ã¢ãŒã·ã§ã³é¢æ°ã®äœæãå®äºãããã軞ãã€ã³ãã£ã³ã°ããããã«é¢é£ä»ããå¿
èŠããããŸãã
軞ãã€ã³ãã£ã³ã°ã颿°ã«é¢é£ä»ãã
ç°¡åã«ããããã«ãäºåã«è»žãã€ã³ãã£ã³ã°ãäœæããŸããã ãããã¯
ãããžã§ã¯ãèšå®ã®
å
¥åã»ã¯ã·ã§ã³ã«ãããŸãã
æ³šïŒ Axisãã€ã³ãã£ã³ã°ã¯ãé¢é£ä»ããããŠãã颿°ãšåãååã§ããå¿
èŠã¯ãããŸããã
SetupPlayerInputComponent()
å
ã«æ¬¡ã®ã³ãŒãã远å ããŸãã
InputComponent->BindAxis("MoveUp", this, &ABasePlayer::MoveUp); InputComponent->BindAxis("MoveRight", this, &ABasePlayer::MoveRight);
ãããã£ãŠã
MoveUpããã³
MoveRight軞ã®ãã€ã³ãã£ã³ã°ã
MoveUp()
ããã³
MoveRight()
ãŸãã
ããã§ãã ãŒãã¡ã³ãæ©èœã宿ããŸããã æ¬¡ã«ã
Meshã³ã³ããŒãã³ãã®ç©çãæå¹ã«ããå¿
èŠããããŸãã
ç©ççå
å«
ABasePlayer()
å
ã«æ¬¡ã®è¡ã远å ããŸãã
Mesh->SetSimulatePhysics(true)
æåã®è¡ã¯ãç©ççãªåã
Mesh
ã«äœçšããããšãèš±å¯ããŸãã 2è¡ç®ã¯
MovementForce
ã
100000ã«èšå®ããŸãã ã€ãŸããããŒã«ãç§»åãããšã100,000ã®åã远å ãããŸãã ããã©ã«ãã§ã¯ãç©çãªããžã§ã¯ãã®ééã¯çŽ110ããã°ã©ã ãªã®ã§ãããããç§»åããã«ã¯å€å€§ãªåãå¿
èŠã§ãã
ãµãã¯ã©ã¹ãäœæãããšãåºæ¬ã¯ã©ã¹ã§ããããã£ã倿ŽããŠããäžéšã®ããããã£ã¯å€æŽãããŸããã ãã®ã±ãŒã¹ã§ã¯ã
BP_Playerã§ ç©çã·ãã¥ã¬ãŒã·ã§ã³ãæå¹ã«ããŸããã ãã ããäœæããããã¹ãŠã®ãµãã¯ã©ã¹ã§ã¯ãããã©ã«ãã§æå¹ã«ãªããŸãã
ã³ã³ãã€ã«ããŠUnreal Engineã«æ»ããŸãã
BP_Playerãéãã
Meshã³ã³ããŒãã³ããéžæããŸãã æ¬¡ã«ã
Simulate Physicsããªã³ã«ããŸãã
[
ã³ã³ãã€ã«]ãã¯ãªãã¯ãã[
åç]ãã¯ãªãã¯ããŸãã
W ã
A ã
Sãããã³
DãæŒããŠããŒã«ãç§»åããŸãã
次ã«ããã«ãŒããªã³ãã䜿çšããŠå®è£
ã§ããC ++颿°ã宣èšããŸãã ããã«ãããèšèšè
ã¯C ++ã䜿çšããã«æ©èœãäœæã§ããŸãã ãããåŠç¿ããããã«ããžã£ã³ã颿°ãäœæããŸãã
ãžã£ã³ãæ©èœãäœæãã
ãŸãããžã£ã³ããã€ã³ãã颿°ã«ãã€ã³ãããå¿
èŠããããŸãã ãã®ãã¥ãŒããªã¢ã«ã§ã¯
ãã¹ããŒã¹ããŒã«ãžã£ã³ããå²ãåœãŠ
ãŸã ã
Visual Studioã«æ»ãã
BasePlayer.hãéã
ãŸã ã
MoveRight()
äžã«æ¬¡ã®è¡ã远å ããŸãã
UPROPERTY(EditAnywhere, BlueprintReadWrite) float JumpImpulse; UFUNCTION(BlueprintImplementableEvent) void Jump();
æåã¯ã
JumpImpulse
ãšåŒã°ãããããŒã倿°
JumpImpulse
ã ãžã£ã³ããå®è£
ãããšãã«äœ¿çšã§ããŸãã 圌女ã¯ããšãã£ã¿ãŒã§å€æŽã§ããããã«
EditAnywhere
ã䜿çšããŸãã ãŸããBlueprintReadWriteã䜿çšããŠãããããBlueprintããŒãã䜿çšããŠèªã¿åããšæžã蟌ã¿ãè¡ãããšãã§ããŸãã
次ã¯ãžã£ã³ãæ©èœã§ãã
UFUNCTION()
ã¯ã
Jump()
ãåå°ã·ã¹ãã ã«è¡šç€ºããŸãã
BlueprintImplementableEvent
ã«ããããã«ãŒããªã³ãã¯
Jump()
ãå®è£
ã§ããŸãã å®è£
ããªãå Žåã
Jump()
åŒã³åºãã¯å€±æããŸãã
æ³šïŒ C ++ã§ããã©ã«ãã®å®è£
ãäœæããå Žåã¯ã BlueprintNativeEvent
ã䜿çšããŸãã 以äžã«ããã®æ¹æ³ã«ã€ããŠèª¬æããŸãã
Jumpã¯
ã¢ã¯ã·ã§ã³ãã€ã³ãã£ã³ã°ã§ããããããã€ã³ãã£ã³ã°æ¹æ³ã¯ãããã«ç°ãªããŸãã
BasePlayer.hãéããŠ
BasePlayer.cppãéã
ãŸã ã
SetupPlayerInputComponent()
ã
SetupPlayerInputComponent()
远å ã
SetupPlayerInputComponent()
ã
InputComponent->BindAction("Jump", IE_Pressed, this, &ABasePlayer::Jump)
ããã«ããã
Jumpãã€ã³ãã£ã³ã°ã
Jump()
ãã€ã³ããããŸãã ãžã£ã³ãããŒ
ãæŒãããšãã«ã®ã¿å®è¡ãããŸãã ããŒã
IE_Released
ããšãã«å®è¡ããå Žåã¯ã
IE_Released
ã䜿çšã
IE_Released
ã
次ã«ããã«ãŒããªã³ãã§
Jump()
ãåå®çŸ©ããŸãã
ãã«ãŒããªã³ãã®é¢æ°ããªãŒããŒã©ã€ããã
BasePlayer.cppãã³ã³ãã€ã«ããŠéã
ãŸã ã æ¬¡ã«ãUnreal Engineã«æ»ã£ãŠ
BP_Playerãéã
ãŸã ã [ãã€ãã«ãŒããªã³ã]ããã«ã«ç§»åãã[
æ©èœ ]ã«ã«ãŒãœã«ãåãããŠã[
äžæžã]ããããããŠã³ãªã¹ãã衚瀺ããŸãã ãããã¯ãªãã¯ããŠã
ãžã£ã³ããéžæããŸãã ããã§ã
Event JumpãäœæããŸãã
æ³šïŒæ»ãå€ã®åããªãå ŽåããªãŒããŒã©ã€ãã¯ã€ãã³ãã«ãªããŸãã æ»ãåãååšããå Žåãããã¯é¢æ°ã«ãªããŸãã
次ã«ã次ã®å³ãäœæããŸãã
ãã®
ãããZè»žã«æ²¿ã£
㊠ã¡ãã·ã¥ã€ã³ãã«ã¹ïŒ
JumpImpulse ïŒã远å ã
ãŸã ã ãã®å®è£
ã§ã¯ããã¬ãŒã€ãŒã¯ç¡éã«ãžã£ã³ãã§ããããšã«æ³šæããŠãã ããã
次ã«ã
JumpImpulseã®å€ãèšå®ããå¿
èŠããããŸãã ããŒã«ããŒã®ã
ã¯ã©ã¹ã®ããã©ã«ãããã¯ãªãã¯ããŠãã詳现ãããã«ã«ç§»åããŸãã
JumpImpulseã
100000ã«èšå®ããŸãã
[
ã³ã³ãã€ã«]ãã¯ãªãã¯ãã
BP_Playerãéã
ãŸã ã [
åç]ãã¯ãªãã¯ããŠã
ã¹ããŒã¹ããŒã§ãžã£ã³ãããŠã¿ãŠãã ããã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ããã¬ã€ã€ãŒãšã®æ¥è§Šã§ã³ã€ã³ãæ¶ããããã«ããŸãã
ã³ã€ã³ãéãã
è¡çªãåŠçããã«ã¯ã颿°ããªãŒããŒã¬ã€ã€ãã³ãã«é¢é£ä»ããå¿
èŠããããŸãã ãã®ããã颿°ã¯2ã€ã®èŠä»¶ãæºãããŠããå¿
èŠããããŸãã ãŸãã颿°ã«ã¯
UFUNCTION()
ãã¯ããå¿
èŠã§ãã 2çªç®ã®èŠä»¶ã¯ã颿°ã«æ£ãã眲åãå¿
èŠã§ããããšã§ãã ãã®ãã¥ãŒããªã¢ã«ã§ã¯ã
OnActorBeginOverlapã€ãã³ãã䜿çšããŸãã ãã®ã€ãã³ãã«ã¯ã颿°ã«æ¬¡ã®çœ²åãå¿
èŠã§ãã
FunctionName(AActor* OverlappedActor, AActor* OtherActor)
Visual Studioã«æ»ãã
BaseCoin.hãéã
ãŸã ã
PlayCustomDeath()
äžã«æ¬¡ã®è¡ã远å ããŸãã
UFUNCTION() void OnOverlap(AActor* OverlappedActor, AActor* OtherActor)
ãã€ã³ãåŸãã³ã€ã³ãšå¥ã®ã¢ã¯ã¿ãŒãé©çšããããšã
OnOverlap()
ãå®è¡ãããŸãã
OverlappedActor
ã¯ã³ã€ã³ã«ãªãã
OtherActor
å¥ã®ã¢ã¯ã¿ãŒã«ãªããŸãã
次ã«ã
OnOverlap()
ãå®è£
ããå¿
èŠããããŸãã
ãªãŒããŒã¬ã€å®è£
BaseCoin.cppãéãããã¡ã€ã«ã®æ«å°Ÿã«æ¬¡ã远å ããŸãã
void ABaseCoin::OnOverlap(AActor* OverlappedActor, AActor* OtherActor) { }
ãã¬ãŒã€ãŒãªãŒããŒã¬ã€ã®ã¿ãèªèãããã®ã§ã
OtherActor
ã
ABasePlayer
ã«ãã£ã¹ãããå¿
èŠããããŸãã ãã£ã¹ãããåã«ã
ABasePlayer
ããããŒã远å ããå¿
èŠããããŸãã
#include "BaseCoin.h"
äžã«æ¬¡ã远å ããŸãã
#include "BasePlayer.h"
次ã«ããã£ã¹ããå®è¡ããå¿
èŠããããŸãã ã¢ã³ãªã¢ã«ãšã³ãžã³ã§ã¯ããã£ã¹ãã¯æ¬¡ã®ããã«å®è¡ã§ããŸãã
Cast<TypeToCastTo>(ObjectToCast);
ãã£ã¹ããæåãããšã
ObjectToCast
ãžã®ãã€ã³ã¿ãŒã
ObjectToCast
ãŸãã 倱æããå Žåã
nullptr
ãè¿ããŸãã
nullptr
ã®çµæã確èªããããšã§ããªããžã§ã¯ãã«ç®çã®ã¿ã€ãããã£ããã©ããã倿ã§ããŸãã
Inside
OnOverlap()
远å ã
OnOverlap()
ã
if (Cast<ABasePlayer>(OtherActor) != nullptr) { Destroy(); }
OnOverlap()
ãå®è¡ããããšã
OtherActor
ã¿ã€ãã
ABasePlayer
ãã©ããããã§ãã¯ãããŸãã ãããããªããããã¯ã³ã€ã³ãç Žå£ããŸãã
次ã«ã
OnOverlap()
ããã€ã³ãããå¿
èŠããããŸãã
ãªãŒããŒã¬ã€é¢æ°ãã€ã³ãã£ã³ã°
颿°ããªãŒããŒã¬ã€ã€ãã³ãã«
AddDynamic()
ã«ã¯ã
AddDynamic()
ã€ãã³ããã€ãã³ãã«äœ¿çšããå¿
èŠããããŸãã
ABaseCoin()
å
éšã«è¿œå ã
ABaseCoin()
ã
OnActorBeginOverlap.AddDynamic(this, &ABaseCoin::OnOverlap);
ããã¯ã
OnOverlap()
ã
OnActorBeginOverlapã€ãã³ãã«
OnOverlap()
æ¹æ³ã§ãã ãã®ã€ãã³ãã¯ãã¢ã¯ã¿ãŒãå¥ã®ã¢ã¯ã¿ãŒãšãªãŒããŒã©ãããããšãã«åžžã«çºçããŸãã
ã³ã³ãã€ã«ããŠUnreal Engineã«æ»ããŸãã [
åç]ãã¯ãªãã¯ããŠãã³ã€ã³ã®åéãéå§ããŸãã ã³ã€ã³ãšæ¥è§Šãããšãã³ã€ã³ã¯ç Žå£ãããæ¶æ»
ããŸãã
泚ïŒã³ã€ã³ãæ¶ããªãå Žåã¯ããšãã£ã¿ãŒãåèµ·åããŠå®å
šãªåã³ã³ãã€ã«ãå®äºããŠãã ããã äžéšã®å€æŽã«ã¯åèµ·åãå¿
èŠã§ãã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ããã1ã€åå®çŸ©å¯èœãªC ++颿°ãäœæããŸãã ãã ããä»åã¯ããã©ã«ãã®å®è£
ãäœæããŸãã ãããå®èšŒããããã«ã
OnOverlap()
ã䜿çšããŸãã
ããã©ã«ãã®é¢æ°å®è£
ãäœæãã
ããã©ã«ãã®å®è£
ã§é¢æ°ãäœæããã«ã¯ã
BlueprintNativeEvent
èšè¿°åã䜿çšããå¿
èŠããããŸãã Visual Studioã«æ»ãã
BaseCoin.hãéã
ãŸã ã
OnOverlap()
远å
OnOverlap()
UFUNCTION()
BlueprintNativeEvent
ïŒ
UFUNCTION(BlueprintNativeEvent) void OnOverlap(AActor* OverlappedActor, AActor* OtherActor);
颿°ãããã©ã«ãã®å®è£
ã«ããã«ã¯ãæ¥å°ŸèŸ
_Implementation
ã远å ããå¿
èŠããããŸãã
BaseCoin.cppãéãã
OnOverlapãOnOverlap_Implementationã«çœ®ãæã
OnOverlap_Implementation
ã
void ABaseCoin::OnOverlap_Implementation(AActor* OverlappedActor, AActor* OtherActor)
åãã«ãŒããªã³ãã
OnOverlap()
å®è£
ããªãå Žåããã®å®è£
ã䜿çšãããŸãã
次ã®ã¹ãããã¯ã
OnOverlap()
ãå®è£
ããããš
ã§ã ã
ãã«ãŒããªã³ãã§å®è£
ãäœæãã
ãã«ãŒããªã³ãã§ã®å®è£
ã§ã¯ã
PlayCustomDeath()
ãåŒã³åºããŸãã ãã®C ++颿°ã¯ãã³ã€ã³ã®å転é床ãäžããŸãã 0.5ç§åŸãã³ã€ã³ã¯ããèªäœãç Žå£ããŸãã
BlueprintsããC ++颿°ãåŒã³åºãã«ã¯ã
BlueprintCallable
èšè¿°åã䜿çšããå¿
èŠããããŸãã
BaseCoin.cppãéãã
BaseCoin.hãéã
ãŸã ã
PlayCustomDeath()
ã远å ã
PlayCustomDeath()
ã
UFUNCTION(BlueprintCallable)
Visual Studioãã³ã³ãã€ã«ããŠéããŸãã Unreal Engineã«æ»ãã
BP_Coinãéã
ãŸã ã ãªãŒããŒ
ã©ããã§ãªãŒããŒã©ã€ãããæ¬¡ã®ã¹ããŒã ãäœæããŸãã
ãã¬ã€ã€ãŒãã³ã€ã³ã«éãããããšã
Play Custom Deathãå®è¡ãããŸãã
[
ã³ã³ãã€ã«]ãã¯ãªãã¯ãã
BP_Coinãéã
ãŸã ã [
åç]ãã¯ãªãã¯ããŠã³ã€ã³ãåéããæ°ããå®è£
ããã¹ãããŸãã
次ã¯ã©ãã«è¡ããŸããïŒ
宿ãããããžã§ã¯ã
ã¯ããããããŠã³ããŒãã§ããŸãã
ã芧ã®ãšãããUnreal Engineã§ã®C ++ã®æäœã¯éåžžã«ç°¡åã§ãã C ++ã§æ¢ã«äœããéæããŠããŸããããŸã åŠã¶ã¹ãããšããããããããŸãïŒ C ++ã䜿çš
ãããããããŠã³ã·ã¥ãŒãã£ã³ã°ã²ãŒã ã®äœæã«é¢ããEpicãã¥ãŒããªã¢ã«ã·ãªãŒãºãæ€èšããããšããå§ãããŸãã
ã¢ã³ãªã¢ã«ãšã³ãžã³ãåããŠäœ¿çšããå Žåã¯
ãåå¿è
åãã® 10éšæ§æã®
ãã¥ãŒããªã¢ã«ã·ãªãŒãºãã芧ãã ãã ã ãã®ã·ãªãŒãºã§ã¯ããã«ãŒããªã³ãããããªã¢ã«ãããŒãã£ã¯ã«ã·ã¹ãã ãªã©ã®ããŸããŸãªã·ã¹ãã ã玹ä»ããŸãã