ForLoop内でAdd Static Mesh Componentを用いて、StaticMeshComponentを正常に生成できない

●概要
初めての質問につき、不備がありましたら申し訳ございません。
現在、リズムゲームの楽曲選択画面を作成中で、「左右の矢印を押したらPlaneコンポーネントが押した方向に回転し、中央のPlaneコンポーネントを選択すると各レベルに遷移する」という処理を組みたいと考えております。合計10個のplaneコンポーネント(楽曲のジャケットのようなもの)をForLoopとAdd Static Mesh Componentを用いて出現させたいのですが、ゲームをプレイするとPlaneコンポーネントは1つしか出現しない状況となっております。

●動作環境

  • Unreal Engine5.5.0
  • Windows 11 Home

●状況
「BP_MusicSelect」に以下3つのコンポーネント
・Scene:Defaultのシーンルートコンポーネント
・Widget(ウィジェットコンポーネント):矢印コンポーネント。画面の左右にあり、特定のキーを押すとplainコンポーネントが回転する。
・MusicSlots(スタティックメッシュコンポーネント):楽曲のジャケットが描画される予定。特定のキーを押すと対応したレベルに遷移。

「BP_MusicSelect」のイベントグラフと自作関数「CalculateSlotPosition」
・添付画像2枚目が自作関数「CalculateSlotPosition」
3・4枚目が「BP_MusicSelect」のイベントグラフになります。
使用している変数は以下の通りです。
□グローバル変数
MusicArray(スタティックメッシュコンポーネント配列):Planeコンポーネントを生成した後に格納しておく変数。
□自作の関数「CalculateSlotPosition」内のローカル変数
・X(Float):円形配置のX座標の計算に使用。
・Y(Float):円形配置のY座標の計算に使用。
・Angle(Float):角度計算に使用。
・Radius(Float):円の半径(デフォルト値300に設定)
・TotalSlots(Integra):スロットの総数(今回はデフォルト値10)

●出力結果
画像1枚目の通り、Planeコンポーネントは1つしか生成されていないように見えます。(左右の赤と緑の四角はWidgetコンポーネントで追加した仮の矢印です。)
配置に関係がありそうな場所にそれぞれPrintStringでチェックした結果が、画像の左上の文字列になります。
・要素数:MusicArrayの要素は追加されている
・RelX、Y、Z:SetRelativeLocationで設定された座標は数値に変化がある。
・スロット生成:Add Static Mesh Componentで「MusicSlot(Planeコンポーネント)」が追加されている。
・Index:ForLoopのIndexは増加している
・X,Y,Angle:「CalculateSlotPosition」内で計算されたそれぞれの値は、異なる値を出力している。

ForLoop内ではSetしたグローバル変数はループ事に毎回上書きされるとの情報がありました。そのため
、円形配置の計算は関数の中でローカル変数を用いて、都度更新されるように修正しましたが結果は変わりませんでした。
Planeコンポーネントが生成されない原因についてご教示いただけますと幸いです。

question #質問




ひょっとしたらですが、追加したPlaneがカメラで視認できる向きになってないだけかもしれません。
Set Relative LocationノードをSet Relative Location And Rotationに変更して、
座標と同時に適切な回転も与えればうまくいくかもしれません。

現在1つだけ見えているPlaneは、BeginPlay後の処理で追加されたものではなく
画像2枚目のコンポーネントタブでちらっと見えている(手動で追加した)コンポーネントではないでしょうか。
もしそうであれば、これと同じ回転を与えれば他のPlaneも見えるようになると思います。

チェックすべきポイントとしては、下記を確認してください

  • AddStaticMeshComponent の詳細パネルで生成するMesh、対応するMaterialが設定されているか
  • 当たり判定の考慮が必要ないなら、 Set *** Location 等の移動ノードでSweepをONにする必要はありません。Collisionが原因で引っかかる場合があります

本件とは関わりがないので問題視されていませんが、 Music Slots Music Array にNoneをセットしたりAddしたりしているところが気になりました
他で何らかの対処をしているのかはわかりませんが、プログラム的に意味のない操作をしているように思います

1 Like