FC2ブログ

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

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

趣味で作ったゲームが配信されてます!

Nintendo Switch™ や PlayStation®4などで配信されています。
よろしくおねがいします!

◆舞華蒼魔鏡
東方Projectファンゲーム / 横スクロール体当たりシューティング
http://lost-identity.jp/souvenir/html/MaihanaPS4/html/Top.html
Nintendo Switch™/PlayStation®4
舞華蒼魔鏡

・ニンテンドーeショップ
https://ec.nintendo.com/JP/ja/titles/70010000007245

・PlayStation®Store
https://store.playstation.com/ja-jp/product/JP2857-CUSA11294_00-MAIHANA000000000

・PlayStation®4 用のアバター
https://store.playstation.com/ja-jp/grid/JP2857-CUSA11294_00-MAIHANA000000000/1?relationship=avatars

・PlayStation®4 用のテーマ
https://store.playstation.com/ja-jp/grid/JP2857-CUSA11294_00-MAIHANA000000000/1?relationship=themes

◆クロワルール・シグマ
一騎当千アクション
http://lost-identity.jp/souvenir/html/CroixleurPS4/html/Top.html
Nintendo Switch™/PlayStation®4/PlayStation®Vita

クロワルール

・ニンテンドーeショップ
https://ec.nintendo.com/JP/ja/titles/70010000003218

・PlayStation®Store
https://store.playstation.com/ja-jp/product/JP0122-CUSA01586_00-0000000000000000
https://store.playstation.com/ja-jp/product/JP0122-PCSG00537_00-CROIXLEUR0000000

・PlayStation®4 用のアバター
https://store.playstation.com/ja-jp/grid/JP0122-CUSA01586_00-0000000000000000/1?relationship=avatars

・PlayStation®4 用のテーマ
https://store.playstation.com/ja-jp/grid/JP0122-CUSA01586_00-0000000000000000/1?relationship=themes

楽しんでい遊べるように頑張って作りましたので是非遊んでいただけましたらと!

≫ EDIT

UE4 Unreal Engine 4 (UE4) Advent Calendar 2018

Unreal Engine 4 (UE4) Advent Calendar の 2018 があるようです。
あとで記事全部見直しすためのメモ。

・Unreal Engine 4 (UE4) Advent Calendar 2018
https://qiita.com/advent-calendar/2018/ue4

・Unreal Engine 4 (UE4) その2 Advent Calendar 2018
https://qiita.com/advent-calendar/2018/ue4_zwei

今回も有益な情報がかなりあるので見なくてはですね!
みなさんの知恵に感謝です!
スポンサーサイト

| UE4 | 00:34 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 Bind Event to ノードでカスタムイベントをデリゲートで接続することができない時の対応(Bind Event to、Custom Event)

「Bind Event to On Destroyed」などの「Bind Event to」系ノードなどを作成した場合に
カスタムイベントを接続しようとしたらできない! なんでや!と思ったので調べてみました。

そうしたらこんな記事が。

・【UE4】OnDestroyedなどを、カスタムイベントにデリゲートする
https://satcreative.hatenablog.com/entry/2016/12/04/225549

先にカスタムイベントを作るとDelegateできない
行き詰って箇所は、「18.3.3 イベントをイベントにバインドする」の項において、[イベントを OnDestroyedとバインドする]と、カスタムイベント[Respawm Player]をデリゲートで結ぶことができない……というもの。

カスタムイベントを後から作成して解決
これはもう世界が認めたカリキュラムな人に聞くしかないとハンバ諦めていたのだけど、どうやら解決。
まず先に、[イベントを OnDestroyedとバインドする]を作成する。
次に、上記で作成した[イベントを OnDestroyedとバインドする]の[Event]から線を引っ張ってきて[イベント追加]>[カスタムイベントを追加]をすると、デリゲートされたカスタムイベントが作成できる。


ということなのでまとめると

・カスタムイベント(Custom Event)を作成してから接続しようとすると失敗する。
・「Bind Event to」系ノードのイベント(Event)入力から線をひっぱってカスタムイベントを作成すると接続できる。


といったものみたいです。
完全に罠なのでは…。上記記事がとても助かりました!

とりあえず自分のほうでも実践して検証。

まずカスタムイベント(Custom Event)を作成してから「Bind Event to」系ノードに接続してみます。
BindEvent000.png
だめですね。困惑!

「Bind Event to」系ノードの入力「Event」から線を引っ張ってカスタムイベントを作成します。
BindEvent001.png

そうするとちゃんと接続されたカスタムイベントが作成されます。
BindEvent002.png

ここらへんネットに記事があって助かりました。
UE4は駄目だったときにどうしたらいいか。というのがもっとわかりやすいといいなって思いました。

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

≫ EDIT

UE4 半透明メッシュの描画順を強制的に指定する(Translucency Sort Priority)

半透明メッシュの描画順を強制的に指定する方法です。

こちらのツイートを見かけたのでメモです。

というわけで調べてみました。

「MeshComponent」の「Translucency Sort Priority」という項目がありました。
SortPriority001.png
この値をセットすることで半透明の描画順を強制的に制御できるようです。

ただし、
SortPriority000.png

警告:レンダラーが正確にソートできなくなってしまうため、自身で何をしようとしているのか分かっていなければ、デフォルト値以外に決して設定してはいけません。動的ゲームプレイエフェクトでは特に問題となります。

こんなポップアップがでるので、特殊な場合を除きいじらないほうがよさそうですね。

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

≫ EDIT

UE4 「Spawn Actor of Class」でスポーンさせるサブレベルを指定する(Spawn Actor of Class)

「Spawn Actor of Class」ノードでアクターをスポーンさせるときに
サブレベルを指定してスポーンさせる方法です。

こちらのツイートを見かけたのでやってみました。

こちらの記事のようですね。

・Need help spawning to SubLevel!
https://answers.unrealengine.com/questions/712411/need-help-spawning-to-sublevel.html?sort=oldest

「Spawn Actor of Class」ノードでアクターをスポーンさせるときに
「Owner」を指定すると、その「Owner」が存在するレベルと同じレベルにスポーンさせることができるようです。

とりあえず「Spawn Actor of Class」ノードで普通にスポーンしてみます。
SpawnObject001.png
「Owner」指定なしだとこんな感じで配置されました。
SpawnObject000.png
パーシスタントレベルに配置されました。普通ですね。

次に「Spawn Actor of Class」ノードに「Owner」を指定してスポーンしてみます。
SpawnObject003.png
「Owner」に指定したアクターはサブレベルに配置してあります。
結果はこんな感じに。
SpawnObject002.png
サブレベルに配置されました(AddLevelSubというのがサブレベル)

結構使えそうな処理になりそうですね。

| UE4 | 16:07 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 パッドのスティック入力の感度を調整する(Dead Zone)

スティック入力の値を取得するときに遊びとして一定の傾きはクランプされ、
入力がされていなかったと判定する処理がはいっています。
デフォルトだと固いと思った場合に入力の感度を調整する方法です。

「プロジェクト設定」を開き、「エンジン」の「インプット」を選択します。
DeadZone000.png

その中の「Axis Config」にある「Dead Zone」を設定します。
DeadZone001.png
上記デフォルトだと「0.25」になっているため、
スティックの傾きの1/4以下の場合は入力として受け付けない。
といったもののようですね。

この「Dead Zone」は各スティックの軸ごとに存在しています。
DeadZone002.png
「Gamepad_LeftX」「Gamepad_LeftT」「Gamepad_RightX」「Gamepad_RightY」
左スティックと右スティックの上下と左右ごとに設定できる感じですね。

実はこれそのままの実装だと問題があり、
各軸ごとにクランプされているため、上ちょっと左といった入力を行っても
左右がクランプされているため、真っ直ぐ上と認識されてしまいます。
(なんでこんな実装に…)

というわけで疑問に思っていたところ
という感じらしいので
「Dead Zone」の設定は0.0にして、自力で円形クランプしてあげるのが良さそうです。

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

≫ EDIT

UE4 データキャッシュの保存場所を変更する(Derived Data)

UE4のデータのキャッシュ保存場所を変更する方法メモです。

こういったツイートを見かけたのでメモです。

「エディタの環境設定」の「一般」の「グローバル」を選択します。
データキャッシュ000

ここにある「Derived Data」で場所を指定します。
データキャッシュ001
ローカルと共有の2つがあるみたいですね。

詳しい内容はこちらが参考になると思います。
いつもお世話になってます!

・UE4 DerviedDataCacheについて
http://unrealengine.hatenablog.com/entry/2016/04/07/210000

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

≫ EDIT

UE4 複数のアクター(Actor)を持つアクター(ブループリント)を作成する(Child Actor)

複数のアクター(Actor)を持つアクター(ブループリントクラス)を作成する方法です。

こちらを参考に。

・[ue4]チャイルドアクターシンドローム
https://qiita.com/housakusleeping/items/2eadab9e6a7b985ff2f3

アクター(ブループリントクラス)のコンポーネントとしてアクターを追加することができます。
「Child Actor」というものを使います。

まずはブループリントクラスを作成します。
ChildActor000.png

「アクター」として作成します。
ChildActor001.png

こんな感じにアクターアセットが生成されました。
ChildActor002.png

そうしたら「コンポーネントを追加」します。
ChildActor003.png

「Child Actor」を選択しましょう。
ChildActor004.png
こんな感じで2個追加してみました。

この「Child Actor」コンポーネントにアクターを設定しましょう。
ChildActor005.png
「Child Actor Calss」にアクターを設定します。

今回はグレイちゃんのアクターを設定してみました。
ChildActor006.png
こんな感じに2つのアクターが含まれるアクター(ブループリントクラス)ができました。

これをレベルに配置してみるとこんな感じに。
ChildActor007.png

アウトライナ上ではこんな感じにみえます。
ChildActor008.png
2つのアクターが入っていることが見てわかるのがいいですね。

この「Child Actor」についての補足としては以下の2つが役に立ちそうです。
1つ目は「チャイルドアクターテンプレート(Child Actor Templates)」についてです。

・[ue4]チャイルドアクターシンドローム
https://qiita.com/housakusleeping/items/2eadab9e6a7b985ff2f3

「チャイルドアクターテンプレート(Child Actor Templates)」についてはこちらでも。

Child Actorコンポーネントに対して変数の初期値を親ブループリント側から直接渡せる機能

といった機能のようです。

もう一つは「Child Actor」に対して初期値以外で値を渡す方法についてです。

・子BPに値を渡したい
https://answers.unrealengine.com/questions/464800/%E5%AD%90bp%E3%81%AB%E5%80%A4%E3%82%92%E6%B8%A1%E3%81%97%E3%81%9F%E3%81%84.html?childToView=464809

Child Actor Componentをそのままキャストしていたのではないでしょうか?
Child Actor Component→get Child Actor→Cast~

これも覚えておいたほうが良さそうですね。

個人的には結構使うかなというところです。
2つで1セットの何かとかですが。そんなに使わないんですかね…

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

≫ EDIT

UE4 カメラを早く回したりするとオブジェクトが1フレーム遅延して描画されてしまうのを回避する方法(OCCLUSION_SLOP)

カメラを早く回したりすると
オブジェクトが1フレーム遅延して描画されてしまうのを回避する方法です。
ツイッターで見かけたもののメモになります。助かります!

「ScenePrivate.h」にある「OCCLUSION_SLOP」の値で調整する方法みたいです。

「Engine.ini」にある「CameraRotationThreshold」
「CameraTranslationThreshold」の値で調整する方法があるみたいです。

ここらへんどう対応していいかわからなかったのでとても助かります!

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

≫ EDIT

UE4 指定した値が範囲内のどれぐらいの割合なのかを取得する(Normalize to Range、Inverse Lerp)

指定した値が二つの値の範囲のどれぐらいの割合なのかを取得する方法です。

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

・ちょっと変わった形のゲージをメッシュで作る《宿題編》
http://limesode.hatenablog.com/entry/2018/06/17/104137

上記で使っている「Normalize to Range」ノードで
指定した値が二つの値の範囲のどれぐらいの割合なのかを
取得することができます。
NormalizeToRange002.png
「Value」には調べたい値を指定します。
「Range Min」には範囲の最小値を指定します。
「Range Max」には範囲の最大値を指定します。

上記のノードのように値を設定すると結果こんな感じになります。
NormalizeToRange000.png
「0.0」から「200.0」の範囲内で「150.0」がどの割合にいるかということで
「0.75」が返ってきています。

※ふと気づいたのですが、MinとMaxで指定する値逆ですね…。
それでもちゃんと動いてるのは凄いですね。

実際につかってみるとこんな感じに。
NormalizeToRange001.png

いろいろと使えそうですね。

補足ですが4.18までは上記機能のノードはノード名が違うようです。

「Inverse Lerp」というノードだったようです。

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

≫ EDIT

UE4 アセットがどこで参照されて使われているかを調べる(リファレンスビューワー(Reference Viewer (参照ビューア)))

指定したアセットがどこで参照されて使われているかを調べる方法です。
Reference Viewer (参照ビューア)というものを使うことで、
アセットがどこで参照されているかをグラフ化して表示することができます。

こちらで詳しい説明がされています。

・UE4で超便利なリファレンスビューワーを使ってみよう
http://unrealengine.hatenablog.com/entry/2014/05/21/204323

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

・Reference Viewer (参照ビューア)
http://api.unrealengine.com/JPN/Engine/Content/Browser/ReferenceViewer/

まずはこんなアセットがあるとします。
リファレンスビュアー001
テクスチャのアセットですね。

これがどこで使われている(参照されている)かを調べます。
アセットを選択肢て右クリックででるメニューの
「Reference Viewer」を選択します。
リファレンスビュアー002

そうするとこんな感じで参照グラフが表示されます。
リファレンスビュアー003
マテリアルからテクスチャが参照されている感じですね。

実際の実行画面ではこんな感じになっています。
リファレンスビュアー000
マテリアルがテクスチャを参照しているのであっていますね。

これはかなり使えると思うのでばしばし使っていきたいですね!(最近知りました

| UE4 | 23:23 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ビヘイビアツリー(Behavior Tree)を実行する(Run Behavior Tree)

ビヘイビアツリー(Behavior Tree)を実行する方法です。
ビヘイビアツリー自体の作り方や制御の仕方についてはまた別途ということで。

こちらを参考にしました。

・ビヘイビアツリーのクイックスタート ガイド
http://api.unrealengine.com/JPN/Engine/AI/BehaviorTrees/QuickStart/index.html

・8. Controller ブループリント:ビヘイビアツリーを実行する
http://api.unrealengine.com/JPN/Engine/AI/BehaviorTrees/QuickStart/8/index.html

ビヘイビアツリーを実行するには「Run Behavior Tree」ノードを使います。
RunBehaviorTree000.png
「Target」には「AI Controller」を指定します。
「BT Asset」にはビヘイビアツリーを指定します。

このノードの詳細についてはこちらの資料が参考になります。

UBehaviorTreeComponent がなければ AAIController に追加する  RunBehaviorTree() を何度も呼び出しても UBehaviorTreeComponent は 1 つだけしか付加されない

引数 BTAsset に Blackboard Asset が指定されていて、 かつ UBlacokboardComponent が存在しないか 存在していても互換性がない場合、 UseBlackboard() が実行される  UseBlackboard() Node を実行しなくても UBlackboardComponent が追加されていたのはこのため  既存の Blackboard の Asset が BTAsset が指定する Blackboard Asset の親である場合、 または両者の Key がすべて同一であれば、 互換性があると見なされる  要するに、これから実行する BehaviorTree 内で使われる可能性のある Key が 既に存在する UBlackboardComponent 内に無いのは困るので、 その場合は UBlackboardComponent を作り直してしまえ、ということ

引数 BTAsset が NULL のときのみ false を返す

ここらへんは内部処理として覚えておきたいですね。

実際に使ってみるとこんな感じになります。
RunBehaviorTree001.png

あとはビヘイビアツリーの中身次第ですね。

| UE4 | 00:57 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT