fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

2017年11月 | ARCHIVE-SELECT | 2018年01月

| PAGE-SELECT | NEXT

≫ EDIT

UE4 アニメーション(モーション)ファイルを他のスケルトンで使えるようにする(リターゲット)

とある猛禽さんにモーションを作ってもらったのですが、
どうもグレイマンでモーションをつけたらしく、
スケルトンをグレイちゃんに設定しようとしたら怒られてインポートに失敗しました。

というわけで困ってしまったのですが
どうも「リターゲット」という機能がUE4にはあるらしく、
それを使って、グレイマンのモーションを
グレイちゃんに割り当てたモーションアセットに変換できるようです。

公式ドキュメントはこちら。

・アニメーション リターゲット(異なるスケルトン)
https://docs.unrealengine.com/latest/JPN/Engine/Animation/RetargetingDifferentSkeletons/index.html

アニメーションのリターゲット (異なるスケルトン) は、同じスケルトン アセットを共有しないキャラクター間でアニメーションを再利用できるようにする機能です。同じスケルトン アセットを共有するキャラクター間でアニメーションをリターゲットする アニメーション リターゲット とは異なります。

異なるスケルトンを持つキャラクター間でアニメーションをリターゲットするプロセスでは、リグ というアセットを使用し、あるスケルトンから別のスケルトンにボーン情報を渡します。リグを選択したら、ソース スケルトンとターゲット スケルトン (アニメーションをリターゲットする対象のスケルトン) の間でリグを共有します。これを行ったら、次にターゲット スケルトンのボーンを、リグに格納されているノードと一致させます。

ターゲット スケルトンの全ボーンがリグでセットアップされたら、ソース スケルトンで使用されているアニメーションをターゲット スケルトンにリターゲットすることができます。全ての関連データと合わせて Animation ブループリント全体をリターゲットすることも可能です。こうすることで、あるスケルトンから別のスケルトンに全アニメーション アセットを迅速に移動したい場合に時間を短縮することができます。

だそうです!

というわけで早速やってみることにしました。
グレイマンで作ったアニメーションアセットで右クリックメニューの
「Animアセットとリターゲットを複製する」を選択します。
英語だとまた表示が違うかもですね。
モーションリターゲット000

そうするとこんなウィンドウが開きます。
モーションリターゲット001

ここでリターゲット先のスケルトンを選択します。
今回はグレイちゃんに割り当てたいので「GrayChan_Skeleton」を選択します。

「リターゲット」ボタンを押すとこんな感じに。
モーションリターゲット002
無事グレイちゃん用のアニメーションアセットができました。


無事再生もされました。

リターゲットができるなら、ファイル変えなくてもできないのかなーと思ったのですが
UE4がスケルトンを固定して動かすっぽいので難しいのかなと。

ここらへん詳しく調べないとですね。


| UE4 | 11:37 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 Character Movement での移動を設定する(Set Movement Mode)

「Character Movement」での移動タイプなどを設定する方法です。
「Disable Movement」ノードで停止させたものを動かす場合にも使うみたいですね。

ドキュメントはこちらに。

・Movement コンポーネント
https://docs.unrealengine.com/latest/JPN/Engine/Components/Movement/index.html

剛体物理を使用しないアバターが歩行、走行、ジャンプ、飛行、落下、水泳による移動ができるようにします。

とあるとおり、

「Set Movement Mode」ノードで設定できます。
SetMovement000.png

このノード移動タイプを切り替えれるようです。
SetMovement001.png

試しに「Flying」にしてみた結果がこちら。

落下しなくなり、空中で徐々に遅くなるようになりました。

簡単な移動などであれば「Character Movement」を使っていくのも良さそうですね。

| UE4 | 13:04 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 Character Movement での移動を停止する(Disable Movement)

「Character Movement」を使用して移動しているアクターの
物理移動を停止する方法です。

以下、ここを参考にしてみました。

・Set Simulate Physics for Character
https://forums.unrealengine.com/development-discussion/blueprint-visual-scripting/58012-set-simulate-physics-for-character?86486-Set-Simulate-Physics-for-Character=

スレッド中の画像を見る限り
「Disable Movement」ノードを使うと停止できるようです。
DisableMovement001.png

テンプレートのキャラクターアクターを取得して
ノードを引っ張るとこんな感じになります。
DisableMovement000.png

上記処理を実装してみるとこんな感じになりました。

空中の時にこの処理を実行しているのですが
ちゃんと物理運動は停止するようですね。
モーションの移行は地面についてなくてもアイドルに戻ってしまっていますが。

あまり使う機会はないのと思うのですが、こういったこともできるようですね。

| UE4 | 13:02 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 アクター(Actor)の向きベクトルを取得する(Get Actor Up Vector、Get Actor Right Vector、Get Actor Forward Vector)

UE4ではアクターの姿勢からのベクトルを取得する方法が用意されています。
プログラムでやると結構めんどくさいことも
こういった用意されたものを使うと簡単にできそうです。

アクターの上方向ベクトルの取得。
「Get Actor Up Vector」ノードを使います。
ベクトル取得000

アクターの前方向ベクトルの取得。
「Get Actor Forward Vector」ノードを使います。
ベクトル取得001

アクターの右方向ベクトルの取得。
「Get Actor Right Vector」ノードを使います。
ベクトル取得002

とくに「Get Actor Up Vector」と「Get Actor Forward Vector」は
結構使う機会があるんじゃないかなと思います。

| UE4 | 12:58 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 地面の傾きに合わせてキャラクターを傾ける

設置している地面の傾きに合わせてキャラクターを傾ける方法です。
こちらを参考にさせていただきました!

・【UE4】なるべく手軽に壁走りを実装してみる
http://tamfoi.hatenablog.com/entry/advent-calendar-2017-ue4

上記のサイトで書かれている方法以外にやり方はなさそうですね。
手順としては

①自分の真下に向かってレイ判定を行う
②レイが地面に当たっていれば、その地面の法線を取得する
③取得した法線を元にキャラクターを回転させる


といったものですね。

ノードで組むとこんな感じに(参考サイトに書かれているそのままです)
姿勢制御002
キャラクターの上ベクトルを取得して、マイナスを掛けて下方向の位置を算出。
キャラクターの位置から下方向の位置に向かってレイを飛ばす。
レイがヒットしていたら、ヒットしたポリゴンの法線から回転値を算出。
算出した回転値をキャラクターにセット。

という流れですね。簡単!
これは参考サイトをそのままなので、地面に設置しているかの判定は取っていないので
設置しているかどうかは「Distance」を見て判断するとよさそうです。

とりあえず動かしてみるとこんな感じに。
姿勢制御001
姿勢制御000
地面かどうかとして法線の向きとかで判定したほうがよいかもですね。
いまだと画像のように横向きのポリゴンでも判定されちゃうので。

しかし、こういうのが簡単にできるのはエンジンのいいところですね!

| UE4 | 15:13 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 Character Movement で移動時に移動可能な高さ、移動可能な坂の角度を指定する(Max Step Height Walkable Floor Angle)

キャラクターが移動可能な高さ、坂の角度を指定する方法です。
公式ドキュメントはここらへんになるのかなと。

・物理ボディのリファレンス
https://docs.unrealengine.com/latest/JPN/Engine/Physics/PhysicsBodies/Reference/index.html

今回は上記とはちょっと違うのですが
「Character Movement」での設定方法になります。
テンプレートプロジェクトにいるキャラクターへの設定ですね。

移動可能な高さ、坂の角度を指定するには
「Character Movement:Walking」
「Max Step Height」と「Walkable Floor Angle」で指定します。
PhysicsWaleble000.png
「Max Step Height」が移動可能な段差の高さとなるようです。
「Walkable Floor Angle」は移動可能な坂の角度のようです。

とりあえずこの値を低くすると、こんな感じで坂を移動できなくなります。
PhysicsWaleble001.png

ただし、これ「Max Step Height」を0.0にしたのに
テンプレートの階段は登れてしまうんですよね…。謎が…。

まあ、最終的には「Character Movement」を使わなくなりそうなのですが
簡易的なものの設定としてはこんな感じでしょうか。

| UE4 | 11:52 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 実行の有無を外部から門の開閉のように扱うフロー制御ノード(Gate)

その先の処理を実行するか、しないかを制御するフロー制御ノードです。
説明がすごい難しいのですが、その名の通り、門のような役目を果たしていて
閉じているときはその後の処理は実行されず、空いているときのみ実行されます。

公式ドキュメントはこちらに。

・フロー制御
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/FlowControl/index.html#gate

上記処理には「Gate」ノードを使います。
Gate001.png
「Enter」に接続された時に判定され、「Open」状態であれば「Exit」から先の処理が実行されます。
「Open」に接続されると、Gateが開いた状態になります。
「Close」に接続されると、Gateが閉じた状態になります。
「Toggle」は開いた状態であれば閉じる。閉じた状態であれば開いた状態になります。
「Start Closed」は、Trueであれば最初が閉じた状態になります。

そのまんま門のような処理ができるので、色々使えそうですね。
うちが使ったところだと、こんな感じのこともできるようです。
Gate000.png
「Delay」中にGateの開閉を外部から行うことで、
それ以降の処理を実行するかの有無を制御する。みたいな例ですね。

フローとして制御しないといけないため、
Boolでのフラグ管理とはまたちょっと使い勝手が違いますが
変数を使わないで制御する場合はこちらを検討するのが良いかもしれません。

| UE4 | 11:43 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 指定した回数だけ実行するフロー制御ノード(Do N)

指定した回数だけ実行されるフロー制御ノードです。
こう、上記の言葉だとあんまりぴんとこないのですが
マリオでブロックを叩いた時に、コインが複数回だけでるみたいな処理を組めそうな感じですね。

公式ドキュメントはこちら

・フロー制御
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/FlowControl/index.html#don

指定した回数だけ実行されるフロー制御は
「Do N」ノードを使います。
DoN001.png
「Enter」は普通に処理を行いたい場合に接続します。
「Exit」から接続された処理が「N」回だけ実行されます。
「Reset」はここに接続されると「N」回が初期化されます。
「Counter」は今何回目かが取得できます。

ちょっとよくわからないと思うので例を組んでみました。
DoN000.png
上記ノードだと、「E」キーを押した時に「Print String」で文字が表示されます。
「N」が5担っているので、「E」キーを押した時に5回だけ実行されます。
(6回目以降はExit接続先の処理は実行されない)
「Counter」を表示しているので、「E」キーを押すたびに
「1」「2」「3」「4」「5」と表示されます。
「R」キーを押すと条件がリセットされ、再び「E」キーを押した時に5回だけ実行されます。

みたいな感じです。
回数条件指定実行が簡単になったノード。
みたいな覚え方をするといいのかなと。

| UE4 | 12:50 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 トランスフォーム(Tansform、Socket)の位置や回転を取得する(Get Socket Location、Get Socket Rotation、Does Socket Exist)

スケルタルメッシュなどからボーン(トランスフォーム)の位置や回転を取得する方法です。
他にもそのトランスフォームがあるかどうかのチェックについてです。

UE4ではボーンやトランスフォームのことを「ソケット(Socket)」というみたいですね。

ソケットの位置を取得するには「Get Socket Location」ノードを使います。
ソケット取得いろいろ001
「Target」には「Scene Component」を指定します。
「In Socket Name」には取得したいソケットの名前を指定します。
わかりやすいノードですね。

回転を取得する場合は「Get Socket Rotation」ノードを使います。
ソケット取得いろいろ002
「Target」には「Scene Component」を指定します。
「In Socket Name」には取得したいソケットの名前を指定します。
「Get Socket Location」と入力は同じですね。

指定した「Scene Component」にソケットがあるかどうかの判定は
「Does Socket Exist」ノードを使います。
ソケット取得いろいろ003
「Target」には「Scene Component」を指定します。
「In Socket Name」には取得したいソケットの名前を指定します。
指定した名前のソケットがあれば真を返します。

これで簡単に情報を取得することができました。
ざらっと簡単にアクターから情報を取得する方法を書いてみました。
ソケット取得いろいろ000
本来は「For Each Loop」で回さなかったりしないといけないのですが
とりあえず流れを作ってみるとこんな感じですかね。
「SocketName」というソケットのLocationを取得するようなBPです。

ゲームを作ってると「特定の位置から」みたいな処理はかなりあるので
こういった処理はかなり使いそうですね。

| UE4 | 12:43 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ゲームのアプリケーション名を設定する(Project Name)

ゲームのアプリケーション名を設定する方法です。
ウィンドウのタイトル名ではなく、ウィンドウズで扱われるアプリケーション名ですね。
こちらを参考にさせていただきました!

・Application名の変更方法(UE4.17.2)
http://papersloth.hatenablog.com/entry/2117/01/01/000000#Application名の変更方法UE4172

「プロジェクト設定」を開きます。
ウィンドウタイトルの変更(プロジェクト)001

「プロジェクト」の「説明」の中にある
ウィンドウタイトルの変更(プロジェクト)002

「Project Name」を設定します。
アプリケーション名の変更(プロジェクト)000
未入力のデフォルトでは「UE4Game」になるようですね。

アプリケーション名とはなんぞや。
みたいな話があると思うので、参考先のブログを見ると良いと思います!

よくWindowタイトルを変更しようとしますが、ここを変えても上手くいきません。
この名前はタスクマネージャー等で表示されるアプリの名前です。

ここらへんに注意が必要ですね。

| UE4 | 13:00 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT