正解はtexCoordの応用だった。
texCoordを縦のグラデーションと横グラデーションに分け
値をLerpのAlphaにつないでお好きな色をA,Bにつなぐ。
2つ作ってMultplyして縦横グラデーションになるようにMIXした。

さらに回転させたい

下の部分が見切れていたので追加しました。

参考
UE4]UMGで使えるでシンプルなグラデーションを作 …historia.co.jp
正解はtexCoordの応用だった。
texCoordを縦のグラデーションと横グラデーションに分け
値をLerpのAlphaにつないでお好きな色をA,Bにつなぐ。
2つ作ってMultplyして縦横グラデーションになるようにMIXした。
さらに回転させたい
下の部分が見切れていたので追加しました。
参考
UE4]UMGで使えるでシンプルなグラデーションを作 …historia.co.jp
https://docs.unrealengine.com/4.26/ja/ProgrammingAndScripting/Subsystems/
このページにもあるがUE5には多くのサブシステムがあるみたい。
もうちょっと前からあったみたいスクショは4.25.4。
全部BluePrintからアクセスできる。
・ただでさえ入り組んだクラスにさらに API を追加しなくてすむ。
とあるように、中にはすごいAPIがたくさん詰まってる。
できないと思ってたことができることもある。
ここにあるだけで
EngineSubsystem
EditorSubsystem
GameInstanceSubsystem
LocalPlayerSubsystem
AssetEditorSubsystem
で肝心のAPIが
BrushEditingSubsystem
EditorUtilitySubsystem
で肝心のAPIが
ImportSubsystem
LayersSubsystem
MoviepipelineQueueSubsystem
PanelExtentionSubsystem
AssetTagsSubsystem
AutoDestroySubsystem
LandscapeSubsystem
ObjectTraceWorldSubsystem
参考URL
https://www.docswell.com/s/EpicGamesJapan/KY18EZ-UE4_AllStudy04_Subsystem#p1
プロジェクトのサンプルはアンリアルクエスト5のプロジェクトを使いました。
https://historia.co.jp/unrealquest05 のDiscordから #プロジェクトデータ配布のチャンネルからDLできます。Discordサーバーが消えた場合はあとで考えます。
使用バージョンは
UE5.2.0
切られるオブジェクトを用意する
ブループリントクラス>Actorで作成します。
名前はBP_ProceduralMesh_Actor としました。
作成したブループリントを開き
DefaultSceneRootの下に
ProceduralMeshとCubeまたはキューブを追加します。
Cubeコンポーネントの設定
M_Procedralというマテリアルを作って
/Game/UnrealQuest5/Props/LevelPrototyping/Meshes/SM_Cubeをコピーしてきて
CubeコンポーネントのスタティックメッシュをSM_Cubeに変更
コピーしてきたSM_Cubeの設定を行います。
AllowCPUAccess にチェックを入れてCPUからでもメッシュ情報にアクセスできるようにします。
Procedural Meshコンポーネントの設定
Procedural Meshコンポーネントの Use Complex as Simple Collisionのチェックを外します。
コンストラクタのノードを設定する
ProceduralMeshに対してCube情報をコピーしてCubeコンポーネントを削除します。
コピーしてきたレベルに作成したBPをおいてみました。
BP_UQ5_Playerを開いて
BladeMeshのOnConponentBeginOverlapをクリックしてノードを作ります。
これ動くのSet Simulate Physics だけだったので、結局
ファーストパーソン を追加
/Game/FirstPerson/Blueprints/BP_FirstPersonProjectile をコピーして
BP_ProceduralBulletとする
On Component Hit をこのように改造する
BP_UQ5_PlayerにBullet_Spawnのカスタムイベントを追加
通常攻撃をコンボにカスタムしてあるけど、こんな感じでSequenceでBullet_Spawnを呼ぶ
BP_ProceduralBulletの当たり判定がデカくなるようにスケールをデカくした
できたのがこちら
アンリアルクエスト5のDiscordでこのページを見た兎月さんがもっとすごい実装方法をしていたので許可を頂いたので、こちらに張らせていただきます
https://uq5.netlify.app/UE5-1-1_Cut_with_a_blade.png
兎月さんに感謝!できたのがこれ。
きもちいですねカットした法線どおりに切れると!
参考サイト
SkeltalMeshをカット?
https://www.unrealengine.com/marketplace/en-US/product/slice-skeletal-mesh-vr?sessionInvalidated=true
[Unreal Engine] Editor Utility Blue Printでdialogを途中から表示するには
EUB上で Show Message Dialogノードを使う
eub ue5 blueprint dialog editor utility blueprint
パーティクルなんてプレイヤーが遠くなったらDeactivateしてしまえば軽量化なんてしなくても大体の場合、負荷のボトルネックにはならないみたい
BluePrint でActor選んで
ビューポートでNaiagaraを配置
SphereColiderを追加して半径を1250から1800に指定
コリジョン設定をOverlapAll
Begin OverlapでNaiagaraのVisibleとActivateしてついでにSet Relative Location 0,0,0
End OverlapでNaiagaraのVisibleとDeactivate
してしまえばNaiagaraがボトルネックになることは避けられる。
Particle Stateの
Kill Particles When Lifetime Has Elapsed
Loop Particles Life Time
Let Infinity Lived Particles Die When Emitter Deactives
ライフタイムが経過したときにパーティクルを殺す <あとからするとうまくいかない
ループ パーティクルの寿命 <意味不明
エミッタが非アクティブになったときに無限に生きたパーティクルを消滅させる <うまくいった。
音楽のランダムの歴史から言って
途切れなくランダムにする方法は理論から行くと長ければ長いほど途切れたと錯覚しやすいので長くする。
エミッタの更新の
Life Cycleは
loop Duration 60
パーティクルのスポーンのInitialize Particleの
lifetimeは
Random Rageにして
5から60の値の設定
関係ないが
Scale Mesh SIzeはパーティクルのスポーン時にMesh AttributeがUniformで1.0になってないと表示されなくなる。
完成したもの
HangingParticulatesで
これは自分の中でかなりおおきな発見だった。
Shading Modelを変更しなくても、透明で、ベースカラー、Metalic スペキュラ、ラフネス、エミッシブ、Normal、タンジェント、ワールド位置オフセット、ワールドディスプレースメント、テッセレーション乗数、アンビエントオクルージョン、屈折が使える
詳細は以下
https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Materials/HowTo/Transparency/
【UnrealEngine】水っぽいマテリアルを作ったときのメモ(屈折率)
https://qiita.com/nchhujimiyama/items/8d2c820f2a1367864569
他にも
import unreal
import codecs
import os
def my_makedirs(path):
if not os.path.isdir(path):
os.makedirs(path)
my_makedirs(SaveDir)
print("SaveDir= "+SaveDir)
print("FileName= "+FileName)
savePath=SaveDir+"/"+FileName+".tga"
print("savePath= "+savePath)
editorAssetLib = unreal.EditorAssetLibrary()
texture2d=editorAssetLib.load_asset(assetPath)
#canvasRenderTarget2D=editorAssetLib.load_asset(assetPath)
#texture2d=unreal.Texture2D(canvasRenderTarget2D)
print("texture2d= "+str(texture2d))
task = unreal.AssetExportTask()
task.set_editor_property('automated', True)
task.set_editor_property('filename', savePath)
task.set_editor_property('object', texture2d)
task.set_editor_property('prompt', False)
task.set_editor_property('exporter', unreal.TextureExporterTGA())
check = unreal.Exporter.run_asset_export_task(task)
if check==True:
pass
else:
print(u"tga イメージの生成に失敗しました")
/Game/ThirdPerson/Blueprints/
には
BP_ThirdPersonCharacter 1つしか入ってないわりに女かい。ってなる
(オーバーライドしてるのが女だから)
複製してBP_ThirdPersonCharacter_Quinn としておく
複製してBP_ThirdPersonCharacter_Manny としておく
メッシュは SKM_Manny_Simple
アニメーションBPは ABP_Manny
にしたものを
BP_ThirdPersonCharacter_Manny としておく。
これだけ、したら親のアニムBPのABP_Mannyをみていこう。
https://lunanelis.hatenablog.com/entry/2022/04/07/034505
イベントグラフは
ネリスさんの書いた通り
他にアニメ用フラグを追加したければここのSequenceにピン追加して書く。
AnimGraphは
上のLocomotionのっステートを=でつないでアニメーションをキャッシュしている。
(新規アニメーションのcacheで出せるノード)
IdleとWalk/Runをキャッシュしているってこと。
MainStateのLocomotionの中に入ってみるとキャッシュを使ってる。
あとはMainStateの説明だけどわかりやすく上のノードたち回した。
ToFallingとToLandの2つが新しくできたステーツエイリアスノード
このノードにくっついてる条件(⇔みたいなヤツ)を、設定したステート中に満たすとワープしてこれるというノード
To Fallingは LocomotionとLandのときにワープしてこれるみたい。
ToLandは JumpとFall Loop のときにワープしてこれるみたい。
で実際入ってくる条件はいつもどおり矢印に設定する感じ
コントロールリグの説明は
UE備忘録本舗さんの動画を見たほうが分かりやすかったよ
できたパッケージはこちらにアップしました。できたら遊んでみてください。
2.83GBあります。
download は以下
DevelopmentBuild チェックポイント(レベル内セーブ機能)があるEasyバージョン
V7 VoicePeak版
https://drive.google.com/file/d/1brxO2bYWV4GZfw9vMK6O_L6ReHHHTFow/view?usp=sharing
V4
https://drive.google.com/file/d/1S25uUMd1k9umFNJ8HRiXHf0QvtRGCTNR/view?usp=sharing
Shipping チェックポイント(レベル内セーブ機能)がないHardバージョン
V6 VoicePeak版
https://drive.google.com/file/d/1khzi3AEROpcaJhmpsGoMqxYDtxVVFj9U/view?usp=sharing
V2
https://drive.google.com/file/d/10s3s-XBcIw3ezOFC3qbgvrI82PXvzn2W/view?usp=sharing
操作方法
キーボードでの操作は以下
Jump スペースバー
スライディング C
弓構え 1
弓発射 マウス左クリック
このレ ベルをやり直し H
キャラクター変更 C
移動 WASD 後ろから敵に近づくと、はがいじめ
カメラ方向 マウス左クリックドラッグ
アイテム回収/構え時は投げ マウス左クリック
アイテム投げ構え マウス右クリック
ゲームパッドでの操作は以下
感想、コメントなどくれると泣いて喜びます。笑
https://www.comtec.daikin.co.jp/DC/event/202201-toranomaki-rig-sem.html
学んだこと。
1.パンチ、切り付けはパンチ後、軽反動つける
2.軽い武器には反動いらない
3.大剣は地面から押し返す力を受けて体が揺れ
4.力の伝わる順番はパンチ腰→胸→腕
5.パンチ腰の動き下→上→下をパーツごと
6.ヒット後で腰をさらにねじ込むと強くなる
7.腰を入れる、運動連鎖の法則
8.大剣は振り下ろすので腰も同じ動きをする
9.重いので振り下ろす時だけじゃない
10.人間の胴体は重いので1回バウンドのみ
11.人間には脳みそ揺らし過ぎない意識がある
12.大剣はヒット後に胸をねじ込むと強くなる
13.大剣はヒット後、腰に合わせ武器を後ろに
14.ダメージはヒット部位、腰→胸→頭で落ち
15.ダメージは意識がないので脳みそ揺らす
16.ダメージは顔をそむけたり不安定に。
17.バウンドのタイミングずらしてランダム感
UE4 ALS Punch
プロジェクト設定>インプット>アクションマッピング+で追加して
Attack に
・キーボードのR
・ゲームパッドのショルダーのRトリガー
を追加した
A2_CharactorBPで
イベントグラフの下に+で追加して
CharactorInputGraphを追加して
Attackのインプットアクションを配置
イベントグラフでカスタムイベントを追加
Attack_Eventと命名
CharactorInputGraphを追加して
Attackのインプットアクションから>Attack_Eventへつなぐ
使いたい攻撃モーションのアセットを右クリックして作成>AnimMontage
A2_F2_BigSwordSlash4_Montageができたので
CharacterBPで関数を作成して
GetAttackAnimationとリネーム
GetAttackAnimation>switch on ALS_OvarlayState
Get OverlayState >switch on ALS_OvarlayStateへ
switch on ALS_OvarlayStateのDefaultからReturnノードへつなぐ
Returnノードにoutputを追加してReturnValueにして
型をAnim Montageにし
CharacterBPで変数を作成してAttack_Animにした。
型をAnim Montageにした。
Get AttackAnimしてそのデフォルト値にA2_F2_BigSwordSlash4_Montageを追加した。
Get AttackAnimをReturnノードにつないだ
イベントグラフでGet Main Anim instanceして>値を検証済みGETに変更した
Attack_Event>Main Anim instanceとつなぐ。
Main Anim instance>Montage Playを呼ぶ
作った関数GetAttackAnimationを配置してpure純粋化>Montage Playへ接続
A2_F2_BigSwordSlash4から>EnableRootMotionをオンに
A2_F2_BigSwordSlash4_Montagから>スロット>スロット名>
MovementActionGroup BasedLayer
スケルトンにhand_rにhand_r_weaponソケットを追加
hand_r_weaponソケットにプレビューアセットを追加して角度調整
CharacterBPのビューでStatickMesh追加武器メッシュ設定して
一旦完成。