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

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

≫ 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↑

≫ EDIT

UE4 サウンドキュー(Audio Component)の音量をフェードインさせながら再生する(Fade In)

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

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

音量をフェードインさせながら再生するには「Fade In」ノードを使います。
サウンドキューフェードイン001
「Fade in Duration」には音量が切り替わるまでの秒数を指定します。
「Fade Volume Level」には音量のレベル(1.0で通常の音量)を指定します。
「Start Time」には再生開始位置を秒で指定します。

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

クロスフェードとかでBGMを切り替えるとかに使うな感じですかねー。

| UE4 | 15:53 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 アクター(Actor)を破棄する(Destroy Actor)

アクターをBPから破棄する方法です。
公式ドキュメントはこちら。

・ブループリントでアクタをスポーン、破棄する
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/SpawnAndDestroyActors/Blueprints/index.html

アクターを破棄するには「Destroy Actor」ノードを使います。
アクターの破棄000
「Target」には「アクター(Actor)」を指定します。

これだけなので簡単なのですが
以下のような問題もあるようなので注意が必要そうです。

・オーバーラップしたアクターをDestroy Actorで破壊しようとするとエラーが出ます。
https://answers.unrealengine.com/questions/550144/%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.html

これを解決するには「Destroy Actor」ではなく、
遅延破棄してくれる「Set Life Span」ノードを使うのも手みたいでね。

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

≫ EDIT

UE4 サウンドキュー(Audio Component)のポーズ(一時停止)の切り替え(Set Paused)

サウンドキューを再生した後、一時的にポーズ(一時停止)と
その一時停止状態から再生を開始する方法です。

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

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

一時停止の切り替えには「Set Paused」ノードを使います。
サウンドキューのポーズ001
「Target」には「Audio Component」を指定します。
「Pause」には停止状態を指定します。True なら停止、False なら再生となります。

実際の処理としてはこんな感じになります。
サウンドキューのポーズ000
変数を持つのもめんどくさいので
「Flip Flop」ノードを使って一時停止状態を交互に切り替えています。

とこんな感じで一時停止を制御できます。
実際の場合は「Pause」に渡すのを変数にしないとだめそうですね。

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

≫ EDIT

UE4 アクター(Actor)でキー入力受け付けの有効無効を動的に切り替える(Enable Input、Disable Input)

こんな感じで取得しているキー入力の受け付けを
動的に有効無効が切り替えれないか調べてました。
アクターのインプット有効002

そうしたらこういった記事が。

・UE4:プレイヤーのKey入力を取得するActorの簡易的な実装
http://unrealbussan.hatenablog.com/entry/2015/11/18/080139

公式ドキュメントもこういったものがありました。

・ブループリントでアクタに入力を設定する操作手順
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/ActorInput/Blueprints/index.html

キー入力受け付けを有効にする場合は
「Enable Input」ノードを使います。
アクターのインプット有効001
「Target」にはアクターを指定します。
「Player Controller」にはプレイヤーコントローラーを指定します。

実際に使う場合はこんな感じに。
アクターのインプット有効000

キー入力受け付けを無効にする場合は
「DIsable Input」を使いましょう。
アクターのインプット有効005
「Target」にはアクターを指定します。
「Player Controller」にはプレイヤーコントローラーを指定します。

イベント中はキー入力の受け付けを無効にしたいなど
結構つかいどころはありそうですね。

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

| PAGE-SELECT | NEXT