UE4 マウスホイールを使用してゲーム中にカメラのズームイン/アウトを実装する
今更解説もいらないシリーズの続編です。
今回はゲーム中にマウスホイールをコロコロしたら
カメラが近寄ったり、遠のいたりする処理を実装します。
バージョンは4.16.1を使用します。
ではやっていきます。
準備
いつものごとくプロジェクトを作成しましょう。
テンプレートをThird Personを使用します。
作りました。
入力用の設定を行う
プロジェクト作成後、左上のEditから
Project Settingsを開きます。
Engine→InputからAction Mappingsに
ZoomIn : Mouse Wheel Up
ZoomOut : Mouse Wheel Down
を追加します。
処理を書く
Action Mappingsに追加ができたら、
次にコンテンツブラウザから
ThirdPersonBP→ThirdPersonCharacterを開きます。
このように処理を組みます。
入力イベントから一定の値をTarget Arm Lengthに渡しています。
またClamp(float)を使用することで、上限下限を設定しています。
これで処理は完了です。
確認する
デバッグ用にPrint Stringを処理のあとに追加しました。
今回は50という値を入れましたが、
もっと小さい数字を入れるとマウスホイールの
操作が活きてくると思います。
UE4 Modular Synthを触ってみる。
4.16のPreview1からちょっとずつ触っていたのですが、
ある程度理解できた(と思う)ので記事にまとめておきたいと思います。
マニアックな機能だとは思いますが、
かなり情報が少ないです。タスケテ...
誰か!日本語で!解説記事お願いします!
ではやっていきましょう。
準備
今回はUE4 4.16 Preview3を使用します。
適当なテンプレートからプロジェクトを作成しましょう。
私はThird Person Templateを使用しています。
プロジェクトが作成できたら、
左上のEdit→Pluginを開いてください。
Audioタブに「Synthesis」というプラグインがあるので、
これにチェックを入れ、エディタを再起動しましょう。
ブループリントを作成する
再起動が完了したら、コンテンツブラウザから
右クリック→Blueprint Classを選択します。
名前は適当にBP_SoundActorにしました。
ActorにComponentを追加する
BP_SoundActorをダブルクリックで開きます。
左上のAdd Componentから
「Modular Synth」を追加します。
階層は適当でいいと思います。
Blueprintに処理を書く
Componentを追加できたら、
このように処理を書きます。
CキーでNote Onを呼び出し、音を鳴らし始め
VキーでNote Offを呼び出し、音を鳴らすのを止めます。
Note Onは鍵盤などを「押した」という信号を送るものです。
Noteの中に入っているFloat型の数値は
Note Numberと言われるもので、それぞれに音を表しています。
上の画像のように60にすると4C、鍵盤の真ん中のドの音の
信号を送ります。
Velocityは音の大きさです。
数値が高ければ大きく、低ければ小さくなります。
Durationは音の再生時間です。
5にすると5秒間音を鳴らすという感じになります。
Note OffはNote Onと反対に音の信号を送るのを止めるものです。
Note Onを繋げてNote Numberを打ち込んでいけば
こんな感じに演奏もできます。
※音が小さいので、大きくして再生してください。
話を戻しまして、
Note On、Note Offにそれぞれパラメータを入れていきます。
・Note : 60
・Velocity : 120
・Duration : -1
これでCキーを押すとドの音が120の大きさで永続的(-1)に再生されます。
次にModular Synthのパラメータ変更処理を書いていきます。
Modular SynthにはたくさんのSet関数があり、
たくさんのパラメータがあります。
すべてModular SynthのSet関数です。
(まだ見落としがあるかも...)
これらすべての処理を書いていくのは大変なので、
今回はSet Synth Preset関数を使用します。
中に全てのパラメータが管理されており、
このノードを更新することで、パラメータを反映させることができます。
ではModular SynthからSet Synth Presetノードを出しましょう。
次にSynth Presetから線を引っ張り、
Promote to Variableで変数を作成します。
変数名は何でもいいです。
扱いやすくするために変数をPublicにしておきましょう。
この作成した処理をEvent Tickに繋げます。
これで処理は完成です。
実行してみる
Actorをレベルに配置し、実行してみましょう。
実行したら指定したキー(今回はCキー)を押してみましょう。
恐らく、なんとも言えない音がなると思います。
動画のようにPublicにした変数をいじることで、
一応動的にパラメータを変更することもできます。
触りとしてはこんな感じではないでしょうか?
手元にMIDIコントローラーがあれば色々試せそうですが、
私の手元には無いので、今回はここまで。
-- 追記 --
※キーボードイベントを使用する場合はPlayer Characterに設定するなどで、
イベントが取得できるようにしてください。
UE4 ジャンプについてあれこれ
前回の記事で多段ジャンプを実装しました。
その際にJump Max Countを使用しましたが、
Jump Max Countの存在をその時知りました。
なので今回はこのJump Max Countについて
少し調べたことをメモしていきます。
メモです!
Jump Max Countについて
まずはこれですね。
カーソルを当てたときに出るドキュメントです。
The max number of jumps the character can perform.
キャラクターが実行できるジャンプの最大数です。
Note that if JumpMaxHoldTime is non zero and StopJumping is not called,
the player may be able to perform and unlimited number of jumps.
JumpMaxHoldTimeが0でなく、StopJumpingが呼び出されない場合、
プレイヤーは実行可能なジャンプ数と無制限のジャンプ数を
実行できることに注意してください。
Therefore it is usually best to call StopJumping()
when jump input has ceased (such as a button up event).
したがって、ジャンプ入力が終了したときに(ボタンアップイベントなどで)StopJumping()を呼び出すのが最善です。
(ありがとうGoogle翻訳)
はい。N段ジャンプのNの部分ですね。
ReleaseイベントでStop Jumpingを呼び出すならこうですね。
公式のチュートリアルです。
正直これをみたら大丈夫だと思います。
Jump Max Hold Timeについて
ちなみにJump Max Hold Timeは
Stop Jumpingが呼び出されるまで
上昇させる秒数のことです。
こちらの変数に関しては文献が多かったので、
サックリと流します。
Jump Mac Hold Timeを5
Jump Max Countを1とします。
パラメータを変更後に実行してみます。
一回のジャンプで結構な高さまで上昇します。
ジャンプの処理はこのようになっています。
Stop JumpingはReleasedのイベントで呼び出されるので、
Pressedのままキーを離さなければ、
キャラクターは1回のジャンプで5秒間上昇し続けます。
またJump Max Hold Timeが0の場合はキーを押し続けても
変化はありません。
余談
上記2つの変数はこのようにGETとSETがあるため、
ブループリント上で動的に数値を変更することも可能です。
UE4 多段ジャンプを実装しよう
今更感漂うジャンプについての記事を書きます。
ちらっと調べたらこの手の記事がたくさんありました。
もう煎じすぎて味してないかもしれないですね。
しかし、いろいろ調べてたら少し気になったことが
あったので近いうちにそれについての記事も書きます。
・・・今回は実装だけです。
準備
UE4 4.15.1を使用して実装していきます。
今回はわかりやすくThird Personテンプレートを使用します。
プロジェクトを作成しました。
ジャンプのパラメータを変更する
ThirdPersonBP→Blueprintから
ThirdPersonCharacterを開いてください。
ブループリントを開いたら、右側の
Jump Max Countの数値を変更します。
このJump Max Countですが、簡単に言えば
N段ジャンプのNの部分です。
今回は3段ジャンプをしたいので、
Jump Max Countを3にしておきましょう。
処理を書く
テンプレートに最初から書かれているジャンプ処理です。
先程、Jump Max Countを3に変更したので
このままでも3段ジャンプが可能です。
こんな感じでサクッと多段ジャンプを実装することが出来ます。
このままでもいいのですが、
ジャンプの処理をこのように変更してみました。
3段ジャンプの1回目と2回目は普通にジャンプをし、
3回目にログを出すという処理です。
このようにすることでジャンプの回数ごとに
処理を分けることができます。
※Event On Landedは着地時に発生するイベントです。
実際にプレイするとこんな感じです。
2回ジャンプした後に左上にログが出ています。
UE4 「Download Image」を使ってみる
先日このようなノードを見つけました。
「Download Image」というノードです。
気になって少し調べてみたら、
結構記事がありました。
UE4で外部ファイルを扱ってみる - EagleGames 制作メモ
UE4 画像ファイルをURL指定でダウンロードする(Download Image) 凛(kagring)のUE4とUnityとQt勉強中ブログ
これらの記事を参考にしつつ、
触っていきたいと思います。
準備
今回はUE4 4.15.1を使用しています。
Widgetを作成する
プロジェクトを作成後、
コンテンツブラウザを右クリック→User Interfaceから
Widget Blueprintを作成します。
適当な名前をつけましょう。
作成したWidgetを開きます。
まずは変数を一つ作成しましょう。
Texture 2DDynamic型の変数に
DownloadTextureという名前をつけます。
次にPaletteからImageをひとつ出します。
どこか分かりやすいところに出しておきましょう。
このImageを選択した状態で
DetailタブのBrushにBindを作成します。
Create Bindingをクリックしてください。
そして作成した関数にはこのように処理を書きましょう。
変数(今は何も入っていない)のTextureデータを
Imageに入れます。
この関数はPureのチェックを外しておきます。
Event GraphのEvent Constructから
このような処理を書きます。
URLは適当に何か入れておきます。
今回は私のTwitterアイコンを描画してみます。
Download ImageでURLから画像を取得し、
作成した変数に格納します。
そして、先程の関数を呼び出す感じです。
Widgetを描画する
レベルブループリントを開きます。
そしてWidgetを描画しましょう。
確認してみる
はい。私のTwitterアイコンが描画されました。
余談
ノードの中身を見てみると対応している
フォーマットはPNG, JPEG, BMPの3つのようです。
さらっと読んだだけなので、間違っている可能性がありますので
余談とさせていただきます。
ミスがありましたら、ご教授いただけると幸いです。
UE4 Background Blurを使ってみる
Unreal Engine4 4.15のリリースノートを眺めていたときに
Background Blurというものを見つけました。
使ってみたら簡単かつ面白かったので、
今回はこのBackground Blurについて書きたいと思います。
Background BlurとはWidgetを使用して、
背景などをぼかすことのできるものです。
ポーズ画面などで使用すると雰囲気が出るかもしれません。
ではやっていきます。
プロジェクトを作成する
今回はUE4 4.15.1を使用します。
Third Personテンプレートを選択しプロジェクトを作成します。
プロジェクトが作成されました。
Widgetを作成する
コンテンツブラウザから右クリック
User Interface→Widget Blueprintを選択します。
作成されたWidget Blueprintに適当な名前を付けます。
今回はWidget_BlurTestという風にしました。
このWidget_BlurTestをダブルクリックで開きます。
この作業は必須ではありませんが、
TextやButton、Borderなどを適当に配置します。
Background Blurを追加する
左上のPaletteから
Special Effects→Background Blurを
ドラッグアンドドロップで配置します。
今回は画面全体に重なるように配置しました。
右側のDetailsタブの中に
Blur Strengthというパラメータがあります。
このパラメータの値を10に変更しましょう。
このパラメータは0 ~ 100の間でぼかしの強さを
変更することができます。
0だとぼかしはかかりません。
ぼかしはかかりましたが、
このままではUIも一緒にぼけてしまいます。
そこでDetailsタブのZOrderの値を-1に変更します。
ZOrderは数値が大きくなるほど手前に描画されます。
また初期値が0のため-1にするとBlurは一番奥に描画されます。
こんな感じになると思います。
Widgetを描画する
レベルブループリントを開きましょう。
このようにPキーを押すと先ほど作成した
Widgetが描画されるようにします。
実行してみる
プレイボタンを押して実行してみます。
Pキーを押します。
上手くいきました。
ぼかしの強さをアニメーションで変更する
ぼかしの強さを変更するBlur Strengthはアニメーションさせることも
可能なようです。
Widgetアニメーションを作成し、
1秒間隔で0→100→0とBlur Strengthを変更する
アニメーションを組みます。
するとこのようになります。
UE4 見たら消えるオブジェクトを作ってみる
タイトル通りのものを作っていきます。
プレイヤーからLine Traceを飛ばし、
その衝突時に特定のオブジェクトが衝突していれば、
オブジェクトを削除するというものです。
ミニゲームくらいなら作れそうですね。
準備
今回はUE4 4.15.0を使用します。
First Personテンプレートでプロジェクトを作成してください。
Line Traceを出せるようにしてみる
まずはプレイヤーの処理から書いていきましょう。
First Person BP / Blueprintsから
First Person Characterのブループリントを開いてください。
移動処理や、弾を発射する処理など書かれていますが、
それとは別に、このような処理を書いてください。
Event TickからLine Trace By Channelへ繋いでいます。
LineTraceの開始座標はFirst Person Cameraのワールド座標。
終了座標はFirst Person CameraのGet Forward Vectorに
Line Traceの長さを乗算したものとFirst Person Cameraの
ワールド座標を加算した値です。
このLine Traceはプレイヤーの視線を判定するものです。
Line Trace By Channelを使用していますが、
Sphere Traceでも可能ですので好きな方を使ってください。
ここまで処理を書いたら実行して確認してみましょう。
このようにカメラからLine Traceが出ていると思います。
もし出ていない場合はLine Trace By Channelの
Draw Debug TypeをFor Durationに変え忘れていないかなどを
確認してみてください。
発見用のオブジェクトを作成する
次に発見用のオブジェクトを作成します。
コンテンツブラウザから右クリック
Blueprint Classを選択してください。
親クラスはActorで作成します。
作成できたらファイル名をBP_Targetとしましょう。
BP_Targetを開いてください。
左上のAdd Componentから
Box Collisionを追加します。
同じようにAdd ComponentからCubeを追加します。
Cubeでなくても構いません。
Static MeshやSkeletal Meshでも大丈夫です。
今回は見た目を気にせず分かりやすさ重視でCubeを選択しました。
Cube以外を使う場合にはBox CollisionもMeshの形に合わせて変更してください。
Cubeの大きさに合わせてBox Collisionの大きさを変更します。
Collision Typeの変更をします。
CubeをNo Collisionにしてください。
Box Collisionは下記の画像のようにしてください。
Line Traceの判定をとるためにVisiblityが
Blockであれば他は自由に変更して大丈夫です。
Material Functionを作成する
消滅時に発生するエフェクトをマテリアルで表現しましょう。
細かい処理などは過去記事を見てください。
コンテンツブラウザから右クリック
Material Functionを選択してください。
ファイル名をMFunc_Dissolveとします。
過去記事にも同じものを挙げていますが、
解像度が低くて見づらいという声が多かったため、
解像度の高いものを用意しました。
Appear Timerの値に合わせてNoiseの形に透過していく処理です。
全体図の方
全体図じゃない方
Noiseのパラメータはこのようになっています。
マテリアルに処理を書く
Cube MeshにはBasic Shape Materialという
マテリアルがDefaultで適応されています。
先ほど作成したMFunc_Dissolveを
このBasic Shape Materialに適応しましょう。
Engine Contents / Basic Shapeから
Basic Shape Materialを開いてください。
最終結果のパラメータのBlend Modeを
Maskedに変更します。
Material Function CallでMFunc_Dissolveを呼び出し、
Emissive ColorとOpacity Maskを最終結果に繋ぎます。
Material Instanceを作成する
コンテンツブラウザに戻り、
Basic Shape Materiaを右クリックし、
Create Material Instanceをクリックしてください。
Material Instanceを作成しました。
(色が違うのはスクショを撮り忘れて後で撮ったからです)
作成したMaterial Instanceを開いてください。
パラメータを画像のように変更します。
BP_TargetのCube Meshのマテリアルを作成した
Material Instanceに変更しましょう。
発見用オブジェクトの処理を書く
BP_Targetの編集を行っていきます。
BP_Targetを開いてください。
Construction Scriptにこのような処理を書きます。
CubeコンポーネントのマテリアルをDynamic Material Instanceとして
作成し、DMIという変数に格納しています。
イベントグラフの処理です。
Custom Eventを作成し、Meltという名前を付けます。
作成したCustom EventからTime Lineへ繋ぎ、
DMIのパラメータを変更する処理を書きます。
Time Lineが終了したらDestroy Actorに繋ぎ、
BP_Targetを削除します。
Time Lineの中身です。
0秒時に値を1
2秒時に値を0
とする直線のTime Lineです。
これでBP_Targetの処理はすべて書き終わりました。
Clear Widgetを作成する
なくても困らないですが、
動画で出していたクリア時のWidgetを作成します。
コンテンツブラウザから右クリック
User Interface / Widget Blueprintを選択してください。
名前をWidget_GameClearとします。
Widget_GameClearを開いてください。
Textを一つ配置し、適当な文字とサイズにします。
これだけ
プレイヤーの処理を追加する
最後の工程です。
プレイヤーに処理を書きます。
First Person Characterを開いてください。
Line Traceの処理を書いた箇所に
下記の画像のように処理を追加してください。
Line TraceのDuration TypeをNoneに戻すのも忘れずに。
レベル上にBP_Targetが残っているかの判定を行い、
残っていればLine Traceを飛ばし、Line Traceの衝突した
ActorがBP_TargetであればBP_TargetのMelt関数を呼び出します。
BP_Targetがレベル上に残っていなければ、
Widget_Clearを描画します。
これで処理はすべて書きました。
実行して確認してみてください。
ページ上部の動画のようになります。