参考動画
Unreal Engine 5 | Blueprint For Beginners - YouTube
結果
回復
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にする