凛(kagring)のUE4とUnityとQt勉強中ブログ

2016 年から UE4 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。

≫ EDIT

UE4 シンプルな画面のフェードイン・フェードアウト(Start Camera Fade)

シンプルな色を指定した画面のフェードイン、フェードアウトの処理の方法です。
ツイッターをみていたらこういうものを見つけました。

「Start Camera Fade」というのを使うとすぐにできそうですね。

公式ドキュメントはこちら。

・Start Camera Fade
https://docs.unrealengine.com/latest/INT/BlueprintAPI/CameraFades/StartCameraFade/index.html

「Start Camera Fade」ノードはこんな感じに。
シンプルなカメラフェード001
「Target」には「Player Camera Manager」を指定します。
「From Alpha」にはフェード開始時のアルファを指定します。透明からなら0.0。不透明からなら1.0を指定しましょう。
「To Alpha」にはフェード先のアルファを指定します。フェードインなら1.0。フェードアウトなら0.0を指定しましょう。
「Duration」にはフェードの時間を秒で指定します。
「Color」にはフェードに使う画面の色を指定します。
「Should Fade Audio」はオーディオ関係もフェードするかを指定します。

True to fade audio volume along with the alpha of the solid color.

とあるので、オーディオのボリュームをアルファ値を参照してフェードさせるようです。
「Hold When Finished」はフェードが終わった後にそのフェード状態を維持するかを指定します。
これをTrueにしないと、フェードアウトが終わった瞬間画面がすぐに戻ってしまうので注意しましょう。

というわけでフェードインを組んでみるとこんな感じに。
シンプルなカメラフェード002
フェードインは色を変えてみました。

フェードアウトはこんな感じに。
シンプルなカメラフェード000

単純なものなら全然これでいけそうですね。
画面切り替えの際にはこれを使ってみるのがよさそうですね。
スポンサーサイト

| UE4 | 12:29 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 一定の確率でbool値を返して処理をする(Random Bool、Random Bool with Weight)

ゲームを作ってると一定確率で処理をしたいときが多々あると思います。
そこで、こんなノードがあるようです!

「Random Bool with Weight」というノードがあるみたいですね。
調べてみるとただランダムに処理したい場合は「Random Bool」というノードがあるようです。

まずは「Random Bool」です。
ランダムブール000

公式ドキュメントはこちら。
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Math/Random/RandomBool/index.html

Returns a uniformly distributed random bool


とありますね。

一様分布(いちようぶんぷ)は、離散型あるいは連続型の確率分布である。 サイコロを振ったときの、それぞれの目の出る確率など、すべての事象の起こる確率が等しい現象のモデルである。


調べてみるとこんな感じの乱数のようです。

ランダムブール002
試しにこんな感じでノードを書いてみました。
結果がこちら。
ランダムブール003
いい感じにランダムになってますね。

確率指定をしたい場合は「Random Bool with Weight」を使うのが良さそうです。
ランダムブール001
「Weight」には確率を入れましょう。1.0で100%。0.5で50%といった感じですね。

こちらもこんなノードを書いてみました。
ランダムブール004
25%の確率でtrueを返すようにしてみました。
結果はこちら。
ランダムブール005
こちらもいい感じではないかと!

確率実行はゲームでは結構必須なものなのでこういったノードがあるのは助かります。

| UE4 | 12:51 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 マウスのホイール回転量の取得(Event Mouse Wheel Axis)

マウスのホイール回転量を取得して処理する方法です。
調べてみるとこんなイベントが。

・Mouse Wheel Axis
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Input/MouseEvents/MouseWheelAxis/index.html

「Mouse Wheel Axis」というイベントを使うと良いっぽいです。
マウスホイール取得001
マウスのホイールを回転させると「Axis Value」に値が入ってくるようですね。

ということで、使いやすいように係数をかけて使ってみました。
マウスホイール取得000
無事思い通りの処理ができました!

といった感じですね。
これも自作のカメラをマウスで操作したくて調べていたのですが
上記イベントを使って無事実装することができました!

| UE4 | 14:08 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 パッケージ化時には処理されないデバッグ処理を実装する(Is Packaged for Distribution)

配布するときには実行されてほしくないが、
開発途中の状態では実行されてほしいデバッグ機能などがあると思います。
ここらへんどう実装するのかなというのを調べてました。

そうしたらこういう記事がありました。

・UE4で一本出してみて困ったこと (えーでるわいす なる)
http://edelweiss.skr.jp/column/1412_ue4/

えーでるわいすのなるさんの記事ですね。UE4初期の頃の記事ですが。

・#ifdef DEBUG的なものがない
  デバッグ用、開発用の機能を作る時につらい。
  せめてパッケージングの Development, Shipping が判定できたりすると助かる。
>Shun Sasaki @s_ssk13:欲しい! デバッグ用の機能をまとめておく
  CheatManager(そもそもBPに公開されてない?)というのがあるが、それだけじゃ足りない。
>Jun(Epic):今後の課題として検討させていただければと思います。
>alwei @aizen76:Is Packaged for Distributionノードで開発中かパッケージングされたものかの判定はできますね。

この中に上記のようなコメントがありました。
「Is Packaged for Distribution」というノードを使えばできるみたいですね。

ツイッターでもこういったリプライを頂いたのでいけそうですね。

公式ドキュメントはここですね。また英語しかない…。

・Is Packaged for Distribution
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Development/IsPackagedforDistribution/index.html

「Returns whether this is a build that is packaged for distribution」とあるので
パッケージ化されている場合のみ true を返すノードのようですね。

というわけで使ってみるとこんな感じに。
パッケージ化されていない場合のノード000
「パッケージ化」というのがどういう状態なのかちょっと調べて見ないとですが
開発途中の処理はこれで判断しておくと良いかもですね。
ただ、これ全部に埋め込むとめんどくさそうなので、起動時にこれでチェックして作っておくのがよいのかな。
あとは、ノードの情報がマスターにも含まれそうなのがもやもやする感じですかねー。

| UE4 | 12:49 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 マウスの移動量の取得(Event Input Axis Turn、Event Input Axis LookUp)

マウスの移動量を取得して処理する方法です。
マウスの座標を毎フレーム受け取って差分で処理をするという方法もあるかなと思ったのですが
UE4にマウスを乗っ取られている状態だと
座標の取得がうまくいかないことがわかりました。

なので、これをどうするか調べていたところ、以下のようなドキュメントが。

・ブループリントで入力をセットアップする操作手順
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/SetUpInput/Blueprints/index.html

「Input Axis Turn」と「Input Axis LookUp」というイベントが使えそうでした。

「Input Axis Turn」はマウスの横の移動量を取得できます。
マウスの移動量取得000
「Axis Value」で移動量が取得できます。
いい感じに扱うために任意の値を掛けて使うのがよさそうです。

「Input Axis LookUp」はマウスの縦の移動量を取得できます。
マウスの移動量取得001
「Axis Value」で移動量が取得できます。
いい感じに扱うために任意の値を掛けて使うのがよさそうです。

といった感じですね。
自作のカメラをマウスで操作したくて調べていたのですが
上記イベントを使って無事実装することができました!

| UE4 | 12:51 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 マウスやキーボードを押している間の判定をとる

マウスやキーボードの入力を受け取るとき、こういったノードを使うことになると思います。
マウス押しっぱなし取得002

これ「押した瞬間」と「離した瞬間」はとれるのですが
「押しっぱなしの時の状態」はとれないんですよね…。
みんな必要になりそうな処理だと思うのですが実は標準機能ではないという…。

と、調べてみたらこんな記事がありました。

・UE4 BluePrintメモ その1
http://pafuhana1213.hatenablog.com/entry/2014/09/09/004928

上記サイトによるとこの二種類の方法が良いみたいですね。

RetriggerableDelayノードのDurationの値でボタン押しっぱなし時の
処理(↑の場合だとFireImpulse)の呼び出し時間間隔を調整

フラグで管理版。Tickを使用するので、ボタン押しっぱなし時の処理は
毎フレーム呼ばれることになる

UE4のANSWER HUBでもこういった投稿があるようです。

・Mouse left button down to shoot automatically
https://answers.unrealengine.com/questions/31437/mouse-left-button-down-to-shoot-automatically.html

個人的には変数を増やさないといけないのですが
BOOL値の変数による管理が一番楽かなーと。
マウス押しっぱなし取得000
変数を増やして
マウス押しっぱなし取得001
押したときと話した時でこの変数を管理する。
といったものですね。

一応現状でも上記の扱いでできたりするのですが
折角ノードがあるのでHoldもとれるようにしてくれないかなーと願ってます!

| UE4 | 12:02 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 サウンドキュー(Audio Component)が再生中かどうかチェックする(Is Playing)

サウンドキューが再生中かどうかチェックする方法です。
公式ドキュメントはこちらに。

・Ambient Sound アクタのユーザーガイド
https://docs.unrealengine.com/latest/JPN/Engine/Audio/SoundActors/index.html

再生中かどうかを判断するには「Is Playing」ノードを使います。
再生中かどうか001
「Target」には「Audio Component」を指定します。

実際にノードを組むとこんな感じになります。
再生中かどうか000

UE4は機能がたくさん用意されてて簡単でいいですよね。

| UE4 | 12:30 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 テクスチャストリーミングの機能をオフにして低い解像度のテクスチャが一瞬表示されないようにする(Never Stream)

UE4ではテクスチャストリーミングという徐々にテクスチャを読み込みながら表示をしていく
ロード時間やメモリに優しい機能があります。

公式ドキュメントはこちら。

・テクスチャ ストリーミングの概要
https://docs.unrealengine.com/latest/JPN/Engine/Content/Types/Textures/Streaming/Overview/index.html

その際、低解像度のテクスチャから読み込んでいき表示されるので
一瞬だけ低解像度のテクスチャが表示されてしまうことがあります。
これを解消する方法です。

こちらも参考にさせていただきました。

● Never Stream
ONにするとテクスチャストリーミングをしません。
ゲーム実行中にテクスチャを読み込むのがテクスチャストリーミングで、ロードを速くする代わりにテクスチャが粗い状態から徐々に綺麗になるアレです。綺麗なテクスチャを後から読んでいる訳です。
しかしエフェクトは突発的に出る上に画面近くで粗いテクスチャが表示されると困りますよね。なのでNever Streamに設定するとストリームせず最適なMipレベルのテクスチャが表示されます。これはつまり全てのMipレベルを事前にロードするということであり、そもそも旧来の方法でもあります。


テクスチャのプロパティ画面はこんなかんじになります。
テクスチャストリーミング000
この詳細の中にある「Never Stream」という項目にチェックをいれることで
テクスチャストリーミングの機能をオフにすることができます。
テクスチャストリーミング001
簡単ですね。

ちなみに上記テクスチャがそうなのですが

テクスチャ ストリーミング システム、すなわちストリーマーはアンリアル エンジンの一部であり、各テクスチャの解像度を高くしたり、低くしたりします。これにより、利用可能なメモリを効率的に管理しながら 視覚的クオリティを適切に保ちます。この一部はミップすなわちミップマップで行われます。ミップはご利用のテクスチャ解像度に対して事前計算された画像のシーケンスです。テクスチャの LOD (Level of Detail) のようなものと考えることができます。 ミップの詳細については、 テクスチャのサポートと設定 のページをご覧ください。

といった「ミップマップで行われます」とあるので
ミップマップを持たないテクスチャだと「Never Stream」のチェック状態は変更できないようになっているようです。

どうしても見せたいエフェクトなどがない限りはチェックを入れなくてもいい気はしますが
ロード時間やメモリが間に合うのであればチェック入れてもよいかもですね。

| UE4 | 11:49 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 サウンドキュー(Audio Component)の音量を変更する(Adjust Volume)

サウンドキューの音量を変更する方法です。
公式ドキュメントはこちらに。

・Ambient Sound アクタのユーザーガイド
https://docs.unrealengine.com/latest/JPN/Engine/Audio/SoundActors/index.html

音量を変更する「Adjust Volume」ノードを使います。
サウンドキュー音量変更001
「Target」には「Audio Component」を指定します。
「Adjust Volume Duration」には音量の変更が終了するまでの時間を秒で指定します。
「Adjust Volume Level」は変更する音量を指定します。1.0で通常の音量。0.0で無音となります。

実際にノードを組むとこんな感じになります。
サウンドキュー音量変更000

音量の変更は結構頻繁に使うと思うのでよさそうですね。
とはいえこのノードでいいのかはちょっと不安だったりします。

| UE4 | 12:44 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 サウンドキュー(Audio Component)の音量をフェードアウトさせる(Fade Out)

サウンドキューの音量をフェードアウトさせる方法です。
公式ドキュメントはこちらに。

・Ambient Sound アクタのユーザーガイド
https://docs.unrealengine.com/latest/JPN/Engine/Audio/SoundActors/index.html

音量をフェードアウトさせるには「Fade Out」ノードを使います。
サウンドキューフェードアウト001
「Target」には「Audio Component」を指定します。
「Fade Out Duration」には音量がフェードアウトするまでの時間を秒で指定します。
「Fade Volume Level」には音量を指定します。1.0で等倍です。

だいたいは「Fade Volume Level」には0.0を指定することになると思います。
ちょっと確認したところ、どうもこの「Fade Out」ノードはフェードが終わったら停止するようです。
なので音量変更という用途には使えないかもですね。
あくまで自然に停止させたり、ほかの音とクロスフェードさせるとかですかね。

実際にノードを組んでみるとこんな感じになります。
サウンドキューフェードアウト000

| UE4 | 12:33 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 アクター(Actor)を時間指定で遅延破棄する(Set Life Span)

アクターを時間を指定して遅延破棄する方法です。
こんな便利な機能あったんですね。
こちらを参考にさせていただきました。

・第5回ue4ハンズオンセミナー
http://shivat.hatenablog.com/entry/2015/07/07/020549

・「Set Life Span」について
Set Life Span関数を使用することによって、アクタ(Target)に生存期間を設定することができる。
設定期間が終わると、Destroy()がアクタ上に自動的に呼び出される。
また、
「設定期間が終わるとDestroy()がアクタ上に自動的に呼び出される」というようなランタイムシステムは、
アクタの最初の位置と回転を設定する必要がある。
そのため、
「Get Actor Location」でアクタの位置を取得している。
つまり、
「Set Life Span」は、EnemyCharacter(Target)を0.2秒後に破壊する。


アクターを遅延破棄するには「Set Life Span」ノードを使います。
アクターの遅延破棄001
「Target」にはアクターを指定します。
「In Lifespan」には破棄するまでの時間を秒指定します。

実際にノードを組んでみるとこんな感じですね。
アクターの遅延破棄000
3秒後にアクターを破棄する。といった処理になっています。

「Set Life Span」はこういった問題の時にでも使えるみたいですね。

・オーバーラップしたアクターをDestroy Actorで破壊しようとするとエラーが出ます。
https://answers.unrealengine.com/questions/550150/%E3%82%AA%E3%83%BC%E3%83%8F%E3%83%BC%E3%83%A9%E3%83%83%E3%83%95%E3%81%97%E3%81%9F%E3%82%A2%E3%82%AF%E3%82%BF%E3%83%BC%E3%82%92destroy-actor%E3%81%A6%E7%A0%B4%E5%A3%8A%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8B%E5%87%BA%E3%81%BE%E3%81%99-1.html

・[BP]Blueprintアンチパターン その2 -Pure関数+ForEachLoop-
http://unwitherer.blogspot.jp/2017/04/bpblueprint-2-pureforeachloop.html

| UE4 | 11:48 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT