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

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

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

HTC VIVEは、台湾を拠点とするHTCと米Valve社の共同開発によるVRヘッドセット。ユーザーの頭や手の位置を認識する「ルームスケール」というトラッキング機能が特徴で、周囲を歩き回ってコンテンツの中に入ったような臨場感を体験できます。

Unity

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

Q&A

解決済

1回答

1400閲覧

VR上のオブジェクトの名前をポップアップさせたい

ameshikou

総合スコア8

HTC VIVE

HTC VIVEは、台湾を拠点とするHTCと米Valve社の共同開発によるVRヘッドセット。ユーザーの頭や手の位置を認識する「ルームスケール」というトラッキング機能が特徴で、周囲を歩き回ってコンテンツの中に入ったような臨場感を体験できます。

Unity

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

0グッド

0クリップ

投稿2021/09/14 08:27

VR上にある楽器オブジェクトの名前をポップアップさせるスクリプトを作ろうと思っています。

https://rightcode.co.jp/blog/information-technology/unity-display-text-in-vr-environment

上記のURLのサイトの(方法3)を参考にして、視線の当たるオブジェクトを自分の楽器オブジェクトに変更しています。
複数ある楽器オブジェクトを空のオブジェクト(Violins1)に入れて、群で1つのオブジェクトにしています。
名前をポップアップしたいのは群の名前なので、群のオブジェクト(Violins1)にCapsuleColliderを付けました。

そして、下記のスクリプトで実行しましたが、テキストは表示されませんでした。 

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class DisplayPopup : MonoBehaviour 7{ 8 public GameObject Violins1; //変更箇所 9 public GameObject popupObj; 10 public Transform popup; 11 12 private Text infoText; 13 // Start is called before the first frame update 14 void Start() 15 { 16 if (popup != null) 17 { 18 infoText = popup.Find("Text").GetComponent<Text>(); 19 } 20 } 21 22 // Update is called once per frame 23 void Update() 24 { 25 Transform camera = Camera.main.transform; 26 Ray ray; 27 RaycastHit[] hits; 28 GameObject hitObject; 29 30 ray = new Ray(camera.position, camera.rotation * Vector3.forward); 31 hits = Physics.RaycastAll(ray); 32 33 for (int i = 0; i < hits.Length; i++) 34 { 35 RaycastHit hit = hits[i]; 36 hitObject = hit.collider.gameObject; 37 if (hitObject == Violins1) //変更箇所 38 { 39 popupObj.SetActive(true); 40 if (popup != null) 41 { 42 popup.LookAt(camera.position); 43 popup.Rotate(0.0f, 180.0f, 0.0f); 44 } 45 transform.position = hit.point; 46 } 47 else 48 { 49 popupObj.SetActive(false); 50 } 51 } 52 } 53}

参考サイトのとおりに、Capsuleオブジェクトでやったところ、うまくいきました。

Colliderがないと視線のあたり判定ができないのかなと思いCapsuleColliderを入れましたが、
それだけだとだめなのでしょうか?
また、さらにスクリプトの内容を変えないとだめなのでしょうか?

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

VR環境を持っていないので、カメラをマウスで移動する形で確認してみましたが、自前のオブジェクトに入れ替えても特に問題なくテキストが表示されました。
自前のオブジェクトにCapsuleColliderを入れたとのことですが、プログラムではColliderさえあれば特に判別していないようですから種類は問わないようです。

プログラムの2つの変更箇所ですが、これらを変更する必要はありません。
capsule を Violins1 に変更されていますが、これは変数名ですので元のままでも動作します。
もちろん換えても問題ありません。
これは Inspector上で対象となるオブジェクトを指定する変数です。
ここには自前のオブジェクト(楽器オブジェクト)をドラッグ&ドロップして指定します。

ご提示の情報からのみの推測となりますが、動作しない原因はこの指定がされていないか間違っているのではないかと思われます。いかがでしょうか?

投稿2021/09/15 10:21

monmoko

総合スコア202

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

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

ameshikou

2021/09/21 11:05

回答ありがとうございます! オブジェクトの指定はされていたので、もう一度よく確認してみたところ、なぜかカメラの視界よりも後ろ、それもかなり離れた位置に生成されていたため、確認することができなかった状態でした。 生成させる位置の調整が、うまくいってなかったようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問