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

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

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

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

2回答

1460閲覧

敵の頭上にあるHPUIを複数のカメラにそれぞれ向かせたい

futuru

総合スコア0

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/08/07 04:41

前提・実現したいこと

とある3Dゲームを作っていて敵の頭上にHPUIを制作してそのUIをカメラに向けたいのですが
画面分割されており複数カメラがあるので一つのカメラに向けることが出来てもその他のカメラから見ると曲がって見えてしまいます。

どうにか各カメラ毎にUIのrotationを変えて正しく表示させる事は出来ないでしょうか?
イメージ説明

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

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

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

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

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

guest

回答2

0

説明が足りなかったのようなので追加で説明いたします。

エネミーキャラごとにHPゲージをカメラの数だけ設置します。
下図はカメラ2つの場合の例(Scene画面)です。
イメージ説明
Hierarchy は以下のようにします。

Enemy1 (Layer: Default) 空オブジェクト
├ EnemyModel (Layer: Default) 敵モデル
└ EnemyNonHudHpUi (Layer: CamUi1)
└ EnemyNonHudHpUi (Layer: CamUi2)

この状態でCamera1 ではCulling Mask からCamUi2 のチェックを外し、Camera2ではCamUi1のチェックを外せばGame画面は下記のように表示されます。
イメージ説明

投稿2021/08/09 05:46

monmoko

総合スコア202

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

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

futuru

2021/08/09 09:34 編集

詳しくありがとうございます。ちゃんとレイヤー分け出来ました。 ただ今でも疑問点が1つあるのですが ※CullingMaskはCamUi2を除き表示 1. 空オブジェクト (Layer: Default) └Canvas (Layer: UI) - ├UI1 (Layer: CamUi1) ※ 表示される - └UI2 (Layer CamUi2) ※ 表示される 2. 空オブジェクト ├CanvasAndUi1 (Layer: Cam1Ui) ※ 表示される └CanvasAndUi2 (Layer: Cam2Ui) ※ 表示されない 何故かCanvasとUIを一つのオブジェクトに纏め上げた2は正しくレイヤー分けされますが 1の方はLayer: Cam2Uiを非表示にさせているのにUi2が表示されます。 また、2はLayer: UIを非表示にするとUI1,2が非表示になり Layer: Defaultを非表示にしてもUI1,2は表示され続けます。 これはつまりUIは自分と親子関係にあるCanvasのレイヤーによってUIの表示,非表示が変わるのでしょうか? 以下のように試してみましたが全て自身と親子関係かつ最も近いCanvasのGameObjectのレイヤーを元に表示/非表示が決まりました。 ※4台のカメラを設置しそれぞれCam1~4Uiの内1つだけ非表示にさせCam5Uiは全てのカメラで非表示にした。 Canvas (Layer: Cam5Ui) └CanvasAndUi (Layer: Cam1Ui, CullingMask対象: Cam1Ui) - ├Canvas (Layer: Cam2Ui) - │ ├Ui1 (Layer: Cam1Ui, CullingMask対象: Cam2Ui) - │ ├Ui2 (Layer: Cam2Ui, CullingMask対象: Cam2Ui) - │ ├Ui3 (Layer: Cam3Ui, CullingMask対象: Cam2Ui) - │ └Ui4 (Layer: Cam4Ui, CullingMask対象: Cam2Ui) - ├空Obj (Layer: Cam3Ui) - │ ├CanvasAndUi1 (Layer: Cam1Ui, CullingMask対象: Cam1Ui) - │ ├CanvasAndUi2 (Layer: Cam2Ui, CullingMask対象: Cam2Ui) - │ ├CanvasAndUi3 (Layer: Cam3Ui, CullingMask対象: Cam3Ui) - │ └CanvasAndUi4 (Layer: Cam4Ui, CullingMask対象: Cam4Ui) - └空Obj (Layer: Cam4Ui) - - ├Ui1 (Layer: Cam1Ui, CullingMask対象: Cam1Ui) - - ├Ui2 (Layer: Cam2Ui, CullingMask対象: Cam1Ui) - - ├Ui3 (Layer: Cam3Ui, CullingMask対象: Cam1Ui) - - └Ui4 (Layer: Cam4Ui, CullingMask対象: Cam1Ui)
monmoko

2021/08/09 11:53

質問の意味がいまいちくみ取れないのですが、CanvasをLayerで扱おうとしているということでしょうか? 3D空間上にあるHPゲージはマルチ画面ということで他のカメラからも見えてしまうということからLayerでの対応を提案しましたが、Canvasの表記は画面ごとに別々に描画すればよく、そうすれば他の画面には影響は与えないため、Layerを使う必要はないかと思うのですが。
guest

0

考えうるひとつの方法ですが、Layerを使った以下のようなものはいかがでしょうか?

  1. 4つの画面それぞれのカメラに向きを合わせたHPゲージをそれぞれ計4つ用意する。(※常にカメラの方向を向く板オブジェクトをビルボードと呼びます。)
  2. 4つのHPゲージのビルボードオブジェクトごとにインスペクターでLayerの設定を行う(Add Layerで新規に作成 例:Cam1UI~Cam4UI)。
  3. 4つのカメラごとにインスペクターのCulling Maskで表示するビルボードのレイヤーにチェックを付ける。

投稿2021/08/07 08:43

monmoko

総合スコア202

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

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

futuru

2021/08/09 03:45 編集

ありがとうございます。試しに適当なUIとカメラでテストしたところ出来ました。 ですが一つ問題が... オブジェクトの親子関係を以下のようにしたいのですが... Enemy1 (Layer: Default) 空オブジェクト ├ EnemyModel (Layer: Default) 敵モデル └ EnemyNonHudHpUi (Layer: CamUi1) Enemy2 (Layer: Default) 空オブジェクト ├ EnemyModel (Layer: Default) 敵モデル └ EnemyNonHudHpUi (Layer: CamUi2) ... この形式ですとカメラのCullingMaskでレイヤー指定しても親オブジェクトのレイヤーがDefaultに統一されているのでそこで表示/非表示の判定がされてしまいます。 (上記の関係性でEnemyNonHudHpUiのレイヤーをCamUi1、カメラのCullingMaskのDefaultを非表示,CamUi1を表示にしたのですがUiは表示されませんでした。) 正しい関係としては Enemy1 (Layer: Default) 空オブジェクト └ EnemyModel (Layer: Default) 敵モデル EnemyNonHudHpUi1 (Layer: CamUi1) └ Ui (Layer: CamUi1) Enemy2 (Layer: Default) 空オブジェクト └ EnemyModel (Layer: Default) 敵モデル EnemyNonHudHpUi2 (Layer: CamUi2) └ Ui (Layer: CamUi2) ... のように共通の親を作らないように設置する必要があるのかと思いますが、この方法ですとInspectorが散らかりますし敵の頭上に配置させたい為毎回スクリプトで制御させたり...と少し面倒なやり方になってしまいます。 こちらの問題を解決する術などあれば教えて頂きたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問