ããã«ã¡ã¯ãHabrïŒ ç§ã®ååã¯Alexanderã§ããä»æ¥ã¯UnityãšUnreal Engine 4ãæ¯èŒããŸãã
å€ãã®éçºè ãUnityãšã³ãžã³ãè©Šããããã§äœãããã²ãŒã ããããžã§ã¯ããããã€ãã®ãã¢ãèŠããšæããŸãã äž»ãªç«¶åçžæã¯Unreal Engineã§ãã Unreal Tournament shooterãªã©ã®ãšããã¯ã²ãŒã ãºãããžã§ã¯ãã«ç±æ¥ããŸãã Unityã®åŸã«Unrealãšã³ãžã³ãéå§ããæ¹æ³ãšãé害ãšãªãå¯èœæ§ã®ãããã®ãèŠãŠã¿ãŸãããã
3Dãšã³ãžã³ã¯éåžžã«è¡šé¢çã«æ¯èŒãããããããšãã°ãã£ãŒããªã©ã®æ©èœã®1ã€ã ãã«çŠç¹ãåããããããããšããããŸãã ç§ãã¡ã¯ãäž¡æ¹ã®ãšã³ãžã³ãåçã®æ段ãšã¯èŠãªããŸããã ç§ãã¡ã®ç®æšã¯ã2ã€ã®ãã¯ãããžãŒãæ¯èŒããUnreal Engine 4ãç解ã§ããããã«ããããšã§ãããšã³ãžã³ã®åºæ¬ã·ã¹ãã ãããããã®ç®çã®ããã«ç¹å¥ã«äœæãããUShooterãã¢ãããžã§ã¯ãïŒUnreal + Unity ShooterïŒã®ã³ãŒãã®ç¹å®ã®äŸãšæ¯èŒããŠã¿ãŸãããã ãã®ãããžã§ã¯ãã§ã¯ãããŒãžã§ã³Unity 5.5.0ããã³Unreal Engine 4.14.3ã䜿çšããŠããŸãã
ã³ã³ããŒãã³ãã·ã¹ãã ïŒUnityïŒ
Unrealã§ãããžã§ã¯ããèµ·åãããšãã·ãŒã³å ã®ãã£ã©ã¯ã¿ãŒã¯1ã€ã®ãªããžã§ã¯ãã«ãããªãããšãããããŸãã World OutlinerãŠã£ã³ããŠã«ã¯ãéåžžã®ã¢ãã«ããŒãïŒãã¹ãããããªããžã§ã¯ããã¡ãã·ã¥ïŒãã¹ã±ã«ãã³ããŒã³ãªã©ããããŸãããããã¯ãUnityããã³Unrealã³ã³ããŒãã³ãã®ã·ã¹ãã ã®éãã®çµæã§ãã
Unityã§ã¯ãã·ãŒã³ã¯Game Objectã¿ã€ãã®ãªããžã§ã¯ãã§æ§æãããŠããŸãã ããã¯ç©ºã®ãŠãããŒãµã«ãªããžã§ã¯ãã§ãããåäœã¹ã¯ãªããïŒMonoBehaviourïŒã«ãã£ãŠå®è£ ãããã³ã³ããŒãã³ããšçµã¿èŸŒã¿ãšã³ãžã³ã³ã³ããŒãã³ããè¿œå ãããŸãã ããŒã«ãŒãªããžã§ã¯ããšããŠãããšãã°ã²ãŒã ãã£ã©ã¯ã¿ãŒããšãã§ã¯ããäœæãããå Žæã«ç©ºã®ãŸãŸã«ãªãããšããããŸãã
ãããã®ãªããžã§ã¯ãã¯ãã¹ãŠããšã³ãžã³ãšãã£ã¿ãŒã®[ éå±€]ãŠã£ã³ããŠã«è¡šç€ºãããŸãã ãããã«ã¯çµã¿èŸŒã¿ã®Transform
ã³ã³ããŒãã³ããããã3Dã·ãŒã³ã®ç©ºéå
ã®ãªããžã§ã¯ãã®äœçœ®ãå¶åŸ¡ã§ããŸãã ããšãã°ããªããžã§ã¯ãã移åããã¹ã¯ãªããã¯ã Update
é¢æ°ã§åº§æšãå€æŽãããªããžã§ã¯ãã移åããŸãã åæ§ã®ã¹ã¯ãªãããGame Objectã«è¿œå ããã«ã¯ã2åã¯ãªãã¯ããã ãã§ååã§ãã ãªããžã§ã¯ãïŒãã£ã©ã¯ã¿ãŒãŸãã¯ãªããžã§ã¯ãïŒãäœæãããããããã«ã¹ã¿ãã€ãºããã¹ã¯ãªãããè¿œå ããŠã ãã¬ãã ïŒ ã²ãŒã ãªããžã§ã¯ããšãã®åãä¿åãããã¡ã€ã«ïŒã«ä¿åããŸãã ãã®åŸããã¬ããèªäœãå€æŽã§ããŸãããããã®å€æŽã¯ããã®ãããªãã¹ãŠã®ãªããžã§ã¯ãã«åœ±é¿ããŸãã
ãããRocketProjectile
ã¯ã©ã¹ã®å€èŠ³ã§ããããã¯ãUShooterãããžã§ã¯ãã®ãã±ããã§ãã
public class RocketProjectile: MonoBehaviour { public float Damage = 10.0f; public float FlySpeed = 10.0f; void Update() { gameObject.transform.position += gameObject.transform.forward * FlySpeed * Time.deltaTime; } void OnCollisionEnter(Collision collision) { // } }
å¿
èŠã«å¿ããŠããšãã£ã¿ãŒã§çºå°ç©ãã©ã¡ãŒã¿ãŒãèšå®ãã移åéåºŠïŒ FlySpeed
ããããã£ïŒããã³æå·ïŒ Damage
ïŒãå€æŽããŸãã è¡çªåŠçã¯ã OnCollisionEnter
é¢æ°ã§çºçããŸãã ãªããžã§ã¯ãã«ã¯ãªãžããããã£ã³ã³ããŒãã³ãããããããUnityèªäœããããåŒã³åºããŸãã
ã³ã³ããŒãã³ãã·ã¹ãã ïŒUE4ïŒ
Unreal Engine 4ã§ã¯ãã²ãŒã ãªããžã§ã¯ãã¯ã¢ã¯ã¿ãŒãšãã®ã³ã³ããŒãã³ãã«ãã£ãŠè¡šãããŸãã AActor
ïŒ "actor"ïŒã¯ãã·ãŒã³ã«é©åãããªããžã§ã¯ãã®ã¡ã€ã³ã¯ã©ã¹ã§ãã ã²ãŒã ã·ãŒã³ã§ïŒãšãã£ã¿ãŒãšã³ãŒãã®äž¡æ¹ããïŒäœæãããããã£ã®å€æŽãªã©ãè¡ãããšãã§ããŸãããšã³ãžã³ã®ãã¹ãŠã®ãšã³ãã£ãã£ãç¶æ¿ããã¯ã©ã¹UObject
ãŸãã
ã³ã³ããŒãã³ãã¯ãã²ãŒã ãªããžã§ã¯ãã§ããã¢ã¯ã¿ãŒã«è¿œå ãããŸãã æŠåšããã£ã©ã¯ã¿ãŒãäœã§ãæ§ããŸããã ãããããããã®ã³ã³ããŒãã³ãã¯ã PrefabãšBlueprint Class
é¡äŒŒç©ã§ã¯ãæ¡ä»¶ä»ãã§ç§ãã¡ããé ãããŠããŸãã
Actorãªããžã§ã¯ãã«ã¯ãUnityãšã¯ç°ãªãã Root Component
æŠå¿µãããRoot Component
ã ããã¯ãæ®ãã®ã³ã³ããŒãã³ããã¢ã¿ããããããªããžã§ã¯ãã®ã«ãŒãã³ã³ããŒãã³ãã§ãã Unityã§ã¯ãããŠã¹ã§ãªããžã§ã¯ãããã©ãã°ããã ãã§ããã¹ãéå±€ãå€æŽã§ããŸãã Unrealã§ã¯ãããã¯ã³ã³ããŒãã³ããçžäºã«ãã€ã³ãããããšã§è¡ãããŸãïŒãã¢ã¿ããã¡ã³ããïŒã
Unityã«ã¯ã MonoBehaviourã¹ã¯ãªãããæŽæ°ãŸãã¯éå§LateUpdate
ããã®Start
ã Update
ããã³LateUpdate
ããããŸãã Unrealã§å¯Ÿå¿ããã®ã¯ã BeginPlay
ããã³Tick
é¢æ°ã§ãã ã¢ã¯ã¿ãŒã³ã³ããŒãã³ãïŒ UActorComponent
ïŒã«ã¯ããã®ããã®InitializeComponent
é¢æ°ãšComponentTick
é¢æ°ãããããã1åã®ã¯ãªãã¯ã§ã³ã³ããŒãã³ãããã¢ã¯ã¿ãŒãäœæããããšã¯ã§ããŸããã ãŸããUnityãšã¯ç°ãªãããã¹ãŠã®ã³ã³ããŒãã³ãã«Transformãããããã§ã¯ãªãã USceneComponent
ãšããããç¶æ¿ãããã³ã³ããŒãã³ãã®ã¿ããããŸãã
Unityã§ã¯ã GameObject.Instantiate
ã³ãŒãã®ã»ãŒã©ãã«ã§ãèšè¿°ã§ãã Prefabãããªããžã§ã¯ããäœæã§ããŸãã Unrealã§ã¯ãäžçã®ãªããžã§ã¯ãïŒ UWorld
ïŒã«ãå°ããããªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ãªããžã§ã¯ãã®äœæã¯ãspawnãšããåèªããAnriale spawnã§åŒã³åºãããŸãã ãããè¡ãã«ã¯ãé¢æ°World->SpawnActor
䜿çšããŸãã
ãã£ã©ã¯ã¿ãŒãšãã®ã³ã³ãããŒã©ãŒ
Unrealã§ã¯ããã£ã©ã¯ã¿ãŒã«ã¯ç¹å¥ãªã¯ã©ã¹APawn
ãšACharacter
ããããã¯ã¯ã©ã¹AActor
ããç¶æ¿ãããŸãã
APawn
ã¯ããã¬ã€ã€ãŒãŸãã¯AIãå¶åŸ¡ã§ãããã£ã©ã¯ã¿ãŒã¯ã©ã¹ã§ãã Unrealã«ã¯ããã£ã©ã¯ã¿ãŒç®¡ççšã®ã³ã³ãããŒã©ãŒã·ã¹ãã ããããŸãã Player Controller
ãŸãã¯AI Controller
ãäœæãAI Controller
ã ãã¬ãŒã€ãŒãŸãã¯å
éšããžãã¯ïŒAIã®å ŽåïŒããå¶åŸ¡ã³ãã³ããåãåããã¢ãŒã·ã§ã³ã³ãã³ãããã£ã©ã¯ã¿ãŒã¯ã©ã¹èªäœã APawn
ãŸãã¯ACharacter
ãŸãã
ACharacter
ã¯ACharacter
ã«åºã¥ããŠAPawn
ãé«åºŠãªç§»åã¡ã«ããºã ãçµã¿èŸŒã¿ã®éªšæ Œã¡ãã·ã¥ã³ã³ããŒãã³ããåºæ¬çãªãã£ã©ã¯ã¿ãŒç§»åããžãã¯ãããã³ãããã¯ãŒã¯ãã¬ã€çšã®ãã¬ãŒã³ããŒã·ã§ã³ãåããŠããŸãã æé©åã®ããã«ã APawn
åºã¥ããŠãã£ã©ã¯ã¿ãŒãäœæãããããžã§ã¯ãã«å¿
èŠãªæ©èœã®ã¿ãå®è£
ã§ããŸãã
ã²ãŒã ã¯ã©ã¹ã®èª¬æïŒä¿³åªïŒ
Unrealã®ã³ã³ããŒãã³ãã«ã€ããŠå°ãåŠç¿ããã®ã§ã UShooterã® UnrealããŒãžã§ã³ã®ãã±ããã¯ã©ã¹ãèŠãŠã¿ãŸããã ã
UCLASS() class USHOOTER_API ARocketProjectile : public AActor { GENERATED_BODY() public: // Sets default values for this actor's properties ARocketProjectile(); // Called when the game starts or when spawned virtual void BeginPlay() override; // Called every frame virtual void Tick( float DeltaSeconds ) override; // Rocket fly speed UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Rocket") float FlySpeed; // Rocket damage UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Rocket") float Damage; // Impact (collsion) handling UFUNCTION() void OnImpact(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit); private: /** Collision sphere */ UPROPERTY(VisibleDefaultsOnly, Category = "Projectile") USphereComponent* CollisionComp; };
Unityã§ç¹å¥ãªã³ãŒããå¿
èŠãšããªããšãã£ã¿ãŒãšã¹ã¯ãªããã®çžäºäœçšã¯ãã³ãŒãçæãéããŠUnrealã§æ©èœããŸãã ãã®ç¹å¥ãªUnrealã³ãŒãã¯ãã¢ã»ã³ããªäžã«çæãããŸãã ãšãã£ã¿ãŒããªããžã§ã¯ãã®ããããã£ã衚瀺ã§ããããã«ãç¹å¥ãªã©ãããŒUCLASS
ã GENERATED_BODY
ããã³UPROPERTY
ãŸãã ãŸããããããã£ãè£
食ãããšãã£ã¿ãŒãããããã©ã®ããã«æäœãããã説æããŸãã ããšãã°ã EditDefaultsOnlyã¯ãããã©ã«ããªããžã§ã¯ãã§ããblueprintã¯ã©ã¹ïŒUnityãšã®é¡æšãè¡šãå Žåã¯prefabïŒã®ããããã£ã®ã¿ãå€æŽã§ããããšãæå³ããŸãã ããããã£ã¯ããŸããŸãªã«ããŽãªã«ã°ã«ãŒãåã§ããŸãã ããã«ãããèå³ã®ãããªããžã§ã¯ãã®ããããã£ããã°ããèŠã€ããããšãã§ããŸãã
OnImpact
é¢æ°ã¯ãUnityã®OnCollisionEnter
ã«é¡äŒŒããŠããŸãã ãã ããããã䜿çšããã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒå
ãŸãã¯ã²ãŒã äžã§ãã£ãŠãUSphereComponent
ã³ã³ããŒãã³ãã®ã€ãã³ãããµãã¹ã¯ã©ã€ãããå¿
èŠããããŸãã Unityã®ããã«ãããã¯èªåçã«æ©èœããŸããããæé©åã®æ©äŒããããŸãã è¡çªã«å¯Ÿå¿ããå¿
èŠããªããªã£ãå Žåã¯ãã€ãã³ãã®ç»é²ã解é€ã§ããŸãã
èšèšå³
Unrealã§C ++ã¯ã©ã¹ãäœæããåŸã®å
žåçãªã¢ã¯ã·ã§ã³ã¯ãããã«åºã¥ããŠBlueprint Class
ãäœæããããšã§ãã ããã¯ãUnrealãæäŸãããªããžã§ã¯ãã®æ¡åŒµã§ãã Unreal Blueprintã·ã¹ãã ã¯ããžã¥ã¢ã«ããã°ã©ãã³ã°ã«äœ¿çšãããŸãã èŠèŠçãªã¹ããŒã ãäœæããã€ãã³ããšãããã«å¯Ÿããäœããã®åå¿ãçµã¿åãããããšãã§ããŸãã èšèšå³ãéããŠããšã³ãžã³ã¯ããã°ã©ããŒãšãã¶ã€ããŒã®çžäºäœçšãç°¡çŽ åããŸãã ã²ãŒã ããžãã¯ã®äžéšãC ++ã§èšè¿°ãããã¶ã€ããŒã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
åæã«ãUnrealã§ã¯ãå¿ èŠã«å¿ããŠãC ++ãããžã§ã¯ããœãŒã¹ããã®ãã€ããªãšã³ã³ãã³ãããåé¢ã§ããŸãã ãã¶ã€ããŒãŸãã¯ã¢ãŠããœãŒã·ã³ã°æ¥è ã¯ãã¢ã»ã³ãã«ãããdllã©ã€ãã©ãªã䜿çšããŠäœæ¥ããããšãã§ãããããžã§ã¯ãã®C ++éšåã®å éšã§äœãèµ·ãã£ãŠããã®ããç¥ãããšã¯ãããŸããã ããã¯ããšã³ãžã³ã«ãã£ãŠæäŸãããè¿œå ã®èªç±åºŠã§ãã
Unrealã¯ãã»ãŒãã¹ãŠããã«ãŒããªã³ãã«æ¥ç¶ãããŠãããããåªããŠããŸãã ãããã䜿çšããŠC ++ã¯ã©ã¹ãæ¡åŒµããããããããããã«ãŒããªã³ãã®ç¶æ¿è ãäœæãããã§ããŸãããã®ã·ã¹ãã ã¯ãå éšããžãã¯ããããžã¥ã¢ã«ã³ã³ããŒãã³ããè¡çªãã¢ãã¡ãŒã·ã§ã³ãªã©ããšã³ãžã³ã®ãã¹ãŠã®ã³ã³ããŒãã³ããšå¯æ¥ã«æ¥ç¶ãããŠããŸãã
Unityã«ã¯ã Antares Universeãªã©ã®åæ§ã®ããžã¥ã¢ã«ããã°ã©ãã³ã°ã·ã¹ãã ããããŸãã ãããã¯ãšã³ãžã³ã®äžéšã§ã¯ãªãããã®äžã«äœæãããããããã€ã§ãäœããå£ããå¯èœæ§ããããŸãïŒããšãã°ããšã³ãžã³ã®ããŒãžã§ã³ãæŽæ°ãããšãïŒã Unityã¯èŠèŠçãªã¹ã¯ãªããã·ã¹ãã ãæäŸããŸããã ç§ã®æèŠã§ã¯ãããã¯Unrealãšæ¯èŒããŠé倧ãªæ¬ ç¹ã§ãã å®éããã®ãããªã·ã¹ãã ã®ãããã§ãããã°ã©ãã³ã°ããé ãé¢ãã人ã§ãããªããžã§ã¯ãã®çžäºäœçšã®å³ãäœæããããã¢ã¯ã·ã§ã³ã®ã·ãŒã±ã³ã¹ãæ¥ç¶ãããã§ããŸãã ãšããã§ãUnrealã§ã¯ããã¹ãŠã®ãããžã§ã¯ããã³ãã¬ãŒãã«ã¯2ã€ã®ããŒãžã§ã³ããããŸããäž¡æ¹ãšãC ++ã³ãŒãã«åºã¥ããŠãããå®å šã«ãã«ãŒããªã³ãã«åºã¥ããŠããŸãã ãããã£ãŠãã³ãŒãããŸã£ãã䜿çšããã«ãéåçã ãã§ç°¡åãªãããžã§ã¯ããäœæããããšã¯éåžžã«çŸå®çã§ãã
ã·ã¥ãŒã¿ãŒãã¢ïŒUShooterïŒ
Unityã§ã¯ãæåãããã¢ãäœæããŸãããUnrealã§ã¯ããã³ãã¬ãŒãã«äŸåããŠããŸãã ãã³ãã¬ãŒãã§ãã³ã³ãããŒã«ãšã«ã¡ã©ãã¥ãŒãéžæãããšãUnrealã¯æå®ãããèšå®ã§ãããžã§ã¯ããçæããŸãã ããã¯ãéçºããã³ãããã¿ã€ããããžã§ã¯ããé«éåããããã®åºç€ãšãªãåªããåºç€ã§ãã
Side Scrollerãã³ãã¬ãŒãã®äžã«ãç¬èªã®ã€ã³ã¿ãŒãã§ã€ã¹ïŒHUDïŒããã¬ã«ãæ°çš®é¡ã®æŠåšãšãµãŠã³ããè¿œå ããŸãã ãã¬ãŒã€ãŒã«ãã±ããã©ã³ãã£ãŒãšã¬ãŒã«ã¬ã³ãäžããççºãããã¬ã«ã§è±éçã«æã£ãŠã¿ãŸãããã
å ¥åã·ã¹ãã ïŒUnityïŒ
å
¥åã·ã¹ãã ã䜿çšããŠãã£ã©ã¯ã¿ãŒãå¶åŸ¡ããŸãã Unityã§ã¯ãéåžžã å
¥åãããŒãžã£ãŒã䜿çšããŠå
¥åãæ§æããä»®æ³ã®ååä»ã軞ãäœæããŸãã ããšãã°ããé²ãããŸãã¯ãæ®åœ±ãã ãããã«ååãä»ãã軞ã®å€ãŸãã¯ä»®æ³ãã¿ã³ã®ç¶æ
ãååŸããŸãã éåžžããªããžã§ã¯ãã管çããã¹ã¯ãªããã¯ã Update
é¢æ°ã§è»žã®ç¶æ
ãååŸããŸãã åãã¬ãŒã ã§ã軞ã®ã¹ããŒã¿ã¹ãšããã€ãã®å¶åŸ¡ãã¿ã³ãããŒãªã³ã°ãããŸãã
å ¥åã·ã¹ãã ïŒUE4ïŒ
Unrealã«ã¯ä»®æ³è»žããããŸããã軞èªäœïŒãžã§ã€ã¹ãã£ãã¯ããåãåã£ãå€ãªã©ïŒãšã¢ã¯ã·ã§ã³ãã¿ã³ã«ã¯åå²ããããŸãã Unityãšã¯ç°ãªãã軞ãšãã¿ã³ãæåå¶åŸ¡ãå®è£
ããã¯ã©ã¹ã®æ©èœã«ãã€ã³ãããŸãã é¢ä¿ã¯ã UInputComponent
ã³ã³ããŒãã³ããä»ããŠäœæãããŸãã æåã¯ã©ã¹ACharacter
ã¯ããã®ãããªå
¥åã³ã³ããŒãã³ãããããŸãã
å
¥åã³ã³ããŒãã³ã㧠BindAxis("MoveRight", this, &AUShooterCharacter::MoveRight)
ãåŒã³åºãããšã«ãããMoveRightãã¿ã³ã®æŒäžãåãååã®ã¢ãŒã·ã§ã³é¢æ°ã®åŒã³åºãã«ãã€ã³ãããŸãã åãã¬ãŒã ã§ãã¿ã³ãããŒãªã³ã°ããå¿
èŠã¯ãããŸããã
ãŸããUnrealã§ã¯ã代æ¿ãã¿ã³ã®æ°ã«å¶éãããŠããŸããã Unityã§ã¯ãå ¥åãããŒãžã£ãŒã«ã¯ã¡ã€ã³ãã¿ã³ãšä»£æ¿ãã¿ã³ã®ã¿ããããŸãã ã²ãŒã å ã®å ¥åããã€ã¹ãå€ãã»ã©ããã®åé¡ã¯æ·±å»ã«ãªãå¯èœæ§ããããŸãã
3Dã¢ãã«ã䜿çšãã
ãã§ã«è¿°ã¹ãããã«ãUnrealã§ã¯ãã·ãŒã³å ã®ãã£ã©ã¯ã¿ãŒã®ã¹ã±ã«ãã³ã®æ§é ã¯è¡šç€ºãããŸããã å®éãã¹ã±ã«ãã³ã®ã³ã³ããŒãã³ãã¯ã¢ã¯ã¿ãŒããã®ãããªãã®ã§ã¯ãããŸããã ãããã¯ãã¹ã±ã«ãã³ãšã¢ãã¡ãŒã·ã§ã³ã®å éšããããã£ã§ãã ãã£ã©ã¯ã¿ãŒã«æŠåšãåãä»ããããããŒãã®1ã€ãé衚瀺ã«ããã«ã¯ã©ãããã°ããã§ããïŒ ãã¡ãã·ã§ããã«ãªåžœåããã¶ãããæŠåšã圌ã®æã«çµã³ãããããããŸããã
Unityã§ã¯ããšãã£ã¿ãŒã§ç®çã®ããŒã³ã«ãã©ãã°ããããšã§æŠåšã¢ãã«ãéžæããŸããå¥ã®å¶åŸ¡ã¹ã¯ãªããããã³ã°ãããããšãã§ããŸãã Unrealã§ã¯ããœã±ããïŒãœã±ããïŒ-ã²ãŒã ãªããžã§ã¯ãã®ã¢ã¿ããã¡ã³ããã€ã³ãã䜿çšããŸãã ãœã±ããã¯ãéªšæ Œã¢ãã¡ãŒã·ã§ã³ã䜿çšããã¢ãã«ã®ã¹ã±ã«ãã³ã®äžéšã§ãïŒUnityã§ã¯ããã®ãããªã¢ãã«ã¯ãUnreal- Skeletal Meshã§Skinned MeshãšåŒã°ããŸã ïŒã ãœã±ãããéçã¡ãã·ã¥ã«è¿œå ããããšãã§ããŸãïŒ Static Mesh ïŒã
ãœã±ãããã¢ã¿ãããããŠããããŒã³ãéžæããæŠåšããã€ã³ãã«ã¢ã¿ãããããŠããå Žåã¯ããœã±ããã®ååãããšãã°S_Weapon
ãèšå®ããŸãã ãœã±ãããäœæãããããã®ãœã±ããã®äœçœ®ã«ãªããžã§ã¯ããäœæïŒãã¹ããŒã³ãïŒãããããã€ã³ãã£ã³ã°ã¡ã«ããºã ïŒ AttachTo
é¢æ°ïŒãä»ããŠãªããžã§ã¯ãããœã±ããã«ãã€ã³ãAttachTo
ãŸãã ãã®ã·ã¹ãã ã¯ãUnityãšã¯ç°ãªãå°ãæ··ä¹±ããŸãããããæ®éçã§ãã ãã€ã³ãåãäžåºŠèšå®ããããšã§ãã²ãŒã ããžãã¯ãã¢ãã«èšå®ããåé¢ã§ããŸãã ããã«ã1ã€ã®ã¹ã±ã«ãã³ãæã€è€æ°ã®ã¢ãã«ãããå Žåããœã±ããã¯ã¹ã±ã«ãã³ã«ã®ã¿è¿œå ããå¿
èŠããããŸãã ã·ã¥ãŒãã£ã³ã°ãã¢ã§ã¯ããœã±ããã䜿çšããŠã·ã§ã«ãšã·ã§ãããšãã§ã¯ããäœæããŸãã
ã¢ãã¡ãŒã·ã§ã³ã·ã¹ãã ïŒUnityïŒ
ãã£ã©ã¯ã¿ãŒããããå ¥åã®æäœæ¹æ³ãããã£ãŠããã®ã§ãã¢ãã¡ãŒã·ã§ã³ãåçããå¿ èŠããããŸãã Unityã«ã¯ãã®ããã®ã¢ãã¡ãŒã·ã§ã³ã³ã³ãããŒã©ãŒãããããã£ã©ã¯ã¿ãŒã®ç¹å®ã®ç¶æ ãèšè¿°ããŸãã ããšãã°ãèµ°ã£ããããžã£ã³ãããããæ»ãã ãããŸãã åãããã¯ã«ã¯ç¬èªã®ã¢ãã¡ãŒã·ã§ã³ã¯ãªãããããã次ã®ãããªé·ç§»ã°ã©ããèšå®ããŸãã
ãã®åè·¯ã¯Animation ControllerãšåŒã°ããŸãã ãå éšããžãã¯ã¯ãããŸããã ããã¯åãªãç¶æ ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³åãæ¿ãã¹ããŒã ã§ãã ãããæ©èœããããã«ããã£ã©ã¯ã¿ãŒã®ç¶æ ã«å¯Ÿå¿ããå€æ°ã®ååããã®ã³ã³ãããŒã©ãŒã§äºåã«çºè¡šããŸãã ã¢ãã¡ãŒã·ã§ã³å¶åŸ¡ã¹ã¯ãªããã¯ãå€ãã®å Žåããããã®ç¶æ ããã¬ãŒã ããšã«ã³ã³ãããŒã©ãŒã«æž¡ããŸãã
ç¶æ éã®é·ç§»ïŒå³ã®ç¢å°ã§è¡šç€ºïŒã§ã¯ãé·ç§»æ¡ä»¶ãæ§æããŸãã ã¯ãã¹ãã§ãŒãã¢ãã¡ãŒã·ã§ã³ãèšå®ã§ããŸãã 1ã€ã®ã¢ãã¡ãŒã·ã§ã³ããã§ãŒãã¢ãŠããããã1ã€ã®ã¢ãã¡ãŒã·ã§ã³ãç¶ç¶ããŠãã¹ã ãŒãºã«çµã¿åããããæéã
ã¢ãã¡ãŒã·ã§ã³ã·ã¹ãã ïŒUE4ïŒ
Unrealã§ã¯ããã¹ãŠããã«ãŒããªã³ãã«ãã£ãŠè¡ãããã¢ãã¡ãŒã·ã§ã³ãäŸå€ã§ã¯ãããŸããã Animation Blueprint
ãå¶åŸ¡ããAnimation Blueprint
ãäœæããŸãã ç¶æ
ã°ã©ãã§ããããŸãã ãããã¹ããŒããã·ã³ã®å€èŠ³ã§ããåããæ»ã®ç¶æ
ã«å¿ããŠããã£ã©ã¯ã¿ãŒã®æçµçãªã¢ãã¡ãŒã·ã§ã³ãå¶åŸ¡ããŸãã
ããã§ã¯ã Idle / RunãJumpãDeadã®ããç¥ãããç¶æ ã確èªããŸã ã ãã ãã1ã€ã®ããŒããIdleãšRunãçµã¿åãããŠããŸã ã å éšã«ã¯ããããBlend Space 1Dããã ã1ã€ä»¥äžã®å€æ°ã®å€ã«å¿ããŠã¢ãã¡ãŒã·ã§ã³ãã¹ã ãŒãºã«é·ç§»ãããããã«äœ¿çšãããŸãã ãã¬ã³ãã¹ããŒã¹ã䜿çšãããšããã£ã©ã¯ã¿ãŒã®é床ãã¢ã€ãã«ã¢ãã¡ãŒã·ã§ã³ãšã©ã³ã¢ãã¡ãŒã·ã§ã³ã®éã®é·ç§»ã«ãã€ã³ãã§ããŸã ã ããã«ãããã€ãã®ç§»è¡ãã€ã³ããæ§æããããšãã§ããŸãã ããšãã°ããŒããã1ç§ããã1ã¡ãŒãã«ãŸã§ããã£ã©ã¯ã¿ãŒã¯ãã£ãããšç§»åããŸããããã¯ã ã¢ã€ãã«ã¢ãã¡ãŒã·ã§ã³ãšãŠã©ãŒã¯ã¢ãã¡ãŒã·ã§ã³ã®éã§è£éãããåãã«ãªããŸãã ãããŠãç¹å®ã®ãããå€ã®åŸã å®è¡ããªã³ã«ãªããŸãã ãããŠãããã¯ãã¹ãŠã Blend Stateã«å¯Ÿå¿ããAnimation Blueprint'aã®1ã€ã®ããŒãã«ãããŸãã
ç¢å°ã¯ç¶æ éã®é·ç§»ã瀺ããŸãããUnityãšã¯ç°ãªãããããã®é·ç§»ã®å éšããžãã¯ãå®è£ ãããã«ãŒããªã³ããäœæã§ããŸãã ã¢ãã¡ãŒã·ã§ã³ãã«ãŒããªã³ãã¯ã䜿çšããããã£ã©ã¯ã¿ãŒã«ã¢ã¯ã»ã¹ã§ããããããã«ãŒããªã³ãèªäœã¯ãã®ãã©ã¡ãŒã¿ãŒïŒé床ãªã©ïŒãåç §ããŸãã ããã¯ããã£ã©ã¯ã¿ãŒã®çŸåšã®ç¶æ ã«äœ¿çšãããªããã©ã¡ãŒã¿ãŒãèšç®ããªãããšãå¯èœã«ãããããè¿œå ã®æé©åãšèŠãªãããšãã§ããŸãã
Unrealã«ã¯å€ãã®ã¢ãã¡ãŒã·ã§ã³ããŒã«ããããŸãã ã¢ã³ã¿ãŒãžã¥ã¯ãã¢ãã¡ãŒã·ã§ã³åãããã¯ãªãããšãã®ãã©ã°ã¡ã³ããçµã¿åãããããšãã§ãããµãã·ã¹ãã ããã³ãšãã£ã¿ãŒã§ãã
ã¢ãŒã·ã§ã³ã¹ããŒããã·ã³ãšã ã¢ã³ã¿ãŒãžã¥ããŒã«ã§åçããæ»æã¢ãã¡ãŒã·ã§ã³ã®çµã¿åããã次ã«ç€ºããŸãã
åçã®äžéšã«ã¯ã ã¢ãã¡ãŒã·ã§ã³ãã«ãŒããªã³ããã€ã¢ã°ã©ã ã®æçããããŸããããã¯ãæŠåšããã®ã·ã§ããã«å¯Ÿããåå¿ãæ åœããŸãã ã¢ã³ã¿ãŒãžã¥ãã¬ã€ã³ãã³ãã¯ãã·ã§ããã¢ãã¡ãŒã·ã§ã³ããªã³ã«ãããã®åŸã ãã£ã¬ã€ãçµäºãããŸã§åŸ æ©ãã ã¢ã³ã¿ãŒãžã¥ã¹ãããã³ãã³ãã«ãã£ãŠã¢ãã¡ãŒã·ã§ã³ããªãã«ãªããŸãã ããã¯ãã¢ãã¡ãŒã·ã§ã³ã¹ããŒããã·ã³ã§ã¢ãã¡ãŒã·ã§ã³ã¯ãªããã1ååçããããã«èšå®ã§ããªãããã§ãã ã¢ãã¡ãŒã·ã§ã³ãã«ãŒãããããã£ã©ã¯ã¿ãŒã®äœããã®ç¶æ ã«å¯Ÿå¿ããå Žåãã¹ããŒããã·ã³ãä»ããŠã¢ãã¡ãŒã·ã§ã³ãå¶åŸ¡ã§ããŸãã ã€ãã³ãããšã«1ã€ã®ã¢ãã¡ãŒã·ã§ã³ã¯ãªãããåçããå Žåã¯ã ã¢ã³ã¿ãŒãžã¥ã䜿çšããŠå®è¡ã§ããŸãã
ãã¹ãããããã¬ããã®åé¡
Unityã®å€§ããªåé¡ã¯ããã¹ãããããã¬ããã§ãã åé¡ã«æ £ããŠããªãå Žåã¯ãäŸãæ€èšããŠãã ããã
ãã©ãããããä»ãã®ããŒãã«ããªããžã§ã¯ãããã¬ããtable1ã«ä¿åããã次ã«2ã€ç®ã®åæ§ã®ãªããžã§ã¯ããå¿ èŠã§ããããã©ãããããã®ç»é¢ãç·è²ã§ãããšããŸãã æ°ãããã¬ãã-table2ãäœæããå€ãã©ããããããããã«ãã©ãã°ããç»é¢ã®è²ãç·ã«å€æŽããŠä¿åããŸãã ãã®çµæã2çªç®ã®ãã¬ããã§ããtable2ã¯å®å šã«æ°ãããªããžã§ã¯ãã«ãªããå ã®ãªããžã§ã¯ããžã®åç §ã¯ãããŸããã æåã®ãã¬ãããå€æŽããŠãã2çªç®ã®ãã¬ããã«ã¯äœã®åœ±é¿ããããŸããã æãåçŽãªã±ãŒã¹ã§ãããããã§ããšã³ãžã³ã«ãã£ãŠãµããŒããããŠããŸããã
Unrealã§ã¯ã Blueprintã®ç¶æ¿ã®ãããã§ããã®ãããªåé¡ã¯ãããŸããããœãŒã¹ãªããžã§ã¯ãã®å€æŽã¯ãã¹ãŠã®åãªããžã§ã¯ãã«åœ±é¿ããŸãã ããã¯ãã²ãŒã ãªããžã§ã¯ãããã£ã©ã¯ã¿ãŒãäœããã®ããžãã¯ããŸãã¯ã¹ããŒãžäžã®éçãªããžã§ã¯ãã ãã§ãªããã€ã³ã¿ãŒãã§ã€ã¹ã·ã¹ãã ã«ã圹ç«ã¡ãŸãã
äžæ¹ãAsset Storeã®ã¢ã»ããã䜿çšããŠãUnityã§ãã®åé¡ã解決ããããšãã§ããŸãã Unityã«ã¯ã ãã¹ãããããã¬ãããšåŒã°ãããã©ã°ã€ã³ããšã³ãžã³æ¡åŒµæ©èœããããŸãã ããã€ãã®åæ§ã®ã·ã¹ãã ããããŸããããããã¯ãšã³ãžã³äžã§äœãããå°ããªæŸèæã§ããããµããŒãã¯ãããŸããã 圌ãã¯ãªããžã§ã¯ãã®å éšç¶æ ãä¿åããããšããŠããŸãã ã²ãŒã ã·ãŒã³ãéå§ããããšãå éšæ§é ããã£ãŒã«ããããããã£ãªã©ã埩å ããã·ãŒã³å ã®å€ããªããžã§ã¯ããåé€ãããã¬ããã®ã€ã³ã¹ã¿ã³ã¹ã«çœ®ãæããããšããŸãã ãã®çµæãçµã¿èŸŒã¿ãã¬ããã®å©äŸ¿æ§ã ãã§ãªããäžèŠãªãã¬ãŒããäžèŠãªããŒã¿ã®ã³ããŒããã³ãªããžã§ã¯ãã®äœæãå¯èœã«ãªããŸãã ãŸãããšã³ãžã³å ã®äœããå€æŽãããå Žåããããã®ã·ã¹ãã ã¯äžæãªçç±ã§èœã¡ãããšãããããŸãã
UIã·ã¹ãã
Unityã§ã¯ããŠã£ã³ããŠèŠçŽ ãŸãã¯ãŠã£ãžã§ãããprefabã«ä¿åã§ããŸããã è©Šãããšã¯ã§ããŸãããåããã¬ããã®åé¡ãçºçããŸãããšã³ãžã³ã¯å€ããªããžã§ã¯ããå¿ããŸãã ãã®ãããUnityã§ã¯å€ãã®å Žåãã³ã³ãããŒã«ãäœæããã¹ã¯ãªãããè¿œå ããŠããããã¬ãããäœæããã«ããããã³ããŒããŸãã ãã®ãããªããŠã£ãžã§ãããã«äœãæ°ãããã®ãè¿œå ããå¿ èŠãããå Žåã¯ãå¿ èŠãªå€æŽãæåã§ç¹°ãè¿ãå¿ èŠããããŸãã
Unrealã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ããŠã£ãžã§ããïŒãŠã£ãžã§ãããã«ãŒããªã³ãïŒã«ä¿åããããã€ãã®ã³ã³ãããŒã«ã«åºã¥ããŠæ°ããèŠçŽ ããã°ããäœæã§ããŸãã ãã¿ã³ãšç¢æãäœæããã¹ããŒã¿ã¹ããŒãŠã£ãžã§ããã«ããŸãã æšæºã®ãŠã£ãžã§ãããšæ°ãããŠã£ãžã§ããã«åºã¥ããŠãã€ã³ã¿ãŒãã§ãŒã¹ãŠã£ã³ããŠãè¿ éãã€äŸ¿å©ã«äœæã§ããŸãã ã¡ãªã¿ã«ãBlueprint'ovã«ãããŠã£ãžã§ãããæ¡å€§ããŠãããããèŠèŠçãªã¹ããŒã ã«é¢ããäœæ¥ã®ããžãã¯ã説æã§ããŸãã
Unrealã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãšãã¹ãŠã®ãŠã£ãžã§ãããç·šéããããã®ã·ã¹ãã ãå¥ã®ãšãã£ã¿ãŒã¿ãã§éããŸãã Unityã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã¯3Dã·ãŒã³ã«çŽæ¥é 眮ãããç¹å¥ãªCanvasãªããžã§ã¯ããä»ããŠç·šéãããç·šéã§ããªãå ŽåããããŸãã
é·æãšçæ
åå¿è ã«ãšã£ãŠãUnityãšã³ãžã³ã¯ã¯ããã«ã·ã³ãã«ã§ã確ç«ãããã³ãã¥ããã£ãšå€ãã®æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ããããŸãã ã¹ã¯ãªããã䜿çšããŠãšãã£ã¿ãŒãå±éããããæ°ããã¡ãã¥ãŒãè¿œå ããããããããã£ã€ã³ã¹ãã¯ã¿ãŒãå±éãããã§ããŸãã
Unrealã§ã¯ããšãã£ã¿ãŒçšã«ç¬èªã®ãŠã£ã³ããŠãšããŒã«ãäœæããããšãã§ããŸããããã©ã°ã€ã³ãäœæããå¿ èŠããããããããã¯ããå°ãè€éã§ããããã¯å¥ã®èšäºã®ãããã¯ã§ãã ããã¯Unityãããè€éã§ããããã«å°ããªã¹ã¯ãªãããèšè¿°ããŠããšãã£ã¿ãŒã®æ©èœãæ¡åŒµãã䟿å©ãªãã¿ã³ã衚瀺ããããšã¯ã§ããŸããã
Unrealã®å©ç¹ã®ãã¡ãããžã¥ã¢ã«ããã°ã©ãã³ã°ãblueprint'ovã®ç¶æ¿ãUIãŠã£ãžã§ãããå€ãã®æ©èœãåããã¢ãã¡ãŒã·ã§ã³ã·ã¹ãã ãªã©ã泚ç®ã«å€ããŸãã ããã«ãUnreal Engine 4ã«ã¯ã ã²ãŒã ãäœæããããã«èšèšãããã¯ã©ã¹ãšã³ã³ããŒãã³ãã®å®å šãªã»ããã Gameplay FrameworkããããŸãã ã²ãŒã ãã¬ã€ãã¬ãŒã ã¯ãŒã¯ã¯ãšã³ãžã³ã®äžéšã§ããããã¹ãŠã®ãããžã§ã¯ããã³ãã¬ãŒãããšã³ãžã³äžã«äœæãããŸãã Gameplay Frameworkã®ã¯ã©ã¹ã«ã¯ãã²ãŒã ã¢ãŒãã®èª¬æïŒ Game Mode ïŒãšãã¬ã€ã€ãŒã®ç¶æ ïŒ Player State ïŒããã²ãŒã ãä¿åããïŒ Gameãä¿åããïŒããã³ãã£ã©ã¯ã¿ãŒç®¡çïŒ Player Controller ïŒããå€ãã®å¯èœæ§ããããŸã ã ãšã³ãžã³ã®ç¹å¥ãªæ©èœã¯ãé«åºŠãªãããã¯ãŒã¯ãµãã·ã¹ãã ãå°çšãµãŒããŒãããã³ãšãã£ã¿ãŒã§ãããã¯ãŒã¯ã²ãŒã ãå®è¡ããæ©èœã§ãã
ãããã«
Unity 5ããã³Unreal Engine 4ãšã³ãžã³ãšãUnrealãšã³ãžã³ã§ã®äœæ¥ãéå§ãããšãã«çºçããå¯èœæ§ã®ããç¹å®ã®äŸãšåé¡ãæ¯èŒããŸããã Unityã«åºæã®è€éãã®äžéšã¯ãUnreal Engine 4ã§è§£æ±ºãããŸããããã¡ããããããã®ãã¯ãããžãŒã®å æ¬çãªã¬ãã¥ãŒã1ã€ã®ã¬ããŒãã§å®å šã«è¡ãããšã¯äžå¯èœã§ãã ãã ãããã®è³æããšã³ãžã³ã®ç 究ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã