はじめに
本日はその3日目。今日は前回同様に上の方に配置されているチュートリアルという事で、プログラミングクイックスタートをやっていきます。
プログラミングってかなり尻込みするけど、内部仕様の理解には一番役に立つような気がします。
あとプログラミングはできないわけではないため、プログラミングによるゲーム作成の難易度も知りたい。
それでは開始します。
参照元
と思ったら開始位置にまだ見ていないセクションのリンクがある
- UE起動時に下のペインに表示されているコンテンツブラウザに関する説明
- VisualStudioのセットアップ
とあるので、やってきます。
コンテンツブラウザ
番号 | 名前 |
---|---|
1 | ナビゲーションバー |
2 | ソースビュー |
3 | コレクションパネル |
4 | アセット管理領域 |
5 | アセットビュー |
ナビゲーションバー
- ソースビューの表示/非表示
- アセットフォルダ間の移動
が可能とのこと。
見ていたフォルダは戻るボタンを押せば直近のファイルパスを表示。
これは便利。
ソースパネル
- ゲームプロジェクト内のすべてのフォルダとコレクションがある
- コレクションという言葉は初めて見たような気がする。UEでは何を意味するんだろう?
階層を下にスクロールするにはマウスホイールを使うか、マウスの右クリックをドラッグとのこと
更に詳細なリンクが有る。こちらはフォルダの役割なども解説している模様。
アセット管理領域
- 作成、保存、検索、フィルターなどの機能があるとのこと。
- アセットビューと密に機能する
- ここで作成されたフィルター類はすべてアセットビューに適用される為
- フィルターと検索条件が一致しないアセットはすべて隠す
- コンテンツ ブラウザのフィルター機能
- アセットを使って作業する
アセットビュー
- コンテンツブラウザUIの主要領域
- フィルターと検索が適用されると、フォルダ内で利用可能な全てのアセットのグリッドまたはリストが表示される
- アセットは早く展開するためにシーンにドラッグ/ドロップ可能
- アセットビュー内で右クリックから新規にアセットを作成する事も可能
- アセットのリストはスクロールバー、マウスホイール、右クリックドラッグでスクロールする
表示スタイル
アセットビューのアセットは、タイル、リスト、カラムの3つのスタイルで表示可能とのこと
Unreal Engine 用に Visual Studio をセットアップする
- UEはVisual Studioとスムーズに統合するように設計されている
- プロジェクトのコードを素早く簡単に変更してコンパイル後するに結果が確認できる
- 連携するとUEを使用する開発者の効率と全体的なユーザーエクスペリエンスが向上する
インストール
インストールが完了
デベロッパー向けの推奨設定があるとのこと
まだ何かをつくるわけではないのでコードなしで起動する
推奨設定
Solution Platforms ドロップダウンを追加する
- カスタマイズを開く
- 標準を選択
- ソリューション構成を選択後、選択したボタンの編集
- 幅を200にしてOK
- 閉じる
- ソリューション構成をツールバーに追加
- UE公式には追加手順が記載してあるが最初から表示されている
- UE公式には追加手順が記載してあるが最初から表示されている
Error リストウィンドウをオフにする
- コード中にエラーがあると Error List ウィンドウが自動的にポップアップする
- この設定の場合UEで誤った場合にもポップアップする事がある
- UEで作業中はこの設定をオフにする
- エラーはOutputウィンドウでエラーを確認する事を推奨
- オプションダイアログを開く
- ビルド完了時にエラー一覧を表示のチェックを外してOK
その他
- アクティブでないブロックの表示をFalseにする
- オンだとコードの一部がテキストエディタでグレーアウトされる場合があるとのこと
- オンだとコードの一部がテキストエディタでグレーアウトされる場合があるとのこと
- 外部依存関係フォルダーの無効化をTrue
- ソリューションエクスプローラーで不要なフォルダを非表示にする
- ソリューションエクスプローラーで不要なフォルダを非表示にする
あと2つほど設定変更項目があったが、目的の記載が無いため行わないことに。
Visual Assist Xユーザー向け
なんのことだか不明ですが、インストールしていない(していてもわかっていない)のでスキップする事に
Intellisense、ライブ エラー、波線
これはやらなければ
翻訳単位の最大キャッシュは15に設定するとあるが、おそらく当時はなかったであろう翻訳単位の最大キャッシュの自動調整機能が追加されているため、その機能を使うことにしました。
UnrealVS 拡張
- 対応するVSバージョンの UnrealVS.vsix を実行する
自分の環境(Windows10)ではC:Program FilesEpic GamesUE_4.25EngineExtrasUnrealVSVS2019
に保存されていたため実行 - 続けてOK (何故か(2)となっているのが気になるがそのままにしておく)
デバッグ
UE4 Visualizer for Visual Studio 2013 をインストールする
やり方が書いていないのでスキップ
プログラミングクイックスタートガイド
- C++でプロジェクトを構成し、Visual Studioで最初のC++ゲームプレイクラスをプログラミングする方法の解説
- このチュートリアルでできるようになること
プロジェクト作成
- Game
- Blank
- プロジェクト構成
- C++
- スターターコンテンツ有効
C++クラス作成
- 新規C++クラスをクリック
- 親クラスは Actorを選択
- 名前をFloatingActorにして作成
- このような画面が表示される
このまま起動せず。タイトルになんて書いてあるのか調べる
を参考に
tasklist /fi "imagename eq cmd.exe" /fo list /v
を実行。下記タイトルが得られた。
C:WINDOWSsystem32cmd.exe /k " cd /d "C:Program Files (x86)Microsoft Visual Studio2019BuildToolsCommon7Tools...." & "C:Program Files (x86)Microsoft Visual Studio2019BuildToolsCommon7Toolsvsdevcmd.bat"
上記をもとに検索するも有力な情報は得られず。一度VisualStudioをアンインストールしてやり直すことに。
再インストール後やってみるとうまくいく。原因がわからなかったができたのでこれ以上深堀りはしないことに。
ヘッダー修正
- ソリューションエクスプローラーを開く
FloatingActor.h
を探し開く- これはヘッダーファイル
- 変数や関数をここで宣言する
- これはヘッダーファイル
- コードを追加
- オブジェクトの視覚的表現として動作する StaticMeshComponentを宣言しているとのこと
- Unreal Editor内で表示するためにUPropertyマクロを使用しているとの事
CPPファイル修正
FloatingActor.cpp
を開く
AFloatingActor修正
AFloatingActor::AFloatingActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; VisualMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh")); VisualMesh->SetupAttachment(RootComponent); static ConstructorHelpers::FObjectFinder<UStaticMesh> CubeVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube")); if (CubeVisualAsset.Succeeded()) { VisualMesh->SetStaticMesh(CubeVisualAsset.Object); VisualMesh->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f)); } }
- この関数(AFloatingActor)はコンストラクタ
- ここで行っていること
- VisualMesh参照に新しいStaticMeshComponentを挿入
- アクタにこのコンポーネントをアタッチ
- StarterContentアセットのキューブメッシュに設定
- コードでコンポーネントをアタッチする方法の詳細。リンク
Tick修正
// Called every frame void AFloatingActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); FVector NewLocation = GetActorLocation(); FRotator NewRotation = GetActorRotation(); float RunningTime = GetGameTimeSinceCreation(); float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime)); NewLocation.Z += DeltaHeight * 20.0f; //Scale our height by a factor of 20 float DeltaRotation = DeltaTime * 20.0f; //Rotate by 20 degrees per second NewRotation.Yaw += DeltaRotation; SetActorLocationAndRotation(NewLocation, NewRotation); }
- Tick関数にはリアルタイムに実行したいコードを追加する
- このコードではキューブが上下に浮遊しながら回転する
- Tickの詳細アクタのティック
コンパイル
結果
または UE4からでもビルドは可能とのこと
UE4 コンテンツブラウザからFloatingActorを見つけレベルにドラッグする
- コンテンツブラウザのソースパネルを開きC++クラスの中からFloatingActorを見つける
- ドラッグする
- 位置を設定する
- Playボタンを押す
結果
最後に
かなり躓いたけどなんとか完了しました。
スタティックメッシュを作成し動かすだけでも結構な手間ですね。
ブログを書く方法も進化してきた。模索中だけど変化を楽しもう
メモ
- コレクションって何?
- ソースパネルで階層を下にスクロールするにはマウスホイールを使うか、マウスの右クリックをドラッグ
- ソースパネルで検索する際に
-
を先頭につけると除外(NOT検索)できる - アセット管理領域ではCRUDのうち CRUを担う
- VSのソリューションの構成って何?
- Visual Studio のIntellisenseというのはエディターに表示されるポップアップエラーだったりエラー箇所に波線が書かれたりする機能の事を指す模様
- クラス名の先頭にはAが付与される模様