CG関係の備忘録ブログ

主にZBRUSH、blender

UE5 エラーメッセージ

HitActorを作成中に変なエラーが出た

 

エラーメッセージ
AddImpulse を指定する場合、BP_ThirdPersonCharacter.CharacterMesh0 SKM_Quinn_Simple では'CollisionEnabled'を'Query and Physics'または'Physics only'に設定する必要があります。

CollisionEnabledに該当する項目がない
SKM_Quinn_SimpleのEnablePerPolyColligionにチェックを入れたが解消せず

 

なぜかエラーメッセージでなくなったw

 

ググってみたらこのサイトにて発見

Adding smooth locomotion to your UE5 VR Project.


BP_ThirdParsonCharacterを開き、編集→プロジェクト設定→エンジン→コリジョン→Presetで新規ボタンを押しEditProfileでCollisionEnabledにて選択できそう

UE5 ギミック(続き)

参考動画

Unreal Engine 5 | Blueprint For Beginners - YouTube

 

結果

www.youtube.com

 

回復
DamageBoxフォルダを開きRM→ブループリントクラス→Actor名前をBP_HealthBox
開いてコンポーネントの追加ボタンでコリジョンBox名前をHealthBox
グラフのデフォルトノードを削除
HealthBoxを選択、OnComponentBeginOverlap、OnComponentEndOverlapを追加
OtherActorから引っ張りCastToBP_ThirdPersonCharacterを追加
CastToBP_ThirdPersonCharacterから引っ張りSetTimerbyEventを追加
Eventから引っ張りAddCustomEventを追加、名前をHealPlayer
CastToBP_ThirdPersonCharacterのAsBPThirdPersonCharacterから引っ張りGetHealthを追加、Healthから引っ張り等しい(==判定)を追加、値を100
HealPlayerから引っ張りBranchを追加
CastToBP_ThirdPersonCharacterのAsBPThirdPersonCharacterから引っ張りGetHealthを追加、Healthから引っ張りAddを追加、値を10
CastToBP_ThirdPersonCharacterのAsBPThirdPersonCharacterから引っ張りSetHealthを追加、Addとつなぐ
BranchのFalseとSetHealthをつなぐ
SetTimerbyEventのTimeを2、Loopingにチェックをする
コンパイル・セーブ

RM→EventBeginPlayを追加、引っ張りSpawnEmitteratLocationを追加、EmitterTemplateを適当に選択
RM→GetActorLocationを追加、Locationにつなぐ
コンパイル・セーブ
配置してテスト

抜けたら回復をやめる
SetTimerbyEventのReturnValueを引っ張り変数へ昇格、名前をTimerRef
変数TimerRefをドラッグして配置、
RM→ClearandInvalidateTimerbyHandleを追加、TimerRefとHandleをつなぐ
CastTo・・・とClearandInvalidateTimerbyHandleをつなぐ
コンパイル・セーブ
テスト


サッカー
Soccerフォルダを新規作成、
開いてRM→ブループリントクラス→Actorを追加名前をBP_SoccerGoal
開いてコンポーネントの追加ボタンでStaticMeshを選択
名前をSoccerGoal

マテリアル設定
Netマテリアルを開き、Maskテクスチャーをドラッグして配置
Netノードを選択し詳細→BlendModeをMasked、MaskテクスチャーのUVsとオパシティマスクをつなぐ
Netノードを選択し詳細→TwoSidedにチェックする

BP_SoccerGoalを開きスタティックメッシュにSM_SoccerGoalを選択

レベルにBP_SoccerGoalを配置し、位置・回転を調整、BP_SoccerGoalの中で大きさを調整
コンポーネントの追加ボタンでBoxColligionを選択、トランスフォーム調整
Boxを選択してグラフのデフォルトノードを削除
OnComponentBeginOverlap、OnComponentEndOverlapを追加

ボール
RM→ブループリントクラス→Actorを追加名前をBP_SoccerBall
開いてコンポーネントの追加ボタンでStaticMeshを選択
名前をBallMesh
スタティックメッシュにSM_Ballを選択
大きさを調整
レベルに配置

BP_SoccerGoalを開き
OnComponentBeginOverlapのOtherActorから引っ張りCastToBP_SoccerBallを追加、引っ張りSpawnEmitteratLocationを追加
SoccerGoalをドラッグして配置、引っ張りGetWorldLocationを追加、ReturnValueをSpawnEmitteratLocationのLocationにつなぐ
EmitterTemplateにHitを選択
コンパイル・セーブ

物理
BP_SoccerBallを開きBallMeshを選択
詳細の物理→SimulatePhysicsにチェック
Mass(kg)にチェック、値を20
コンパイル・セーブ
動きをテスト

ゴールの調整
SM_SoccerGoalを開き、詳細→コリジョンコリジョンプリセット→ColligionComplexityをDefaultからUseComplexColligionAsSimpleに変更
セーブして動きをテスト

ボールを消す
BP_SoccerGoalを開き、CastToのAsBPSoccerBallから引っ張りDestroyActorを追加SpawnEmitteratLocationとつなぐ
Locationから切り離し、引っ張りMakeVector、
GetWorldLocationから引っ張りBreakVector
X,Y同士をつなぎ、Zに300を入れる

ボールの調整
SM_Ballを開き、上のコリジョンからコリジョンを取り除く→球体単純化~を選択
セーブ・テストするとスムーズに転がる

ボールをリスポーン
BP_SoccerGoalを開き、DestroyActorから引っ張りDelayを追加Durationを2秒にする
Delayから引っ張りクラスからアクターをスポーンします(SpawnActorNONE)を追加、クラスを選択でBP_SoccerBallを選択
SpawnTransformで構造体ピンを分割、SpawnTransformLocationを変数に昇格、名前をBallSpawnLocation
コンパイル・セーブ
変数を追加し、名前をSoccerBallRef、変数の型をオブジェクトタイプ→BP_SoccerBallObject→オブジェクト参照を選択
RM→EventBeginPlayを追加、SoccerBallRefをドラッグしてGetで配置、引っ張りIsValid?を追加、EventBeginPlayとつなぐ
SoccerBallRefから引っ張りGetActorLocationを追加
BallSpawnLocationをドラッグしてSet配置、
GetActorLocationのReturnValueとBallSpawnLocationをつなぐ
IsValidとBallSpawnLocationをつなぐ

リスポーンしない
GetSoccerBallRefを選択、詳細→インスタンス編集可能とスポーン時に公開をチェックする
レベルでサッカーゴールを選択、詳細のデフォルトのスポイトツールでボールをクリックし、SoccerBallRefにBP_SoccerBallが入ったのを確認する

 


HitActorをつくる
ブループリントクラス→Actor
名前をBP_HitActor
開いてスタティックメッシュを追加
名前をHitActor
CupsuleColligionを追加、トランスフォーム調整
Arrowを追加、トランスフォーム調整
RotatingMovementを追加
コンパイル・セーブ
レベルに配置、回ることを確認

プレイヤーをラグドール
グラフのデフォルトノードを削除

Cupsuleを選択

OnComponentBeginOverlap、OnComponentEndOverlapを追加
OtherActorから引っ張りCastToBP_ThirdPersonCharacterを追加

BP_ThirdPersonCharacterを開き
RM→AddCustomEventを追加
名前をHitByHitActor
AddCustomEventを選択し、詳細→インプットの+ボタンを押し、名前をHitLocation、型をVector
コンパイル・セーブ

BP_HitActorを開き
AsBPから引っ張りHitByHitActorを追加
Arrowをドラッグして配置、引っ張りGetForwardVectorを追加ReturnValueとHitByHitActorのHitLocationをつなぐ

BP_ThirdPersonCharacterを開き
HitByHitActorから引っ張りSetSimulatePhysics(Mesh)を追加、Simulateにチェック
SetSimulatePhysicsから引っ張りAddImpulseを追加
ターゲットから引っ張りMeshを追加
Impulseから引っ張りMakeVector、HitByHitActorのHitLocationから引っ張りBreakVector、
X,Y同士をつなぎ、Zに50000を入れる
BreakVectorのInVecから引っ張り乗算を追加、インプットにHitLocationをつなぐ
もうひとつのインプットを型を変換しフロートにする
値を5000にする
コンパイル・セーブ
テスト

BP_ThirdPersonCharacterを開き
Meshを選択、コリジョンプリセットをRagdollに変更
コンパイル・セーブ
テスト

カプセルに衝突を繰り返している?
Meshは飛ばされたがカプセルはその場に残っているので
位置を調整するっていうこと?

CharacterMovementをドラッグして配置、引っ張りDisableMovementを追加
AddImpulseとつなぐ
DisableMovementから引っ張りDelayを追加、5秒に設定
Delayから引っ張りSetSimulatePhysics(Mesh)を追加
Simulateにチェック
線をダブルクリックでポイントが付く
SetSimulatePhysicsから引っ張りAttachComponentToComponentを追加
MeshをTargetにドラッグアンドドロップ
CupsuleComponentをParentにドラッグアンドドロップ
LocationRule,RotationRule,にSnapToTargetを選択
Meshから引っ張りSetRelativeLocationを追加
AttachComponentToComponentからつなぐ

SetRelativeLocationのNewLocationのZに-95を入れる
※相対位置?Meshの初期値を入れている-89
Meshから引っ張りSetRelativeRotationを追加、Zに-90を設定
SetRelativeLocationからつなぐ
CharacterMovementをドラッグして配置、引っ張りSetmovementModeを追加NewMovementModeにWalkingを選択
SetRelativeRotationからつなぐ
コンパイル・セーブ
テスト

新規変数追加bool型
名前をisKnockOut?
isKnockOut?をドラッグしてGetで配置、引っ張りBranchを追加
HitByHitActorからつなぎ、FalseはSetisKnockOut?をつなぎチェックを入れる
SetisKnockOut?からSetSimulatePhysicsにつなぐ
もう一つSetisKnockOut?を追加し、最後のノードSetmovementModeからつなぐ

BP_HitActorを開きHitActorを選択、詳細のコリジョン
コリジョンプリセットをCustom...を選択しトレース応答のCameraを無視するにチェック

複数配置
BP_HitActorを開きRotationMovementを選択
ローティングコンポーネントのRotationRateでスピード調整可能
グラフで新規変数を追加
名前をRotationRate、型をVector
コンパイル・セーブ
インスタンス編集可能にチェック

RM→EventBeginPlayを追加、RotationMovementをドラッグしてGet配置、引っ張りSetRotationRateを追加
変数のRotationRateを選択、詳細で変数の型をRotatorに変更。メッセージが出るので変数の型を変更をクリック
コンパイル・セーブ

RotationRateをドラッグしてGet配置、SetRotationRateにつなぐ
EventBeginPlayとSetRotationRateをつなぐ
変数RotationRateを選択し、詳細→デフォルト値でZを180に設定
コンパイル・セーブ

レベルに配置したBP_HitActorを一つ選択し、詳細→デフォルトのZを-180に変更
テストすると、1つだけ逆回転する

 

帽子をかぶってハンマーをくらうと大変なことになる
HatMeshのコリジョンを無効にする
コリジョンプリセットをNocolligionにする

UE5 ギミック

参考動画

Unreal Engine 5 | Blueprint For Beginners - YouTube

 

 

成果

www.youtube.com

 

ドアの開閉をつくる
BluePrintフォルダをつくりDoorフォルダをつくりBluePrintClass→Actor、名前をBP_Door
開いてコンポーネント追加、StaticMeshを選択
、名前をDoorFrame
StaticContentフォルダでRM→機能またはコンテンツパックを追加→コンテンツをクリック、StarterContentを選択しプロジェクトに追加ボタン(やらなくてもPropsフォルダ入ってた)
SM_DoorFrameをスタティックメッシュにドラッグアンドドロップ

コンポーネント追加、StaticMeshを選択
、名前をDoor
SM_Doorをスタティックメッシュに設定、位置をフレームに合わせる
コンパイル・セーブ

コンポーネント追加、BoxCollisionを選択、位置・スケールを調整
イベントグラフでデフォルトノード削除
詳細タブの↓イベントのOnComponentBeginOverlapの+をクリック、OtherActorから引っ張りCastToBP_ThirdPersonCharacterを選択、一番上から引っ張りEnableInputを選択
RM→GetPlayerContollerを選択、EnableInputのPlayerContollerにつなぐ

詳細タブの↓イベントのOnComponentEndOverlapの+をクリック、OtherActorから引っ張りCastToBP_ThirdPersonCharacterを選択、一番上から引っ張りDisableInputを選択
GetPlayerContollerからDisableInputのTargetにつなぐ

RM→インプット→キーボードイベントからEKEYを追加、Pressedから引っ張りFlipflopを選択
Doorメッシュをドラックして配置、引っ張りSetRelativeRotationを選択、Zを90に設定
FlipflopのAからSetRelativeRotationにつなぐ

DoorとSetRelativeRotationをコピペしてBにつなぎZを0に設定

ドアの開閉をなめらかに改善
FlipflopとSetRelativeRotationの接続を切って間にタイムラインを追加する(AddTimeline)を追加する
名前をDoorTimeline
ダブルクリックで開き、+トラックボタンを押してフロートトラックを追加する
RM→キーを追加(AddKey)、時間を0、値を0に設定
RM→キーを追加(AddKey)、時間を2、値を90に設定
長さを2秒に変更
キーを両方選択して、RM→自動にする
イベントグラフに戻り新規Track0とSetRelativeRotationのNewRotationをつなげないので、NewRotationから引っ張りMakeRotatorを選択、Zと新規Track0をつなぐ
DoorTimelineとSetRelativeRotationをつなぐ
FlipflopのBとDoorTimelineのReverseをつなぐ


CastToBP_ThirdPersonCharacterは重なったActorがサードパーソンかチェックし、そうであれば上のルート、そうでなければCastFailedのルートを通る

FlipflopはAまたはBを実行。eが押されたらAが実行され、もう一度押すとBが実行される

ドアをすり抜けていたが、SM_Doorの上のコリジョンボタンで適当に選択したらすり抜けなくなった

 

帽子をかぶる
HatフォルダでRM→ブループリントクラス→Actor
名前をBP_Hat
開いてコンポーネント追加、StaticMeshを選択
、名前をHat、スタティックメッシュにSM_Hatを選択
コンパイル・セーブ
コンポーネントの追加ボタンでsphereColligionを選択
Hatの子にして大きさを調整
イベントグラフでデフォルトノード削除
sphereを選択、詳細タブの↓イベントのOnComponentBeginOverlapの+をクリック、OtherActorから引っ張りCastToBP_ThirdPersonCharacterを選択、引っ張りEnableInputを選択、PlayerContollerから引っ張りGetPlayerContollerを選択

OnComponentEndOverlapの+をクリック、OtherActorから引っ張りCastToBP_ThirdPersonCharacterを選択、引っ張りDisableInputを選択
GetPlayerContollerからDisableInputのTargetにつなぐ

RM→インプット→キーボードイベントからEKEYを追加、Pressedから引っ張りFlipflopを選択

BP_ThirdParsonCharacterを開き、イベントを追加→カスタムイベントを追加、名前をEquipHat
コンポーネント追加、StaticMeshを選択
、名前をHatMesh(スタティックメッシュは設定しない)
HatMeshをドラッグして配置、引っ張りSetStaticMesh、EquipHatとつなぐ
NewMeshでSM_Hatを選択、NewMeshから引っ張りEquipHatにドラックするとつながる(なにやってるかわからん)

BP_Hatを開き、EKEYのCastToBP_ThirdPersonCharacterのAsBPThirdPersonCharacterから引っ張りEquipHatを選択
NewMeshでSM_Hatを選択
コンパイル・セーブ
レベルに配置し確認すると、帽子が腹につきささる

BP_ThirdParsonCharacterを開き、SetStaticMeshから引っ張りAttachComponentToComponent(HatMesh)を選択
コンポーネントのMesh(CharacterMesh0)をドラッグして配置、Parentに接続
SocketNameにHatSocket
LocationRole,RotationRule,ScaleRuleにSnapToTargetを選択

コンポーネントのMeshを選択、スケルタルメッシュをダブルクリックで開き、スケルトンタブを開く
ケルトンツリーでHeadボーンをRM→ソケットを追加
名前をHatSocketにする

ノードを範囲選択し、cでコメントを入力HatLogic

※ソケットはメッシュをアタッチするときに使う

コンパイル・セーブ
レベルに配置し確認すると、帽子のトランスフォーム調整が必要

スケルタルメッシュのHatSocketを選択
RM→プレビューアセットを追加→SM_Hatを選択
プレビュー専用となる
HatSocketのトランスフォームを調整し保存する

帽子をとったら消す
BP_Hatを開きEquipHatから引っ張りDestroyActor
コンパイル・セーブ

 

ダメージボックス
DamageBoxフォルダでRM→ブループリントクラス→Actor
名前をBP_DamageBox
開いてコンポーネント追加、BoxCollisionを選択、名前をDamageBox

DamageBoxを選択、詳細タブの↓イベントのOnComponentBeginOverlapの+をクリック、OtherActorから引っ張りCastToBP_ThirdPersonCharacterを選択、引っ張りEnableInputを選択、PlayerContollerから引っ張りGetPlayerContollerを選択

BP_ThirdParsonCharacterを開き、変数を追加
名前をHealth
コンパイル・セーブしデフォルト値を100

BP_DamageBoxを開き、CastToBP_ThirdPersonCharacterのAsThirdPersonCharacterから引っ張りGetHealthを選択
Healthから引っ張り-(Subtract)減算するを選択
AsThirdPersonCharacterから引っ張りSetHealthを選択
減算とHealthをつなぐ
CastToBP_ThirdPersonCharacterとSetHealthをつなぐ
SetHealthから引っ張りPrintString
Healthをつなぐ

コンポーネントのDamageBoxを選択、レンダリングのHiddenInGameのチェックをはずす
コンパイル・セーブ
テストし90が表示される

オーバーラップしなくなるまで減算しつづける
GetHealth以降を削除
AsThirdPersonCharacterを変数に昇格、引っ張りSetTimerbyEventを選択
Eventから引っ張りカスタムイベントを追加(AddCustomEvent)名前をDamagePlayer
引っ張りApplyDamageを選択
変数AsThirdPersonCharacterをドラッグして配置、Getを選択してDamageActorにつなぐ
BaseDamageを30にする

SetTimerbyEventのtimeを2にする(単位:秒)
Loopingにチェックを入れる

※SetTimerbyEventを使用すると特定のイベントを何度もループできる

BP_ThirdParsonCharacterを開き、
RM→イベント(EventAnyDamage)を追加
変数Healthをドラッグして配置、Getを選択
Healthから引っ張り減算を選択、EventAnyDamageのDamageを引く数につなぐ
Healthから引っ張りSetHealthを選択
EventAnyDamageとSetHealthをつなぐ
PrintStringでHealthを表示する

※ApplyDamageが実行されると、EventAnyDamageが呼び出される

プログレスバーを表示する
コンテンツブラウザでRM→ユーザーインターフェース→ウィジットブループリント
名前をHealthBar_W
開いてパレットのパネル→CanvasPanelをドラッグして配置
一般→ProgressBarを配置
スロット→アンカーから左下を選択
花びらみたいなのの1時方向のをつまんでProgressBarの右上角に合わせる。他も同様4角合わせる
コンパイル・セーブ
プログレスのPercentをドラッグすると、バーも変動する
〃のバインド→バインディングを作成
グラフをRM→GetOwningPlayerPawnを追加
ReturnValueから引っ張りCastToBP_ThirdPersonCharacterを選択GetPercentとつなぐ
CastToBP_ThirdPersonCharacterのAsBPThirdPersonCharacterから引っ張りGetHealthを選択
Healthをパーセントに変換するため引っ張り乗算する(Multi)を選択、下の数値を0.01にする。乗算結果をReturnNodeのReturnValueをつなぐ
CastToBP_ThirdPersonCharacterとReturnNodeをつなぐ

BP_ThirdParsonCharacterを開き、
RM→EventBeginPlayを追加、引っ張りユーザーインターフェース→ウィジットを作成(CreateW?)
Classを選択→HealthBar_W
OwningPlayerから引っ張りGetPlayerContollerを選択
ReturnValueから引っ張りAddToViewPortを選択
コンパイル・セーブ
テスト

タイマーのループを停止する
BP_DamageBoxを開き、OnComponentEndOverlapから引っ張りCastToBP_ThirdPersonCharacterを選択
ApplyDamageのReturnValueを変数に昇格
名前をTimerRef
変数TimerRefをドラッグして配置、Getして引っ張りClearandInvalidateTimerbyHandleを選択、CastToBP_ThirdPersonCharacterとつなぐ
コンパイル・セーブ

パーティクルを追加し映えさせる
BP_DamageBoxを開き、RM→EventBeginPlayを追加、引っ張りSpawnEmitterAtLocationを選択
RM→GetActorLocationを選択、引っ張りLocationにつなぐ
SpawnEmitterAtLocationのEmitterTemplateにパーティクルを指定する(P_ky_MagicCircle)
コンパイル・セーブ
表示テスト

DamageBoxを非表示
レンダリングのHiddenInGameをチェック

UE5 入門講座②

参考動画

【ブループリント攻略講座】入門編 Part2/2 アニメーションの設定【プログラミング未経験者のためのゲーム制作動画】【Unreal Engine】 - YouTube

 

アニメーションBP
アニメーショングラフはアニメーションの状態を遷移させるロジック=ステートマシン

ブレンドスペース
アニメーションをなめらかに切り替える
横軸はspeedでスピードの位置によってアイドリング→歩く→走るを切り替えていく

ブレンドスペースをつくる
RM→アニメーション→ブレンドスペース1D→スケルトンを選択
名前をBS_IdleWalkRun

開いてアセット詳細のAxisSettingの水平軸のNameにSpeed
、MaximumAxisValueを600、GridDivisionsを2にする

したのBS_IdleWalkRun内にIdleアニメーションファイルをドラッグアンドドロップでSpeed=0付近に配置

Walkを真ん中、Runを600に配置する
GridDivisionsはここの縦線の本数
※この中でcntl+マウスドラッグでSpeedを変動させ、アニメーションの遷移を確認できる

アニメーションBPをつくる
RM→アニメーション→アニメーションBP→スケルトンを選択
名前をBP_PlayerAnim

開いてAnimGraphでRM→StateMachine内の新規のマシンを追加(AddNewStateMachine)を追加
名前をLocomotion
出力ポーズとつなぐ

Locomotionを開いてRM→ステートを追加
名前をIdleWalkRun
EntryからIdleWalkRunへとつなぐ

IdleWalkRunを開いてアセットブラウザからBS_IdleWalkRunをドラッグ、アニメーションポーズを出力につなぐ
※Speedに値を入力することにより、BSのアニメーションが切り替わる
Speedを引っ張り変数へ昇格する

前回のBP_PlayerとアニメーションBPを関連付ける
BP_Playerを開きコンポーネントのMeshを選択、右側AnimClassにBP_PlayerAnimを設定
コンパイル・セーブ

BP_PlayerAnimを開きイベントグラフに切り替え
TryGetPawnOwnerのReturnValueを引っ張り、?IsValidを選択
イベントBlueprintUpdateAnimationとIsValidをつなぐ
ryGetPawnOwnerのReturnValueを引っ張り、GetVelocityを選択
GetVelocityを引っ張りVectorLengthを選択
変数SpeedをドラッグしSetSpeedを配置、IsValidのIsValidからつなぐ
VectorLengthとSetSpeedをつなぐ

TryGetPawnOwnerはアニメーションBPの所有者(BP_Player)を取得する
IsValidはInputObjectが有効かどうかを調べる
イベントBlueprintUpdateAnimationはフレーム更新ごとに呼ばれる
GetVelocityはアクターの速度を取得する

コンパイル・セーブしてアニメーションするかテストする

地面に足めり込みを修正
BP_Playerを開き、コンポーネントのCapsuleComponentを選択
形状のCapsuleHalfHeightを96、CapsuleRadiusを42
コリジョンが小さくて当たり判定がおかしかった
※浮いてたので93に調整

ジャンプ
BP_PlayerAnimを開きLocomotionを選択
RM→ステートを追加
名前をJumpStart
RM→ステートを追加
名前をJumpLoop
RM→ステートを追加
名前をJumpEnd
IdleWalkRunとJumpStartをつなぐ
JumpStartとJumpLoopをつなぐ
JumpLoopとJumpEndをつなぐ
JumpEndとIdleWalkRunをつなぐ
矢印アイコンをクリックして開く
結果ノードから引っ張り変数へ昇格
名前をIsInAir?
JumpStartを開きアセットブラウザからジャンプのアニメーションをドラッグして配置、アニメーションポーズを出力につなぐ
Jumpのシーケンスプレイヤーを選択し、詳細タブ、設定のLoopAnimationのチェックを外す(1回でいい)

次の矢印アイコンをクリックして開く
TimeRemaining(ratio)を追加し、ReturnValueから引っ張り<(より少ない)を選択、したの値を0.2にして結果につなぐ(残り20%で次のアニメーションに遷移する)

TimeRemaining(ratio)はアニメーションの残り時間を比率(0~1)で返す

JumpLoopを開き当該アニメーションをドラッグして配置、アニメーションポーズを出力につなぐ

次の矢印アイコンをクリックして開く
IsInAir?をドラッグしてGetIsInAir?を配置、引っ張りNotBooleanを選択、結果につなぐ

JumpLoopを開き当該アニメーションをドラッグして配置、アニメーションポーズを出力につなぐ

最後の矢印アイコンをクリックして開く
TimeRemaining(ratio)を追加し、ReturnValueから引っ張り<(より少ない)を選択、したの値を0.2にして結果につなぐ

IsInAir?を実装
BP_PlayerAnimを開きイベントグラフ
TryGetPawnOwnerのReturnValueを引っ張り、GetMovementComponentを選択、GetMovementComponentのReturnValueを引っ張り、IsFallingを選択
IsInAir?をドラッグしてSetIsInAir?を配置
SetspeedとIsInAir?をつなぐ
IsFallingのReturnValueをIsInAir?につなぐ

GetMovementComponentはキャラクターのMovementComponentを参照する
IsFallingは地上にいる(False)空中にいる(True)を判定する

着地がうまくいかない

Locomotionを開いて
プレイボタン横の・・・クリック新規エディタウインドウ
横のプルダウンからスポーン済みを選択

UE5 入門講座①

参考動画

【ブループリント攻略講座】入門編 Part1/2 キャラクターの移動【プログラミング未経験者のためのゲーム制作動画】【Unreal Engine】 - YouTube

 

準備

UE5起動

ゲーム→サードパーソン
動作確認

 

新規レベル

ファイル→新規レベル→Basic
保存先フォルダをつくる(Maps)
左上のフロッピーボタンを押す

開いたときにこのレベルが表示されるように
編集→プロジェクト設定
プロジェクト→マップ&モード→DefaultMaps
マップを自分のに変更し、×ボタンで閉じる

 

初期設定
BluePrintフォルダを作成
①RM→ブループリントクラス→
GamemodoBaseを選択、名前をBP_MyGameMode
②RM→ブループリントクラス→PlayerControllerを選択、名前をBP_PlayerController
②RM→ブループリントクラス→Characterを選択、名前をBP_Player

BP_MyGameModeを開く
右側クラスのPlayerControllerClassをBP_PlayerControllerに設定
〃DefaultPawnClassをBP_Playerに設定
コンパイル
これでBP_PlayerControllerがBP_Playerを管理する

ワールドセッティング
ゲームモードオーバーライドをBP_MyGameModeに設定

 

キャラクター設定
BP_Playerを開く
左側のMeshを選択、右側のスケルタルメッシュでメッシュを選択
青い矢印方向にむけ、高さを合わせる
コンポーネントの追加ボタンでSpringArmを選択、名前をCameraBoom
CameraBoomの子になるようにCameraBoomを選択した状態でコンポーネントの追加ボタンを押し、Cameraを選択
CameraBoomはカメラとプレイヤーの間に障害物があったら自動的に調整するらしい(これ厄介かも)

キャラクターの移動
編集→プロジェクト設定
エンジン→インプットのデフォルト設定を一旦削除する。アクションマッピングと軸マッピングのゴミ箱ボタンで一括削除

マッピング
+ボタンを押し名前をMoveForward、キーボードをWに設定
さらにMoveForwardの+ボタンを押しキーボードをSに設定、Scaleを-1にする。ゲームパッド左サムスティックY軸を設定

マッピングの+ボタンを押し名前をMoveRight、
同様にD,A、ゲームパッドX軸を割り当てる

ゲームパッドのみ割り当ては割愛

マッピングの+ボタンを押し名前をLookUp、マウスYを割り当てScaleを-1にする。

マッピングの+ボタンを押し名前をTurn、マウスXを割り当てScaleを1にする。

アクションマッピング
アクションマッピング+ボタンを押し名前をJump、キーボードのSpaceを設定

×ボタンで閉じる

 

アニメーションなしで移動をつくる
イベントグラフのデフォルトノードを削除
RM→軸イベントMoveForward(先に設定したもの)
※値を確認するため、プリントストリングを設定

AddMovementInputをつなぐ
※試しにxに1を入れプレイすると前に進む
AxisValueとScaleValueをつなぐ

スピードの設定はコンポーネントのCharacterMovementを選択、右側のキャラクタームーブメント:歩行のMaxWalkSpeedで調整する

GetControlRotationを追加、ReturnValueでRM→構造体ピンを分割
GetForwardVectorを追加、InRotでRM→構造体ピンを分割しZ同士をつなぐ
ReturnValueとWorldDirectionをつなぐ

RM→軸イベントMoveRight

GetRightVectorを追加、ピンを分割しGetControlRotationのZ同士をつなぐ

AddMovementInputをコピペ、MoveRightとつなぐ
AxisValueとScaleValueをつなぐ
GetRightVectorのReturnValueとWorldDirectionをつなぐ


RM→軸イベントLookUpを追加、AddControllerPitchInputを追加、それぞれつなぐ

RM→軸イベントTurnを追加、AddControllerYawInputを追加、それぞれつなぐ

アクションイベントJumpを追加し、Pressedから引っ張り、Jumpをつなぐ。Releaseから引っ張りStopJumpingをつなぐ

コンパイル・セーブ
WASD、マウス、Spaceキーで移動、視点、ジャンプを確認

改善(移動方向に向き、マウスで全方位を見れる)
コンポーネントのBP_Playerを選択、ポーンのUseControllerRotationYawのチェックを外す
※入れたままだとコントローラの回転方向にキャラクターの回転が固定される

コンポーネントのCameraBoomを選択、カメラセッティングのUsePawnControllerRotationのチェックを入れる
※外れたままだとプレイヤーの背中を写そうとするのでチェックを入れる

コンポーネントのCharacterMovementを選択、キャラクタ移動(回転設定)のOrientRotationToMovementのチェックを入れる
※入れると回転方向にキャラクターが向く

GetWorldDeltaSecondsはフレームレートの1フレームに相当する時間を返す
※フレームレートの変更
t.MaxFPS NN

ジャンプの高さ変更
キャラクタムーブメント(跳躍/落下)
※高さではなく加速度。初期値は420cm/s

UE5 今日覚えた事

参考動画

【UE5ゲーム制作】UE5で新しくなったリターゲットの方法を解説(Mixamo ⇒ UE5 Manny)【逆引きUE】 - YouTube

 

他のキャラクターからアニメーションをコピーする(ファイルが増える)

 

同一構造のリターゲット
複製したいアニメーションをRM→アニメーションアセットのリターゲッティング
IKリターゲッタにUE4MannyUE5Mannyを選択
スケルタルメッシュを選択しリターゲットボタン

 

別構造のリターゲット

公式の方法でIKリターゲッタまで作り、アニメーションを選択し、選択したアニメーションをエクスポートボタンを押す