FC2ブログ

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

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

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | 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↑

≫ EDIT

UE4 プレイヤーのスポーン(Spawn)位置を設定する(Player Start)

テンプレートでレベルを作成した際などに、
レベルにプレイヤーを置いて、そのプレイヤーの位置からプレイするとはじまりますが
それとは別に、プレイヤーがスポーン(Spawn)する位置を設定する方法です。

普通はこんな感じでプレイヤーが配置されていると思います。
PlayerStart005.png

プレイヤーがスポーン(Spawn)する位置を設定するには
「Player Start」というアクターを使います。

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

・Player Start
http://api.unrealengine.com/JPN/Engine/Actors/PlayerStart/index.html

プレイヤーをワールドの任意の場所にスポーンする機能は、
あらゆるゲームで非常に役立つ機能です。
UE4 には、これを行う Player Start という特殊なアクタがあります。
Player Start は、ゲーム ワールド内のプレイヤーの開始位置です。


とりあえず「Player Start」アクターを配置してみましょう。

Player Start アクタは、[Modes (モード)] パネルの [Basic (基本)] カテゴリにあります。


「Player Start(プレイヤースタート)」アクターをワールドに配置します。
PlayerStart000.png
こんな感じになりました。
PlayerStart001.png
コントローラーみたいなアイコンが表示されているはずです。

あとは「プレイ」項目の「プレイヤーを特別な位置にスポーンする」の項目を
「Player Start」に指定することで、「Player Start」の位置から始めることができます。
PlayerStart002.png

これで一応設定は終了です。

ですが、ちゃんと設定したのにプレイヤーの位置変わらないんだけど!
という状況が発生すると思います。

ずばりこれですね!

・Player Start位置で開始されない
https://answers.unrealengine.com/questions/591958/player-start%E4%BD%8D%E7%BD%AE%E3%81%A6%E9%96%8B%E5%A7%8B%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84.html

既にプレイヤーキャラクターをレベルに配置している場合。
設定によってはそちらが優先されてしまい「Player Start」が無視されしまうようです。

プレイヤーキャラクターを選択して詳細を開き
PlayerStart005.png

「Auto Possess」が「Player N」になっていると思うので
PlayerStart003.png
「Disable」に設定してあげましょう。
PlayerStart004.png
こんな感じですね。

これで無事スポーン位置が変わったと思います!

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

| PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。