auの日記

プログラミング初心者の日記。(auはハンドルネームです)

UE4のウィジェットとは

auです。

ウィジェットブループリントを使用したので、軽くですがまとめたいと思います。

Widget Blueprint(ウィジェットブループリント)とは

Widget Blueprint(ウィジェットブループリント)とは、UI(ユーザインターフェース)を作成するために使用します。

プレイヤーに対して何かの情報を伝えるために、ボタンや文字列を使って表現します。

HPゲージなどのステータスや、コインの枚数、メニューなどの表示をしてくれる便利なやつです。設定によっては表示したりしなかったりできます。

UE4では、ウィジェットようのブループリントが用意されているのでとても簡単に作成することができました。

もう少ししたら、ゲームの制作と一緒に記事にする予定です。

UE4でブループリントをスッキリさせる機能見つけた

auです。

テストなどでUE4を触っていないと、ブループリントでどこに何があるのかがさっぱり把握できなくなってしまいます。

そこで、便利なグループコメント機能があることを知りました。

UE4でゲームを制作する動画を見ていたらやっていたので、自分もやってみよう!と思ったのでやってみます。


グループコメント機能は、範囲選択→右クリック→選択対象からコメントを作成するで使うことができます。

f:id:program-shoshinsya:20190204193455p:plain:h480

実際に使ってみると、選択したコマンドを囲むように白くなり、太字かつ大文字でコメントを残すことができます。

f:id:program-shoshinsya:20190204193721p:plain

そして、さらにいいと思ったのが、画面を縮小してもコメントだけ普通に読める点です!

f:id:program-shoshinsya:20190204193839p:plain

テスト明けにやり始めた時は、最初何がどれの機能なのかを思い出すのに時間がかかってしまいましたが、これならスッキリするし、割と思い出しやすい気がします。

UE4のトレース反応

auです。

今回は、トレース反応についてまとめたいと思います。

敵キャラが、自分の操作しているキャラクターを見つけたり、銃で打った弾が着弾する際に「トレース反応」というものを使います。

トレース反応とは

コリジョン同士が衝突した際の反応のことをオブジェクト反応と言います。それに対し、視線や銃弾の軌道をレーザーポインタのように飛ばし、コリジョンに当たった際の反応をトレース反応
と言います。

金網のようなオブジェクトがあった際に、「キャラクターは通れないけど敵に見つかりはする」といった挙動を実装する際に使います。

レイキャストラインテストとも呼ばれます。

つまり、レーザーポインタ(トレース)が、コリジョンに当たった際の反応をトレース反応と言います。

UE4でアクタ同士が重ならないようにした

auです。

きのうは、頭からコインが飛び出るように設定しました。

program-shoshinsya.hatenablog.com

頭からでたコインは、それぞれのコリジョンが衝突し、色々な方向に散らばってしまっています。

f:id:program-shoshinsya:20190201144134g:plain

そこで、今回はコイン同士が重ならないように設定していこうと思います!

コインのアクタにコリジョンプリセット与える

コリジョンプリセットについて

まず、コリジョンのオブジェクトタイプは3つあります。ブロック・オーバーラップ・無視です。

  • ブロック: 衝突すると跳ね返る
  • オーバーラップ: 衝突するとイベントが発生する
  • 無視: 衝突すると通過する

アクタには、それぞれコリジョンプリセットという、オブジェクトタイプや、コリジョンの有無、コリジョンが衝突した際の応答(オブジェクト応答)など元々設定されているプリセットが18種あります。

これは、壁や床などコリジョンの設定()が同じものに簡単に割り当てる際に使います。

自分でオブジェクト応答を作る

コイン同士が重ならないようにするために「Pickup」というコリジョンプリセットを作成していきたいと思います。これは、巻物とコインも重なるようにするために巻物にも適応していくものです。

1. ツールバーの設定の「プロジェクト設定」を選択
f:id:program-shoshinsya:20190202124856p:plain

2. エンジンの項目の中にある「コリジョン」を選択
f:id:program-shoshinsya:20190202125315p:plain

3. Presetの中にある「新規」を選択
f:id:program-shoshinsya:20190202125434p:plain

4. 名前を入力し、「Collision Enabled」をCollision Enabledに「Pawn」「Vehicle」をオーバーラップに選択(プレイヤーが触れた際にコインを取得するイベントが発生するため)、「Pickup」を無視するに選択(コイン同士が重ならないため)
f:id:program-shoshinsya:20190202125739p:plain

5. 「NoCollision」「InvisibleWall」「Spectator」も「Pickup」に対して無視にそれぞれ変更します。

6. 「OverlapAll」「Trigger」も「Pickup」に対してオーバーラップにそれぞれ変更します。

これでPickupという、コリジョンプリセットができました。これをコインのアクタに適応していきましょう。

コインのアクタにコリジョンプリセットを適応する

コインのアクタのブループリントを開き、「StaticMeshComponent」を選択し、詳細パネルの「Collision」のコリジョンプリセットを「Pickup」に設定
f:id:program-shoshinsya:20190202130657p:plain


これで準備ができました!

コインを飛ばしてみましょう!

f:id:program-shoshinsya:20190202150135g:plain
今回は重ならずに、綺麗な円になっています!

UE4でコインを取得したら頭の上から飛ぶようにした

auです。

今日は、UE4でコインを1枚以上持っている状態で、コインを失った際に、頭に設置したソケットからコインが飛び出るようにしました。

ソケットについては以前にまとめたのでよろしければ読んでみてください。

program-shoshinsya.hatenablog.com

コインを単純に飛ばす

ソケットの配置については、以前にやったので割愛します。

コインはCキーを押すことで、1枚ずつ獲得できるように、Vキーでコインを1枚ずつ失うように設定しています。

プレイヤーのブループリント(PNPlayerPawn)
f:id:program-shoshinsya:20190201141839p:plain

コインを減らして頭の上から飛ばすブループリント(DropCoin)
f:id:program-shoshinsya:20190201143140p:plain
()は関数名です

コインを1枚減らした際に、頭の上のソケット(CoinSpawnPoint)の位置情報を取得し、その位置からコインのアクタ(PNPickup Coin Actor)を出現させて、物理シミュレーションを利用して床に落とします。その際に、すぐに触れると再取得してしまい、飛んでいるように見えないので頭より結構離したところで出現させ、斜め方向に力を加えて飛ばしています。

最終的には、死亡判定が出た際に、所持しているコインを全部撒き散らすような挙動にします。(ソニックのリングを持っている時にダメージ食らったときの感じ)

f:id:program-shoshinsya:20190201144134g:plain

これは楽しい・・・!

コイン同士が乗っかってしまう問題点や、死亡した際の処理も書いていこうと思います。

使っている参考書

コインを減らそうとしたけどうまくいかなかった

auです。

UE4をいじっていたらこの時間になってしまったので簡単に書きたいと思います。

UE4で作成しているゲームには、コインを増やすための「Add Coin」とコインを減らすための「Drop Coin」があります。

これをレベルブリープリントで、CキーでAdd Coin、VキーでDrop Coinが動作するようにしているのですが、コインは増えども減りはしない状態になってしまいました。

Add Coin
f:id:program-shoshinsya:20190131234747p:plain

Drop Coin
f:id:program-shoshinsya:20190131234734p:plain

レベルブループリント
f:id:program-shoshinsya:20190131234824p:plain

ものすごく単純なブループリントなので、根本的なところが間違っていると思うのでちゃんと探してみたいと思います。

使っている参考書

UE4のソケットとは

auです。

C言語でのソケットは勉強しましたが、UE4でもソケットが出てきたので調べました。

C言語で使ったソケットの記事は以下の記事です。
program-shoshinsya.hatenablog.com

UE4のソケットとは

スケルタルメッシュ(キャラクターなど)の手に武器を持たせる際や、特定の箇所からビームを出したい時にソケットという機能を使用して、位置情報を取得するロケーターを埋め込みます。

ソケットを利用する

スケルタルメッシュアセットをダブルクリックして、ペルソナエディタを開きます。

そして、画面左側の「スケルトンツリー」パネルの中から、ソケットを設置したい箇所に近い部位を右クリックします。」

すると、「ソケットを追加」などがあるサブメニューがあるので選択します。

f:id:program-shoshinsya:20190130232046p:plain:h480

頭の上にソケットを追加してみました。このロケーター情報をブループリントやC++で利用することができるようになりました!

f:id:program-shoshinsya:20190130232845p:plain:h280

使っている参考書