わかゲームスタジオ

プログラム初心者専門学生の備忘録

UE4 中心から左右に伸縮するゲージを作る

今回は単純なゲージではなく、中心から左右(上下)に伸縮するゲージを作ろうと思います。

単純なゲージの作り方↓

wakagamestudio.hatenablog.jp

 

↓今回することです↓


www.youtube.com

今回組んだマテリアルの前景です。

f:id:WakaiGames:20210907175823p:plain
f:id:WakaiGames:20210907175819p:plain


考え方紹介

  • パラメーターで0~1の値を外部から設定します。
  • 入力した値を/2して0.5~1.0で遷移するようにします。
  • 0.0~0.5に調整した値を先日紹介した方法のゲージで使用します。ーゲージ①
  • 上記のほかに0.0~0.5をOneMinusしてもう一本ゲージを作成します。ーゲージ②
  • 前回同様Lerpで色を設定するのですが、ゲージ①とゲージ②で入力方向が違うので注意してください。
  • 各ゲージ(上の画像だとFrontColor色部分)に余分な部分があるので、TexCoord[0]のMask(R)を使用して黒に塗り替えます。
  • 不要部分を除いた各ゲージを足してあげると完成です。

 

 

UE4 画面キャプチャ時の謎の余白を消す方法

これまで制作した作品を動画に撮って、Youtubeにアップしたり提出したりしてきました。

その際、UE4で制作した作品では必ず起こるキャプチャ時の不具合があります。

www.youtube.com

なぜか動画の右と下に余白ができてしまいます。

この問題に長らく悩まされてきたのですが、その解決方法が分かったので紹介します。

 

f:id:WakaiGames:20210816152505p:plain

BeginPlayでユーザー設定を上書きしています。

IntPointを設定では、画面のピクセル数を指定しています。

オプション画面などで解像度を設定できるようにするなど使い方はいろいろありそうです。

また、全画面モードの設定では、フルスクリーンにするか、Window表示にするかが設定できます。

こちらもオプション画面作成の際に使えそうですね。

ApplySetteingsノードのチェックはデフォルトでTrueになっていますが、Falseに変更しないと設定が適応されませんのでご注意ください。

youtu.be

UE4 マクロ内でローカル変数を使う

これまでマクロ内でしか使わない変数をローカルとして格納したいんだけどできないのかしら?と思っていたのですが、使えることが判明したので残しておきます。

 

変数自体はlocalと検索するか、ユーティリティ/マクロに各型が用意されています。

f:id:WakaiGames:20210621121412p:plain

 

変数に値をSetするときは割り当てるノードを使用します。これもユーティリティ/マクロ内にあります。

f:id:WakaiGames:20210621122319p:plain

 

ただし、標準の変数型以外(構造体や列挙体)を使うときは工夫が必要で、ローカルワイルドカードなるものを使います。

f:id:WakaiGames:20210621122557p:plain

  • 今回は変数を作成して使用していますが、マクロの引数を使用しても問題ありません。

 

以上です。

これをもっと早く知っておけばマクロ内でしか使わないであろう関数を別で追加することもなくなり、よりスマートなノードが書けるようになりますね。

UE4 WorldLocationをRelativeLocationに変換する方法

今回は表題の通り、WorldLocationをRelativeLocationに変換する方法と標準のGetRelativeLocationとの違いをまとめたいと思います。

 

①WorldLocationをRelativeLocationに変換する方法

f:id:WakaiGames:20210609165811p:plain

  • ノードはInverse Transform Locationを使用します。
  • Tに親のTransformを指定すると、Locationに指定したWorldLocationを親に対する相対座標を返してくれます。

②Inverse Transform LocationとRelativeLocationの違いについて

例えばComponentの構造が以下の用になっていた場合

f:id:WakaiGames:20210609170522p:plain

Children1のRelativeLocation↓

f:id:WakaiGames:20210609170825p:plain

  • Children0に対する相対座標が取得できます。

 

Children1でInverse Transform Locationを使用、親にActorRootを指定した場合↓

f:id:WakaiGames:20210609165811p:plain

  • ActorRootに対する相対座標が取得できます。

この2つを使い分けることによって状況に応じた相対座標の取得ができますね。

 

Location以外にもInverse Transform ノードは存在します。f:id:WakaiGames:20210609173431p:plain

 

以上です。

上記のノードを使って快適な相対ライフを送れそうですね。

 

続 UE4 ラグドール化してから元に戻す方法

前に投稿したブログで無理やり実装した箇所の解決策がわかったので、これもまた残しておこうと思います。

 

前回の記事↓

wakagamestudio.hatenablog.jp

 

今回できること↓

youtu.be

①Meshのコリジョン設定を見直す

f:id:WakaiGames:20210604170028p:plain

  • 初期設定のままだと床をすり抜けてしまいますのでコリジョンプリセットをCustomにします。
  • CollisionEnabledをCollisionEnabledに設定します。
  • CapsuleCollisionに反発されると困るので、Pawnは無視に設定します。

ラグドール化する

f:id:WakaiGames:20210604173903p:plain

  • ラグドール化したいBPに処理を追加します。
  • FlipFlopは実行されるたびにAとBを切り替えてくれるノードです。
  • Aが実行されたときはMeshのSimulatePhysicsをTrueに設定してMeshをラグドール化します。
  • Bが実行されたときはMeshのSimulatePhysicsをFalseに設定します。
  • MeshをCapsuleComponentにアタッチします。(Transformは全てKeepWorldです。)
  • MeshのLocationとRotationを初期値(Local)に戻すため、SetWorldLocationAndRotationでCapsuleComponentとの相対位置に設定します。
  • LocationとRotationにそれぞれ引いている数はComponentのMeshに設定したLocationとRotationです。

    f:id:WakaiGames:20210604173038p:plain

UE4 ”もっと楽に”ゲームパッド、マウス、キーボード全てでUIを操作する

 

wakagamestudio.hatenablog.jp

 前回の記事ですが、、、もっと楽に実現する方法が投稿後1分で見つかりました。

Widgetを作成、表示する

f:id:WakaiGames:20210512012926p:plain

  • PawnクラスでWidgetの作成、表示、マウスカーソルの表示をします。

Widgetにボタンを設置する

f:id:WakaiGames:20210512013402p:plain

  • 必要イベントは下記のとおりです

f:id:WakaiGames:20210512013219p:plain

これだけでできました。

はい、以上です。

UE4 ゲームパッド、マウス、キーボードすべてでUIを操作する

今回は表題の通り、ゲームパッド、マウス、キーボードすべてで入力を受け付けるようにしてみます。

追記

先にこちらをご覧ください。

wakagamestudio.hatenablog.jp

 

↓今回のサイトでできること↓

youtu.be

Ver.4.26.2

 

Widgetを用意する

f:id:WakaiGames:20210512000428p:plain

  • Widgetを作成し、Imageを3つ設置しておきます。
  • 今回は仮にStart、Option、Endとしておきます。

②列挙体を作る

f:id:WakaiGames:20210511224553p:plain

  • 順番、内容は①で作った選択肢と同様のものにします。

Widgetに関数を追加する

f:id:WakaiGames:20210511230023p:plain

  • SelectColorは現在選択しているか判定します。選択していれば白、選択していなければ黒です。
  • 引数ターゲットにはImageのオブジェクト参照、引数AにはE_UISelectを指定します。

Widgetにノードをつないでいきます

f:id:WakaiGames:20210512001705p:plain

  • 上が入力されたとき、Enumは1つ上、つまり-1します。
  • 選択するノードではEnumの1番目であるか判定をしています。1番目である場合、Enumの一番最後に飛ぶようにしています。
  • 下が入力されたとき、上記の逆をします。
  • 選択するノードではEnumの末番であるか判定をしています。末番である場合、Enumの1番初めに飛びます。
  • カスタムイベントSelectChangeでは③のSetImageColor関数をImage分実行します。Aには対応した選択肢を入れます。
  • 決定処理は列挙体によって処理を分岐するだけです。
  • ConstではSelectChangeを実行し、初期値(この時はStart)が選択されているようにします。

⑤インプットセッティングを登録する

f:id:WakaiGames:20210512003032p:plain

  • プロジェクト設定のインプットから登録をしていきます。
  • 登録方法は初期にキーボートマークが書かれている四角い箱を押してから登録したいキー、もしくはボタンを入力すると簡単に登録できます。

    f:id:WakaiGames:20210512003130p:plain

    ここです。

⑥PawnクラスのBlueprintを作る

f:id:WakaiGames:20210511232721p:plain

  • Widgetの表示はいつも通りです。
  • インプットアクションからWidgetの関数を呼びます。

⑦カメラとBP_Sampleをレベルに設置する

f:id:WakaiGames:20210511233313p:plain

⑧BP_Sampleの詳細設定を変更する

f:id:WakaiGames:20210511233604p:plain

  • AutoPossessPlayerをPlayer0にすればGameModeに設定しなくてもPlayer、つまり入力を受け付け、操作可能になります。

⑧実行時のカメラを指定する

f:id:WakaiGames:20210511234601p:plain

  • LevelBlueprintにノードを追加します。
  • CameraActorはLevel上のカメラアクターを選択した状態で

    f:id:WakaiGames:20210511234257p:plain

    右クリックを押すと出せます。
  • Set View Target With Blendノードは右上の「状況に合わせた表示」のチェックと外さないと出てきませんので注意です。

f:id:WakaiGames:20210511234051p:plain

 

とりあえずここまででWSキー、ゲームパッドの左スティックの上下で選択はできるはずです。

youtu.be

Widgetにボタンを追加する

f:id:WakaiGames:20210512000634p:plain

  • Canvas下の末端に置き、アンカーは四隅に設定
  • オフセットは0,0,1,1
  • アピアランスのColor and Opacity、Background ColorのAlphaを0に設定し透明にします。(画像では構造がわかりやすいようにColor and Opacityのみ透明にしています。)

⑩ボタンのイベントを追加する

f:id:WakaiGames:20210512005640p:plain

  • 必要なイベントはOnClickedとOnHovered、On Unhoveredです。
  • 各イベントは下記のようにつなぎます。

    f:id:WakaiGames:20210512010735p:plain

    BoolのOnHovered変数を新規追加。OnClickedは決定OnHoveredは選択、On UnhoveredはOnHoveredをfalseです。

⑪マウスで選択しているときの不具合を直す

f:id:WakaiGames:20210512011140p:plain

  • マウスカーソルでボタンにオーバーラップしていない状態でも選択できる不具合を解消します。
  • IsGamePadは新規変数です。

    f:id:WakaiGames:20210512011401p:plain

    PawnクラスでWidgetの新規変数の値を設定します。

⑫マウスカーソルを表示する

f:id:WakaiGames:20210512004928p:plain

  • PawnクラスのBeginPlayに上記を追加します。

これでゲームパッド、マウス、キーボードすべてでの入力ができます。

youtu.be