オブジェクト(UE4だとActor)のTransformをC++のコードから編集したいだけなんです。
私がどんな落とし穴にハマっていくか、記録していきます。
Visual Studio 2015 を Community からインストールしました。
あ、ここまでは大丈夫です。
C++がディフォルトで入っていないことは下調べして知っているので、ちゃんとC++の項目にチェックを入れてインストールしました。
7/2 追記:
公式ドキュメントも入門書もバッチリ読んでます。
間違いようがないです。
そしてその作業フローを実行すると
「コンパイル失敗」
Unreal Engine を 4.12, 4.11, 4.10 と試しても同じエラーが出ました。
これは…Visual Studio の Update に問題があるのかな?
と調べると、確かにそんな記述が数時間前から公式フォーラムにちらほら上がりだしてきた。
When i start UE4 with C++ it gives me compile failed every time - UE4 AnswerHub
Unreal Error "This project could not be compiled. Would you like to open it in Visual Studio?"
Compile Failed when creating Cpp project - UE4 AnswerHub
どうも、Unreal Engine 4 のビルドエラー祭りにナイスタイミングでハマったようだ。
4.12.4 の次期バージョンでは直る予定とのことで
お急ぎの方はひとまず Visual Studio 2015 の Update 3 を Update 2 に戻して使ってほしいとのことです。
めっちゃ時間がかかっていますが Visual Studio のバージョン差し戻し作業しています。
なんか…Visual Studioのバージョン戻しても同じエラーが起こりそうな予感はしているのだけど、とりあえずやってみます。
具体的には、先に Update 3 が適用された Visual Studio をアンインストールして
次のリンクから Update 2 のインストーラ(Visual Studio Community 2015 with Update 2)を取得してインストールするだけです。
Visual Studio Release Notes | Visual StudioVisual Studio 2015 Update 2 now available for download
追記:
ぎゃあぁあああ!
update-2 のインストーラでインストールしても update-3 になってしまった!
終わった。
どうやったら update-2 のまま使えるのか…戻す方法とか無いの!?
何よりここまで時間を無駄にしたことに腹が立っている
追記:
と、ここで転機がおとずれる
実はリンク先で取得した Visual Studio は英語版だったので、今までUE4が文字化けして表示していたエラー内容が表示されるようになった
そこをキーワードに検索をかけて解決策の提示にたどり着く
具体的な解決方法は
C:\Program Files (x86)\Epic Games\4.12\Engine\Source\Runtime\Core\Public\Windows\WindowsPlatformCompilerSetup.h
ファイルの末尾に#pragma warning(disable : 4599)を追記して Unreal Engine 4.12 をC++で起動してみると良いとのこと。
うおぉおお!初めてコンパイルエラーが起きずにプロジェクトが立ち上がったぞ!
私の環境では解決した!
やっと入門書の通りに作業が開始できる。
できた!
Unity の MonoBehaviour を継承したスクリプトコンポーネントに感覚が似ていました。
Unreal Engine だと Actor の Location をいじることで Actor の位置を変えることができました。
以下は実装コードの一部です。
#include "GameFramework/Actor.h" #include "FloatingAnimActor.generated.h" UCLASS() class HEADERREPLACEPROJECT_API AFloatingAnimActor : public AActor { GENERATED_BODY() public: // Sets default values for this actor's properties AFloatingAnimActor(); // Called when the game starts or when spawned virtual void BeginPlay() override; // Called every frame virtual void Tick( float DeltaSeconds ) override; float RunningTime; }; // 以下は実装ファイルの記述 // Called every frame void AFloatingAnimActor::Tick( float DeltaTime ) { Super::Tick( DeltaTime ); FVector NewLocation = GetActorLocation(); float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime)); NewLocation.Z += DeltaHeight * 20.0f; //Scale our height by a factor of 20 RunningTime += DeltaTime; SetActorLocation(NewLocation); }
いや、驚きましたよ。
エディタのコンパイルボタンを押したら、即上記のコードの編集内容が反映されてゲームが実行できました。
エントリの目標達成はまだですが、ひとまず一行目に書いたやりたいことまでは確認できました。