質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
UE4

UE4はUnreal Engine(アンリアルエンジン)の第4世代です。 UEは、Epic Gamesより開発されたゲームエンジンです。

Q&A

解決済

1回答

585閲覧

[UE4]ポーンに登録したイベントノードの動作の質問です

akasaka_

総合スコア26

UE4

UE4はUnreal Engine(アンリアルエンジン)の第4世代です。 UEは、Epic Gamesより開発されたゲームエンジンです。

0グッド

0クリップ

投稿2022/04/14 06:15

編集2022/04/17 14:36

UE4でポーンから弾を発射するための機能を追加しようと試していたのですが

スクリーンショットの一番上のイベントビギニングプレイはアクターのスポーンまで実行されるですが
下のTabによるインプットアクションのイベントとZキーを入力したとき、プリントストリングまでは実行されるのですが、アクターのスポーンが実行されません

プリントストリングが実行されているという事はイベントから命令がスタートしている事になるのですが、アクターのスポーンまで命令が実行されないのか解りません、解決方法がありましたら回答をお願いします。

イメージ説明

2Mに抑えるため画像は荒くなっていますが、GIFによる動画を投稿します。
自機の縦軸と右上の文字に注目してください、最初シーンは文字も出現して自機縦軸に沿って動くアクターが出現していますが、画面が切り替わったシーンでは、右上に文字が出現しますが自機の縦軸にアクターは出現していません。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MMashiro

2022/04/17 08:42

何をもって実行されてないと判断したのでしょうか? コードを見る限り間違いなくスポーン処理が実行されています (意図した結果とは異なっている可能性はありますが)
akasaka_

2022/04/17 11:16

 一番上のイベントビギニングプレイでは プリントストリング(hello01)の文字が表示され、対象のアクターがスポーンして指定した方向に移動するのが確認できるのですが。(イベントティックでは連続してアクターがスポーンして移動するのを確認しています)  インプットアクションとZボタンの入力ではそれぞれのプリントストリングの文字(hello02、hello03)は画面に表示されるのですがアクターは出現しません  ポーンで外部入力からのイベントを有効にするための準備が足りないのでしたら、プリントストリングの文字も出力されないとは思うので、どういう理由なのかもわからない状況です。
MMashiro

2022/04/17 13:15

ここのコードだけだと本当にここのPrintStringが実行されているのであれば後続のSpawnノードも実行されています。 ブレークポイントを張ってちゃんと処理が来ていてSpawnノードも処理が来ているか確認してみてください
akasaka_

2022/04/17 13:59

ブレークポイントですね解りました確認してみます。
akasaka_

2022/04/17 14:15

ブレークポイントを張ったところ、ボタンを押した後の処理はスポーンアクターまで来ている様ですがやはりアクターのスポーンまでは確認できませんでした。  もうすこし解りやすい様に、追加でGifを用意して投稿しようと思います、投稿制限の2Gに収まらなかった場合はまた追って報告します。
MMashiro

2022/04/17 14:49

であればやはりSpawn処理は走っているということです。 ただ何かしらの原因で失敗しているか(Spawn処理のReturnValueをチェックすれば確認可能です) スポーンできているが想定外の挙動でスポーンされていないと勘違いしているかのどちらかが予想されます SpawnしたActorのBeginPlayにPrintStringをつなげてスポーンに成功したら文字列を出力するようにすればSpawnが出来ているかどうかはわかるのではないでしょうか?
akasaka_

2022/04/17 14:59

度々のメッセージありがとうございます。 早速チェックしてみます。
akasaka_

2022/04/17 15:12

色々と弄っていて気が付いて、アクターに設定していたインターバル ライフ スパンの設定を0にしてみると、アクターがアウトライナの一覧に表示されるのが解りました(最初はライフ スパンを設定していたのでアウトライナから消えていて確認できなかった) そしてどこにスポーンしたのか確認したらはるか上空に、どうもかなり真上にスポーンしてからさらに上に移動していることが解りました。 こうなると、出現しないという問題は解決できましたが、なぜ外部入力のイベントでスポーンさせた時はそんな変な位置にスポーンし思ってもない方向に前進するのか余計に解らなくなっています。
akasaka_

2022/04/17 15:17

さらに解ったことがあります、どうやら自機に設定した円錐のポーンが上空にスポーンしているのを確認しました キー入力のアクターはそこからスポーンしていることが解りました しかし ポーンをスポーンさせるようなブループリンとは組んでないはずなのですが・・・ とにかく、ポーンが何故出現するのかを解明しようと思います。
akasaka_

2022/04/17 15:31

色々とチェックして悪さをしていると思われるのが、カメラの位置を変更及び固定化させるために用意した、set view target with blendとそれに接続しているGetPlayerController (数字は0に設定しています)ぐらいでしょうか、もしこれが原因だとしても、なぜこれが悪さをしているのかは皆目見当がつきません
MMashiro

2022/04/17 15:38

どういうコードを組んでいてどういった挙動が正しいのかこちらではわかりかねますので 何かおかしいと思ったときは思い込まないように一つ一つ機能を切り分けてデバッグすることで原因を追究しやすいです。 スポーン位置がおかしいのであればスポーン時にArrowのGetWorldLocationの位置をPrintStringしてやればArrowが(そしてスポーン想定の位置が)どんな位置にいるのかがわかると思います
akasaka_

2022/04/17 15:44

ありがとうございます。 早速チェックしてみます。
akasaka_

2022/04/18 00:53

早朝にチェックをして大体の原因が解りました、プロジェクト設定の プロジェクト > マップ&モード の中のデフォルトのゲームモードを自分で用意したゲームモードのブループリントに切り替えて、さらにデフォルトのポーンクラスを自機のブループリントに切り替えると発生(2体目の自機が出現)する事が解りました。 ただこのデフォルトのポーン設定を自機用に用意したブループリントではなく、デフォルトに戻すと、自機のキーボードなどによる外部入力のイベントが無効になってしまいます。 この辺り詳細を調べようとしたのですが、現状検索では詳細を見つける事が叶っていませんので、どうしたら良いのか頓挫している状況です。
MMashiro

2022/04/18 05:24 編集

やりたいことは複数のActorで入力イベントを受け付けたいということでしょうか? 一つのActorで受け付けるのであればゲームモードの設定でスポーンするようにして自身で配置したActorを消せばよいと思います。 最終的に何がしたいかから逆算して必要な作業を決めていくことが大事です
akasaka_

2022/04/18 07:48

自分としては勉強の一環として簡単な縦スクロールシューティングを作ってみようとしていて、今回やっているのは自機の操作関係のプログラムを作成(何かボタンを押したら弾を撃つを作っていたところ)していたところです。(投稿したGIFでは敵のサンプルなども動いています) いくつか他にもプログラムは作っていて、ある程度はUE4のブループリントが解ってきたかな?と感じ始めた矢先にこのトラブルです。 色々な資料や動画を参考にして作っていますが、ここは不要ではと思った部分は削っています(プロジェクトを作った時にデフォルトで置かれているポーンなど) 今自分でここが解れば解決できるのではとい思っている部分は、プログラムをスタートした時にアウトライナーに追加表示される色々な物(プレイヤーコントローラーなど)がどういう経緯で追加されるのかです。 この部分は現在進行形で色々と調べていますが、未だに解る答えは見つかっていません、とにかく解決のために引き続き調べは続けてみようと思います。
guest

回答1

0

ベストアンサー

操作入力を受け付ける条件

かなりざっくりで完全に正しいというわけではないですが大まかに下記のどれかに当てはまれば操作入力を受け付けます

  • LevelBPであること
  • Auto Receive Input に Player 0 が指定されていること
  • そのActorがPlayerControllerにてPossessされていること

この中でUnrealEngineを用いてゲームを作る際に一番よくつかわれるのは最下段のPossessをする方法です。
ではどのようにPossessをすればよいかというと方法は下記の二つがあります

  • Auto Possess Player に Player 0 を指定する
  • GameModeを作成しその Default Pawn Class にプレイヤーキャラのBPを設定し、レベルまたはProjectSettingsで作成したGameModeのBPを指定する

上記二つの中でよく使われる方法は下のGameModeからキャラをSpawnさせPossessさせる方法です。
標準で付属しているテンプレートであるThirdPersonTemplateもこの仕組みが使われTPSキャラがスポーンしている為こちらを参照するのが良いと思います。

ちなみにスポーン位置はPlayerStartアクターがレベル上に配置されている場合はその位置になり、存在しない場合はワールド原点(0,0,0)になります。

注意点

そして特に設定をしなかった場合どこかのレイヤーで入力処理を受け付けるとそのキー入力は後続のレイヤーで検出されなくなります。

複数のActorで操作入力を受け付けたい場合はそもそも設計が良くない為
PlayerControllerまたはそのControllerがPossessしているActorで入力受付を行い、そこから関数なりイベントディスパッチャーなりを使用して各Actorに処理させるのが良いと思います。

投稿2022/04/18 08:11

MMashiro

総合スコア2378

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akasaka_

2022/04/18 09:43

MMashiroさん質問の追記・修正依頼でも親身なコメント返信ありがとうございます。 どうやら、今回の回答で解決ができそうです。 では、ブループリントの作成を続けたいと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問