UE5
Unreal Engine 5
Epicgame Lancherからダウンロードするらしい
5.3.2利用
Procject path default
$User/Documents/Unreal Project/$HOGE
VCS
gitかperforce
個人だと無料だしgit一択
バイナリ多めになるっぽいのでgit-lfs導入も視野に
git側の制約(1push 2GB制約)を回避するために色々考えることもあるかも
その時になったら考えればOK
公式ドキュメント
すべてはUObjectクラスを継承したオブジェクト
ゲームプレイ領域をレベルと呼ぶ。要はマップ。
すべてのレベルを取りまとめたものをワールド
レベルに配置するオブジェクトはアクタと呼ぶ
アクタにコンポーネントをアタッチすると機能を追加可能
コンポーネントからアクタのもつ値にアクセス可能
ポーンはアクタのサブクラス。プレイヤーが指示を出すAI
auto process playserのattributeで実際のプレイヤーとの紐づけをする
ポーンのサブクラスにプレイヤーキャラとして使うキャラクターがある
プレイヤーコントローラPlayerController
最低ゲームに一つある入力を受け取るもの
マルチプレイヤーゲームだとプレイヤーごとにプレイヤコントローラが存在
グリッド移動
UUという単位がある
グリッドモードだとこの単位で動かす。
必要ならUUの大きさを変えよう
Settings
Engine Scalability Settings
で画面品質を変えられる
GameMode
ゲームのルールを制御するアクタ―
誰がどこにスポーンするか
プレイヤーにどのクラスを使うかの決定
マルチプレイヤーゲームならゲーム参加人数の制御
わざわざc++で作らなくてもBPベースで十分
Actor placement pannelでplayer startを配置したときのスタートキャラクターを定義したり
GameModeBaseとGameModeがある
GameModeBaseにマルチプレイやゲームステートを追加したのがGameMode
c++ベースで作るならどちらかをベースに
ProjectSettings->Maps&ModesでDefault Game Modeを設定可能
game state, game controllerのマッピング、ゲーム初期化等はGameModeのBeginからキックするとよさそう
code:example
protected
UFUNCTION(BlueprintImplementableEvent)
void StartGame();
c++でprotectedでGameModeでStartGame()イベント定義
c++クラスからBPを作成。
StartGame()を好きな場所に書けば、BPの処理をc++側から呼べる
UWorld
唯一無二の最上位の概念
ulevelを中に複数個内包できる
分割ロードとかで使う
Actor
rlevelに配置可能な任意のobject
AActorを継承して構築される
後述のComponentを持つことで様々な機能を持たせられる
必ずRootComponentをもつ
RootComponentは具体的にはUSceneComponentクラスへのポインタである
つまりUSceneComopnent派生のコンポーネントをRootComponentにできる
BeginPlay()
Tick(float DeltaTime)
c++からはUWorld::SpawnActor<>()で呼び出せる
component
Unityと同様にActorに振る舞いを追加するのに対応したcomponentアタッチする
コンポーネント毎にpropertyを持っていて、そのパラメータでふるまいを調整できる
CharactorMovementというコンポーネントでは登れる斜面の角度を設定できたりする
USceneComponent
USceneComponentはUActorComponentのsub class
https://gyazo.com/fb8ef9136fce1f658ce9890d552c5d7b
トランスフォーム(位置、回転,スケール)情報ををもつ
逆にいうとトランスフォームやattachment機能をもたないのがUActorComponent
ピュアなコンポーネントを自前で作成する際にはUActorComponentをベースに派生させるとよい
同じSceneComponent同士でのattachmentをサポート
A->SetupAttachemnet(B)
AをBの配下にアタッチする
Bが親となる
attachとはEditor上でいうComponent treeにぶら下げることを指す
基本はメッシュを持たず見えない
createDefaultSubobject<>()を利用する
mesh = CreateDefaultSubobject<uStaticMeshComponent>(TEXT("HogeMesh"));
Pawn
プレイヤー入力やAIによる入力受付可能なActor
PlayerInputComponentをもつ
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override
生成されたクラスでこんな仮想関数が定義される
この関数内で各アクションと関数をBindAction()で紐づけをする
UCameraComponentとUSpringArmComponentつかうと操作キャラクターっぽく実装できる
auto possess playerを有効にしてコントローラーと紐づけるとプレイヤー操作可能になる
level内に同一playerとポーンを複数紐づけるとおかしいことになるので注意
APlayerController
Player入力とPawnを紐づけてコントロールするためのクラス
AControllerクラスの子クラスであり、AControllerを内包する
エディタやコードでPlayerControllerとPawnを紐づけ
各コントローラー入力と紐づけたPawnの実際の操作を紐づける
virtual void SetupInputComponent()内で紐づける
操作Pawnを切り替えたりするさいにこういった仕組みで作っておいたほうが楽になる
ユーザー操作からAI操作に切り替えるのもPlayerControllerからAICtontrollerに切りかえるだけでよい
Character
Pawnの中でも移動機能をつけたもの
CharactorMovementComponentをもつ
歩いたり、飛んだり、泳いだり
主に二足歩行のものが前提だったりする
要は人間により近くプレイヤー操作に特化したPawnといえる
Functions
AddMovementInput()
AddControllerPitchInput()
AdControllerYawInput()
Jump()
code:example
void AShooterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis(TEXT("MoveForward"), this, &AMyCharacter::MoveForward);
PlayerInputComponent->BindAxis(TEXT("LookUp"), this, &APawn::AddControllerPitchInput);
PlayerInputComponent->BindAxis(TEXT("MoveRight"), this, &AMyCharacter::MoveRight);
PlayerInputComponent->BindAxis(TEXT("LookRight"), this, &APawn::AddControllerYawInput);
PlayerInputComponent->BindAction(TEXT("Jump"), EInputEvent::IE_Released ,this, &ACharacter::Jump);
}
Nav Mesh機能あり
component階層
CapsuleComponent
ArrowComponent
Mesh
CharactorMovementComponent
logging
UE_LOGマクロを使うとよい
文字列クラスはFString
UE_LOGにはポインタ渡しになるので注意
再生時にチルダキーを押すことでコンソールコマンドを実行可能
ゲームしながらDebugコマンドをうてる
初動
projectを適当にテンプレートで開始
必要なアセットをprojectに追加していく
空のレベルを作成
project settingsで空のレベルをDefault Map, Game Default Mapに設定
映像作品作る場合のプロジェクト設定
プラットフォーム
Windows
D3D12 Targeted Shader Format
SM6
ターゲットのRHI
Directx12
エンジン
Rendring
Dinamic global ilumination method
Lumen
Softwa Lay Tracing mode Detail
Tracing
Shadow map method
Virtual Shadow map