CG関係の備忘録ブログ

主にZBRUSH、blender

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にする