わかゲームスタジオ

ゲーム制作初心者専門学生の備忘録

UE4 GamePadとKeyboardどちらの入力かを判定する

UIの切り替えをしたくていろいろ調べてたんですけどC++じゃないとできないと出てきて諦めてたんですけど、できました!

 

GamePadとKeyboardどちらの入力か取得ができればこんなことができちゃいます。


GamePadかKeyboard

 

これだけ!

f:id:WakaiGames:20210213185626p:plain

超簡単!すごい!

UE4 Material Parameter Collections が超便利

今回はMaterial Parameter Collectionsを使ってみますよ。

こんなことができるようになります。


Material Parameter Collections

スライダーの値を複数のマテリアルParameterに入れて一斉編集しています。

 

公式ドキュメント↓

Material Parameter Collections | Unreal Engine Documentation

 

①マテリアルパラメータコレクションを作成する

f:id:WakaiGames:20210213175116p:plain

  • このマテリアルパラメータコレクションで値を編集していく感じです。

 

②パラメータを追加

f:id:WakaiGames:20210213175536p:plain

 

③マテリアル内でMPCの変数を使用します

f:id:WakaiGames:20210213175516p:plain

  • ノードはCollectionParameterで出せます。

 

④MaterialParameterCollectionの使い方

f:id:WakaiGames:20210213180425p:plain

  • Parameter NameでCollectionに作成したもののうち一つを選択し使用します。

 

これを使うと以下の動画のように使用できます。

UI部分の一斉フェードやポストプロセスマテリアルの値も編集できちゃいます。


MPCSample

Unity UIアニメーションを使いまわしたい

今回はUnityでUI演出を作成するときに、よく使う演出(テキストの点滅とか)を使いまわす方法です。

とりあえずCanvasを作成し、AnimatorControllerをアタッチしたImageを4個作成しておきます。

f:id:WakaiGames:20201210070454p:plain

AnimatorControllerの中身はこんな感じです。
f:id:WakaiGames:20201210070806p:plain
 

①それぞれのAnimationを設定する

f:id:WakaiGames:20201210071653p:plain
ColorパラメータはRGBAをそれぞれ選択、Deleteで削除することができます。
こうすることで色の違うUIのAlpha値のみアニメーションさせたりできます。
f:id:WakaiGames:20201210071905p:plain
f:id:WakaiGames:20201210072238p:plain
f:id:WakaiGames:20201210072432p:plain

②実験用にAnimationを再生するスクリプトを書く

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CallAnimation : MonoBehaviour
{
    private void Start()
    {
        //赤色を点滅させる
        transform.Find("ImageRed").GetComponent<Animator>().Play("ColorAnim");
        //青色を回転させる
        transform.Find("ImageBlue").GetComponent<Animator>().Play("RotationAnim");
        //緑色を拡大、縮小させる
        transform.Find("ImageGreen").GetComponent<Animator>().Play("ScaleAnim");
        //黄色を中央で上下させる
        transform.Find("ImageYellow").GetComponent<Animator>().Play("PositionAnim");
    }
}
このコードをCanvasにアタッチすると動くようになります。

こんな感じ↓

【わかゲームスタジオ】Unity UIAnimationSample

クリックで切り替わるようにしてみると、

【わかゲームスタジオ】Unity UIAnimationSampleChange

別のImageが同じAnimationを再生しても問題なく動作しているのがわかりますね。

こんな感じで、Animationから変更している値を持ったComponentを意識することでAnimationを使いまわし、同じようなAimationを作成する必要がなくなりますね。

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

かなり前に作成したゲームで、ダメージ表現にラグドール化を使い一定時間後に復帰する仕様を実現しました。

その時に少し悩んだことがあったので備忘録として残しておきます。

使用したゲームはこちら↓

wakagamestudio.hatenablog.jp

 

↓今回できること↓

 

ではやっていきます。

①通常通りラグドール化、復帰を書く

f:id:WakaiGames:20201205023539p:plain

すると

復帰した時に軸が曲がっていたりCapsuleComponentがずれていたりと不具合が多いです。

これを解消していきます。

②CapsuleComponentの位置を調整する

f:id:WakaiGames:20201205021803p:plain

  • Bool変数を追加し、現在ラグドール化しているかを保存します。
  • Tickでラグドール化中ならCapsuleComponentの位置をpelvisの位置に上書きし続けます。

こうすることで、CapsuleComponentがメッシュに付随するようになりました。

③復帰後のメッシュのずれを解消する

f:id:WakaiGames:20201205024452p:plain

  • ラグドール時、メッシュのRotataionとLocationをCapsuleComponentの値から代入し続けます。

この方法はきっと非効率なので、もっと良い方法を知っている方がいれば教えてください。

これでラグドール化してから非ラグドールに戻っても問題なく動作するようになりました。

以上です。

ラグドール化から戻ってもメッシュがCapsuleComponentに付随しない原因はわからず。何か知っている方がいらっしゃれば教えていただけると幸いです。

UE4 なんかいい感じのマテリアルを作る

今日教えていただいたことを復習がてら忘れないように残しておく回です。

 

↓今日できること↓

 

まずは上の方を作っていきます。

①マテリアルの作成

f:id:WakaiGames:20201025003553j:plain

  • これはいつものやつです。
  • 何となくUserIntarfaceにしています。

②テクスチャ設定

f:id:WakaiGames:20201025004000p:plain
f:id:WakaiGames:20201025003956p:plain
  • TextureSampleを右クリック後、テクスチャオブジェクトに変換をクリックします。
  • テクスチャは標準で入っているT_Noise01がおすすめ(と言われました。)です。

③今回のキモになる部分

f:id:WakaiGames:20201025004515p:plain
f:id:WakaiGames:20201025004512p:plain
  • まずは何もない場所で右クリック、MaterialFunctionCallを呼びます。
  • 詳細パネルから、4WayChaosを選択します。これは指定したテクスチャを斜め4方向に動かしてくれるノードです。(浅い知識)

④残りのノードを組む

f:id:WakaiGames:20201025005043p:plain

  • カラーParamは4を押しながらクリック後、そのノードを右クリックでParameterに変更できます。
  • MultiplyはMを押しながらクリックです。

以上で一つ目終了です。

色とテクスチャの組み合わせ次第で何十通りにも化けてくれそうですね。

 

次は

これを作ります。

①マテリアルの作成

f:id:WakaiGames:20201025010514j:plain

  • BlendModeとTwoSidedを変更します。TwoSidedは裏面も描画するかの設定です。

②ノードを組む

f:id:WakaiGames:20201025010810p:plain

  • ColorParameterには2500,0,0,0を代入しています。色の明るさを設定しています。
  • 緑のParameterはsを押しながらクリックで出せます。初期値は10です。ラインの太さを設定しています。
  • DepthFadeはオブジェクトの接地面を薄くしてくれるノードです。これを1-で反転、つまりオブジェクトとの接地面のみ描画するわけです。

これを適当なスフィアに適応すると、

 

以上です。今日教えてもらった内容でマテリアルが少しわかったように勘違いすることができました。楽しいですね。

現在制作中のゲームにも使用しようと思います。

UE4 キャラクターの違うマルチプレイを実現する

↓今回できること↓

 

①レベルブループリントにスポーン処理を書く

f:id:WakaiGames:20201020183436p:plain

  • CreatePlayerでPawnとそれに付随したPlayerControllerを作ります。
  • 上記のControllerから付いているPawnを変数に格納しておきます。
  • 上記のControllerとPawnの付随関係をUnPossesで外します。
  • CreatePlayerで作ったPawnはもう必要ないのでDestroyします。
  • 新しく実際に操作するActorを生成(位置はわかりやすいようにLevel上に配置したPlayerStartを使用しています。)
  • 新しく生成したActorにCreatePlayerで作成したPlayerControllerを付けます。

これをPlayer数分書くと、

 

こうなるわけですね。

これをIさんに手取り足取り教えていただきました。

ありがとうございました。

 

UE4 UIをWorld座標に表示する

↓今回やること↓

 

①表示したいWBPの作成

f:id:WakaiGames:20201020151047p:plain

  • TargetLocationには基準にしたいLocationを表示するBP側から代入します。
  • Set Alignment in ViewportのAlignmentを調整すると表示される位置のずれを設定できます。

②WBPを生成する

f:id:WakaiGames:20201020151314p:plain

  • これはいつもと同じですね。

こうすると、

 

以上です。

なんて簡単。

 

※追記

コンポーネントWidgetが追加できるらしい。

f:id:WakaiGames:20201020160243p:plain

  • 赤色のところでWBPを選択
  • 青色のところで表示のずれを指定できます。

f:id:WakaiGames:20201020160435p:plain

  • GetPlayerCameraManagerでカメラを取得
  • そこからLook at Rotationでカメラの方を向いてもらいます。

 

こっちの方が簡単やん。

壁を透過するしないの違いがあるので使い分けられそうですね。