環境
UE 4.10.0
Visual Studio 2015
概要
Unreal Engine 4 を触ってみて動作を確認する
まずはチュートリアルに習い、アクターで動くものを作ってみる
本文
プロジェクト作成
[新規プロジェクト] -> [C++] を選択
プロジェクト名を ActorTest とし、プロジェクトを作成
クラス追加
[ファイル] -> [C++クラスを追加]
親クラスに「アクター」を選択し、ファイル名を Actor1 としてクラスを作成
こうすると新規 C++ コードが追加され、ついでにコンパイルされる
コンテンツブラウザを確認
コンテンツブラウザに先ほど追加した Actor1 クラスが追加されている
Actor1 をビューポートにドラッグ&ドロップするとアウトライナーに Actor12 という
名前でオブジェクトが追加されている
コンポーネントを追加してみる
エディタの [ウィンドウ] -> [詳細] -> [詳細1] で詳細ウィンドウを開いておく
Actor12 オブジェクトをクリックすると詳細ウィンドウに Actor12 オブジェクトの詳細
が表示される。
[コンポーネントを追加] ボタンで、基本形状の球を選択
これで、ビューポート上で球体を動かす準備ができた
コンパイルしてみる
エディタに [コンパイル] ボタンがあるので、それで実行できる
もしくは Visual Studio でいつも通りビルドすればエディタに反映される
実行してみる
エディタに [プレイ] ボタンがあるので、それで実行できる
現状で実行すると球が半分地面に埋まった画面が見えるはず
追加されたコード
追加されたコードを確認してみる。
以下のコードのテンプレートが出来ているはず
[Actor.h]
#include "GameFramework/Actor.h"
#include "Actor1.generated.h"
UCLASS()
class ACTORTEST_API AActor1 : public AActor
{
GENERATED_BODY()
public:
AActor1();
virtual void BeginPlay() override;
virtual void Tick( float DeltaSeconds ) override;
};
[Actor.cpp]
#include "ActorTest.h"
#include "Actor1.h"
AActor1::AActor1()
{
PrimaryActorTick.bCanEverTick = true;
}
void AActor1::BeginPlay()
{
Super::BeginPlay();
}
void AActor1::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
}
コードの中を検証して修正してみる
いくつか謎のマクロが定義されているが、それ以外は普通のクラス
コンストラクタ、BeginPlay、Tick メソッドが実装されている
たぶん BeginPlay が、実行前にコールされる初期化メソッドで Tick が毎フレームの
更新処理なんだろう。BeginPlay に座標を設定すれば地面に埋まった球体を地面の上に
表示できるはず
BeginPlay 修正
座標を設定しなおすと、意図通りの挙動になった
高さを修正するのにベクトルの Z を変更する必要があるらしい
( デフォルトでは Y UP ではなく、Z UP らしい )
この辺りは設定を変更できないだろうか?
まぁ、数学の計算はライブラリのものを使用するだろうから別に問題ないが
void AActor1::BeginPlay()
{
Super::BeginPlay();
FVector pos = GetActorLocation();
pos.Z = 100.0f;
SetActorLocation(pos);
}
Tick 修正
徐々に球体が浮かぶようにコードを修正してみる
void AActor1::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
FVector pos = GetActorLocation();
pos.Z += 0.05f;
SetActorLocation(pos);
}
まとめ
これで UE4 でオブジェクトを動かす下準備が整ったので、色々動かしてみようと思う