目次
はじめに
スクロールの移動速度がめちゃ遅いのが気になった。
解説
Scroll RectのScrollSensitivityを上げれば早くなった。
はじめからいい感じの速度にしてくr.....
最後に
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。
目次
環境・・・・Unity2021.1.20f1
VisualStudio2019
パッケージ状態でファイルブラウザから任意の拡張子のインポート・エクスポートができるプラグインStandaloneFileBrowserの使い方です。
ライセンス形態はMIT Licenseです。
ユーザーが指定した画像をゲームの中で使用したり、ストーリーが進行するとヒントが書かれたテキストデータを出力したり、様々な使い方ができます。
ここからダウンロードします。
ダウンロードしたファイルのPackageにあるStandaloneFileBrowser.unitypackageをUnityにインポートします。
Assets/StandaloneFileBrowser/Sample/CanvasSampleScene.unity
このサンプルシーンを開いておきましょう。
パッケージマネージャーからVersionControlをRemoveします。
MainCameraについているFlareLayerをRemoveComponentします。
これでエラーは消えました。
スクリプトCanvasSampleSaveFileImageに誤りがあるので修正します。
▼前
▼後
ボタンを押すとエクスプローラーからファイルを指定できます。
開くを押すと選択した画像が読み込まれます。
imageを例に挙げると
ボタンが押されるとウィンドウが表示され、選択されたファイルのパスを取得してきます。そのパスを使用して設定されたテクスチャデータに上書きしています。
49行目のstring型urlがパスの引数になっています。
このsrting型を保存しておけば、初回に設定された画像を再度読み込むこともできます。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。
目次
注意
UE5.0.0の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
この記事を作成するにあたり以下の内容を参考にさせていただきました。
[UE4] ドラッグドロップで操作できるアイコンの作り方|株式会社ヒストリア
Unreal Engine でドラッグ アンド ドロップの UI を作成する | Unreal Engine ドキュメント
アイテムの情報をやりやすくするためです。
構造体DS_ItenDataを作成します。
構造体の変数を追加します。
デフォルト値もセットしておきます。
ユーザーウィジェットからWBP_Itemを作ります。
開いてフルスクリーンからCustomに変更して幅と高さを128にします。
SizeBoxを追加して
レイアウトを100、ビヘイビアのカーソルをHandにします。
オーバーレイを追加してその子に2つのimageとtextを追加します。
それぞれ名前をItemIcon,NameBack,NameTextにしてきましょう
ItemIconの詳細からalignmentを変更します。
NameBackはalignmentとTintとSize
NameTextはalignmentとFontSizeとJustification、
クリッピングを変更します。
こんな感じになったらOKです。
ItemIcon詳細からバインディング関数を作成します。
名前をGetItemIconに変更しましょう。
NameTextの詳細からバインディング関数Get Item Nameを作成します。
アイテム用に作成した構造体の変数を追加します。
スポーン時に公開とインスタンス編集可能にチェックを入れます。
それぞれの関数に接続します。
イベントのオーバーライドからButtonDownとDragDetectedを追加します。
ButtonDownにはこのUIが任意のキーで押されたかどうかを設定します。
DragDetectedはドラックが開始されたときのイベントです。
ドラッグアンドドロップの動作を仲介するDragDropOperationを作成します。
イベントグラフに戻りOnDragCancelledを配置します。
このイベントはドロップ処理が失敗したときに呼ばれます。
ウィジェットブループリントUserWidgetからWBP_ItemSlotを作ります。
これはアイテムUIの受け皿です。
同じように設定します。
Border、SizeBox、NamedSlotを追加します。
NamedSlotはItemSlotにリネームしておきましょう。
SizeBoxはPaddingとレイアウトを変更します。
こんな感じになればOKです。
イベントオーバーライドからOnDropを作成します。
OnDropはこのUIにドラッグアンドドロップされたときに呼ばれるイベントです。
Dropイベントを編集します。
OperationからはDragDropOperationの結果が返ってきます。
DragVisualはWBP_Itemのことです。
やっていることは非常にシンプルでこのウィジェットのItemSlotの子になにかある場合はドラッグされたアイテムの子と交換し、ない場合はそのまま配置しているだけです。
ここでのリターンノードでFalseになるとWBP_ItemのDragCancelledが呼ばれます。
ウィンドウのサイズによってUIが破綻するのを防ぐためスケールボックスでラップしましょう。
パレッドの詳細はコチラの記事で解説されています。
WBP_InventoryにUIを追加します。
こちらのサイトから素材を使用しました。
WBP_ItemSlotをドラッグして配置します。
(ここら辺はお好みで)
WBP_ItemSlotの子のItemSlotにWBP_Itemを配置します。
WBP_Itemの詳細から設定できます。
実行してみましょう。
こんな感じになったら成功です。
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。
目次
注意
UE5.0.0の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
これまでの記事の工程を行っていなくても実装できます。
この記事を作成するにあたり以下の内容を参考にさせていただきました。
[UE4] ドラッグドロップで操作できるアイコンの作り方|株式会社ヒストリア
Unreal Engine でドラッグ アンド ドロップの UI を作成する | Unreal Engine ドキュメント
ウィジェットブループリントUserWidgetからWBP_Inventoryを作ります。
CanvasPanelとBackground Blurを追加します。
Background Blurが全画面になるようにアンカーを調整し、
BlurStrengthを任意の数値にします。
BP_ThirdPersonCharacterを開きます。
インベントリが表示されたときの処理を関数でまとめておきます。ActiveInventoryControlを作成します。
インベントリ用のウィジェットが存在するかチェックしてなければ生成します。
Activeかどうかを変数にしておきます。
ウィジェットやカーソル、インプットモードの切り替えを行います。
全体像
イベントグラフにもどりBeginPlayに接続します。
またインベントリ表示キーを押したらイベントを呼びます。
死亡時にInventoryを無効化してUIの削除に追加します。
実行して切れ変えできるか確認しましょう。
インベントリー表示中のレバーを操作したり移動したりできてしまうのでこれらを無効化します。
DisibleMovementを使用すると落下中に停止してしまうので強引に入力箇所に判定を挟んで対応しました。うまいやり方があったらコメントで
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。
目次
UE5のThirdPersonテンプレからアニメーションステートの中身が変更され、ステートマシンにも変化があったのでメモ。
ここで触れているのはMainStatesの中身です。
認識違いなどミスがあったらコメントで指摘お願いします。
▼UE4
▼UE5
まず大きなところでは足のIKが標準で利用できるようになっているところ。
それを実現するにコントロールリグが利用されている。
コントロールリグについては割愛
ステート内にもコントロールリグ用のノードが追加されている。
もう一つは落下モーション時の変化。
UE4ではジャンプスタートモーション落下直後に再生されるが、UE5ではすぐに落下中のアニメーションが再生される。
細かいところだが、UE4ではジャンプをするだけの設計で、UE5では落下も考慮した設計に変更されているのが分かる。
▼ジャンプスタートを無視して直接落下モーションに移動している。
ステート間の遷移を制御してくれるノードらしい。
使い方はシンプル。
選択したステータスに遷移すると、このノードから繋がれている遷移条件が判定される。遷移条件を満たしていれば、このノードにワープして処理が走る。
GlobalAliasはどこの遷移にいても判定を行うかどうかの項目のようだ(未確認)
例えばこれまでの機能でこの遷移を実現しようとしたら、以下の画像のようにジャンプ動作だけで複数のステートから同じ条件分岐を出す必要がある。
これでは、今後アクションが増えていくたびに考慮する遷移が増えていき管理が大変になってしまう。
▼ステートエリアスを使わないで書いた場合
それを回避するために出てきたであろうステートエリアス。
コンセントの延長ケーブルのように遷移を中継していて、遷移可能なステートに到達している間に中継先の条件を確認しているようだ。
▼左が通常の書き方、右がステートエリアスで中継した書き方
遷移条件でステートマシン内が視覚的に複雑にならないように、かつ柔軟性が高い仕組みになっていると感じた。
ただ、意識して利用しないと表面上は整理されているが、裏では大量の遷移を確認する処理が走る原因にもなりそうな予感がしたので注意した設計を行いたい。
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。
目次
注意
UE5.0.0の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
前回の状態異常の続きです。
仕様
毒沼に入っている間毒状態が蓄積し、毒状態になっている間HPが減るようにします。毒沼外にいるときは毒の蓄積が減少します。
インターフェースのイベントを2つ実装します。
構造体を分解して状態異常のカテゴリー別に信号を分岐します。
毒状態異常用のタイマーを作成します。
End時にはタイマーをクリアします。
BP_AbnormalStateAriaからサブクラスを作成します。
サブクラス、継承に関してはここで解説しています。
BP_AbnormalStateAriaを抽象クラスにします。
抽象クラスにするとこのアクタをレベル上に配置できなくなります。
クラス設定からGenerateAbstractClassにチェックをいれます。
子ブループリントクラスを作成します。
名前を、BP_PoisonAriaにします。
BP_PoisonAriaを開きDS Abnormal State Infoをオーバーライドします。
継承しているのでDS Abnormal State Infoと検索すると変数を設定できます。
変数へ昇格を行いDSPoisonStateInfoと名前を付けます。
この値を詳細から設定できるように編集可能にチェックを入れます。
レベルに戻り配置していたBP_AbnormalStateAriaを削除します。
BP_PoisonAriaを3つほど配置します。
詳細から毒蓄積と毒状態のダメージ速度や量を設定します。
それぞれ設定した速度で蓄積表示が出ていたら成功です。
毒の最大耐性変数PoisonMaxTolerance、
現在の毒の蓄積CurrentPoison、
毒状態になったかどうかIsPoisonを作成します。
それぞれデフォルト値を300、0、falseにしておきます。
現在の蓄積量に追加の蓄積量を足します。
最大量以上に増えないようにClampしてセットします。
値がPoisonMaxToleranceを超えずに蓄積されているようになったら成功です。
毒の自然回復速度AutoPoisonHealInterval、
毒の自然回復量AutoPoisonHealValueを作成し
0.1,1などそれぞれデフォルト値を設定します。
蓄積の時と同じようにタイマーをセットし回復するようにします。
自然回復が再び毒沼に入った時に入らないように
スタート側にPoisonHealTimerをクリアするようにノードを追加します。
実行してみましょう。
エリア外に入ったり出たりして蓄積と回復が行われているのを確認します。
WBP_Hudに毒用の表示を追加します。
HP_Back_Barを複製して名前をPoison_Barにします。
バーの内容が分かるようにテキストを追加しておきました。
適当に位置を調整します。
この表示は毒状態になった場合のみ表示したいので、
表示非表示を切り替える関数を作成しておきます。
ビヘイビアのVisibilityからバインディングを作成します。
名前をGetPoisonbarVisibilityにします。
同様にテキスト用のバインディング関数GetPoisonTextVisibilityを作成します。
関数GetPoisonbarVisibilityを開き変数へ昇格しておきます。
名前はWBP_PoisonVisibilityです。
デフォルト値は非表示のCollapsedにします。
同じように関数GetPoisonTextVisibilityを開き変数へ昇格しておきます。
名前はWBP_PoisonTextVisibilityです。
デフォルト値は非表示のCollapsedにします。
実行してみて表示されないことを確認しましょう。
バー用のバインディングもHPバーと同様に作成します。
名前はGet_Poisonにします。
2種類の変数に昇格しておきましょう。
ウィジェットの生成後に最大毒耐性をセットしておきます。
スタート側のWBP変数のセット箇所です。
エンド側のWBP変数のセット箇所です。
毒状態になった瞬間の沼のダメージを蓄積するようにします。
ダメージインターバルとダメージ量を変数化します。
スタート側の最後にDoOnceを繋げてセットします。
毒状態用のタイマーを設定してキャッシュしていたダメージを与えるようにします。
全体像
復活したとき前回のウィジェットが残らないように死亡時にウィジェットを削除するようにします。
構造体DS_AbnormalStateInfoに移動速度の追加をします。
このキャラクターの移動速度は500.0 cm/sなので
試しに250で設定します。
スタートとエンドのタイマー設定後にMaxWalkSpeedを更新するようにします。
▼スタート
▼エンド
これで移動制限がかかるようになりました。
最後にやばそうなマテリアルを適当に作成してStaticMeshに適応して完成です。
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。