プログラムの素

スマートフォンアプリ開発に携わっているペーペープログラマのブログです

UnityからUnreal Engine4へ ~その2~

前回の記事の続きです。

前回の記事はこちら。

UnityからUnreal Engine4へ - プログラムの素

Projects and files

  • Unreal EngineのプロジェクトはUnityのプロジェクト同様、そのプロジェクトのディレクトリ内に全てのプロジェクトファイルが配置される
  • .uprojectファイルをダブルクリックすることでエディタを起動することができ、右クリックで追加オプションが選択できる
  • プロジェクトのディレクトリ内にはいろんな種類のサブディレクトリが配置される
    • もっとも重要なのはContentSourceのサブディレクトリ
アセットの配置場所
  • ゲームで使用するアセットはContentディレクトリ内に配置する
  • アセットをインポートするには
    1. 物理的なプロジェクトのContentディレクトリ内にファイルを配置する
    2. エディタにおいてContent BrowserのContentディレクトリ内にインポートしたいファイルをドラッグ&ドロップ
サポートされているファイルフォーマット
Asset Type Supported Formats
3D .fbx .obj
Texture .png .jpeg .bmp .tga .dds .exr .psd .hdr
Sound .wav
Fonts .ttf .otf
Videos .mov .mp4 .wmv
Sceneについて
  • UnityではScene内にGameObjectを配置し、Sceneのアセットファイルとして保存される
  • UnrealではUnityのSceneと似たものにMap fileと呼ばれるものがある
  • Map fileはLevelやオブジェクト、ライティング情報やLevel内の設定を記憶する
Project Settingsの変更
  • エディタのメニューのEdit / Project Settings
  • Project Settingsについての詳細はUnreal Engine | Project Settingsを参照
  • Unityで"player settings"と呼ばれていたものは、Unrealにおいては"platform settings"であり、project settings内のPlatformカテゴリに該当する
ソースファイル
  • UnrealのプロジェクトではC++コードはSourceディレクトリ内に配置される
    • C++ source(.cpp)
    • header(.h)
    • build scripts(.Build.cs .Target.cs)
  • BlueprintのみのプロジェクトではSourceディレクトリは作成されない

GameObjectからActorへ

GameObject
  • Unityでは、GameObjectとはワールド内に配置される"モノ"
  • UnrealではActor
  • Unrealでは特殊なタイプのActorを提供している
    • Pawn(プレイヤーやAIオブジェクト用など)
    • Character(アニメーションするクリーチャー用など)
    • 特殊なタイプのActorについては、Unreal Engine | Gameplay Frameworkを参照
  • ActorはUnityのGameObjectとはちょっと違う
    • UnityのGameObjectはC#のクラスだが直接拡張することはできない
    • UnrealのActorはC++のクラスで、継承により拡張しカスタマイズすることができる
Component
  • UnityではGameObjectに複数のComponentを追加し、機能を提供することができる
  • UnrealではActorに複数のComponentを追加できる
  • UnityではGameObjectはComponentのリストを階層構造なしのリストで保持
  • UnrealではActorは階層構造になっているComponentを持つことができる
PrefabからBlueprintへ
  • UnityのPrefab
  • UnrealではBlueprint
    • ActorにComponentを付与し、Blueprint / Add ScriptボタンをクリックしてBlueprintの配置場所を選択したのちCleate Blueprintボタンで保存
    • 作成したBlueprintはContent Browserから見えるようになる
    • ダブルクリックすると編集でき、またレベル内にドラッグ&ドロップで配置ができる
Script ComponentとMonoBehaviour
  • Unity
    • GameObjectにScript ComponentをドロップすることによりC#スクリプトを追加
    • ComponentのクラスはMonoBehaviourを継承する
    • 作成したクラスにはファイルにStart()とUpdate()メソッドが定義されている
  • Unreal
    • Componentを作成することができActorにドロップする
    • ComponentのクラスはBlueprintもしくはC++を使用する
    • 作成したクラスにはInitializeComponent()とTickComponent()メソッドが定義されている
ActorのBlueprint
  • Unity C#
using UnityEngine;
using System.Collections;

public class MyComponent : MonoBehaviour
{
    int Count;

    // Use this for initialization.
    void Start ()
    {
        Count = 0;
    }

    // Update is called once per frame.
    void Update () 
    {

        Count = Count + 1;
        Debug.Log(Count);
    }
}
#pragma once
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class AMyActor : public AActor
{
    GENERATED_BODY()
    int Count;

    // Sets default values for this actor's properties.
    AMyActor() 
    {
        // Allows Tick() to be called
        PrimaryActorTick.bCanEverTick = true;  
    }

    // Called when the game starts or when spawned.
    void BeginPlay()
    {
        Super::BeginPlay();
        Count = 0;
    }

    // Called every frame.
    void Tick(float DeltaSeconds)
    {
        Super::Tick(DeltaSeconds);
        Count = Count + 1;
        GLog->Log(FString::FromInt(Count));
    }
};
  • UE4 Blueprint

f:id:famme_fatale:20150308161945p:plain

Transform
  • UnityではどのGameObjectもTransformコンポーネントを持っている
  • UnrealではActorはRoot Componentと呼ばれるScene Componentを持っている
    • Scene ComponentはワールドにおけるActorの位置、回転、スケールを提供し、それらは子階層の全てのコンポーネントに対して適用される
    • 位置情報を持つため、多くのComponentはScene Componentのサブクラスのものを使用される
    • Empty Actorを配置した場合、Actorに対して"Default Scene Root" Componentが作成され、それは純粋なScene Componentとなっている
    • 新しいScene Componentを適用した場合、Default Scene Rootは適用されたものに置き換わる
階層オブジェクト
  • UnityではGameObjectの階層構造を作成することができる

f:id:famme_fatale:20150308170157p:plain

  • UnrealではComponentを階層化することにより実現

f:id:famme_fatale:20150308170201p:plain

Actorの種類

UnrealではActorのサブクラスとして以下のものが提供されている

  • Pawn
    • プレイヤーアバターのような制御可能なゲームオブジェクト
    • PawnはプレイヤーやAIなどのような自身の制御により移動する
  • Character
    • Pawnの特殊バージョン
    • 二足歩行のアバターに対して使用
  • Controller
    • Pawnを持ち、制御する
  • Player Controller * Controllerの特殊バージョン
    • ゲームパッドやタッチ、マウス、キーボードなどから入力情報を得てPawnまたはCharacterを操作する
Objectについて
  • Actorはゲームプレイのためにたいていのクラスで使用され、ワールド内に配置できる
  • Level内に配置されるオブジェクトはActor

  • ObjectUnrealで使用されるクラスのベースとなるものでActorも例外ではない

  • Actorに適用しないタイプのオブジェクトを作成したい場合にObjectは使用される
    • 例えばActor ComponentはすべてのコンポーネントクラスのベースとなっているがActorではなくObjectから派生している