teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

説明の補足

2020/12/27 13:43

投稿

inkyaman
inkyaman

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
  ####Scene understanding機能について
3
- Scene UnderstandingはHoloLens2で取得した環境メッシュデータを分析し、壁や床といったオブジェクトの位置やメッシュデータを提供する機能です。
3
+ Scene UnderstandingはHoloLens2という透過型HMD(ヘッドマウントディスプレイ)で取得した環境メッシュデータを分析し、壁や床といったオブジェクトの位置やメッシュデータを提供する機能です。
4
4
  現在自分はHoloLens2のScene Understandingの機能を使ったアプリケーションを、以下のサンプルプロジェクトを書き換えて作成しています。
5
5
  [https://github.com/sceneunderstanding-microsoft/unitysample](https://github.com/sceneunderstanding-microsoft/unitysample)
6
6
 

3

内容の修正

2020/12/27 13:43

投稿

inkyaman
inkyaman

スコア1

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  [https://qiita.com/Futo_Horio/items/2759f9ca2b892709ab66](https://qiita.com/Futo_Horio/items/2759f9ca2b892709ab66)
9
9
 
10
10
  ####Scene UnderstandingのUnityエディタ上でのデモ
11
- HoloLens2とありますが、上記サンプルプロジェクトのサンプルシーンをunity上で開き、SceneunderstandingManagerオブジェクトにアタッチされたSceneUnderstandingDataProvider.csにおけるRun On Deviceをインスペクター上でオフにすることで、予め用意されたシーンを利用してunityエディタ上でどのようなオブジェクトが表示されるのかというデモを見ることができます。
11
+ HoloLens2とありますが、上記サンプルプロジェクトのサンプルシーンをunity上で開き、SceneunderstandingManagerオブジェクトにアタッチされたSceneUnderstandingDataProvider.csにおけるRun On Deviceをインスペクター上でオフにすることで、予め用意されたシーンを利用してunityエディタ上でどのようなオブジェクトが表示されるのかというデモを見ることができます。**今回の質問は、このUnity上の実行デモにおける動作に問題が生じていることに関してのものなので、HoloLens2とは関係なしに、Unityにお詳しい方がいましたらご回答いただけたら幸いです。**
12
12
 
13
13
  ####実現したいこと
14
14
  表示される壁や床といった各オブジェクトは、SceneRootと呼ばれるオブジェクトの子オブジェクトとして設置されます(初期状態ではエディタ上のRootという名前のオブジェクトが該当する)。自分は作成するアプリケーションの関係上、ワールド座標空間におけるカメラと、SceneRootを原点とするローカル座標空間のオブジェクトの位置関係を取得する必要があったため、まずSceneRootのワールド座標の位置および傾きを取得しようと試みようとしたところ、次のような問題が生じました。

2

内容の修正

2020/12/27 13:41

投稿

inkyaman
inkyaman

スコア1

title CHANGED
File without changes
body CHANGED
@@ -2,16 +2,16 @@
2
2
  ####Scene understanding機能について
3
3
  Scene UnderstandingはHoloLens2で取得した環境メッシュデータを分析し、壁や床といったオブジェクトの位置やメッシュデータを提供する機能です。
4
4
  現在自分はHoloLens2のScene Understandingの機能を使ったアプリケーションを、以下のサンプルプロジェクトを書き換えて作成しています。
5
- https://github.com/sceneunderstanding-microsoft/unitysample
5
+ [https://github.com/sceneunderstanding-microsoft/unitysample](https://github.com/sceneunderstanding-microsoft/unitysample)
6
6
 
7
7
  また、Scene Understandingの概要・動作については以下のページを参考にしています。
8
- https://qiita.com/Futo_Horio/items/2759f9ca2b892709ab66
8
+ [https://qiita.com/Futo_Horio/items/2759f9ca2b892709ab66](https://qiita.com/Futo_Horio/items/2759f9ca2b892709ab66)
9
9
 
10
10
  ####Scene UnderstandingのUnityエディタ上でのデモ
11
- HoloLens2とありますが、上記サンプルプロジェクトのサンプルシーンを開き、SceneunderstandingManagerにアタッチされたSceneUnderstandingDataProvider.csにおけるRun On Deviceをインスペクター上でオフにすることで、予め用意されたシーンを利用してunityエディタ上でどのようなオブジェクトが表示されるのかというデモを見ることができます。
11
+ HoloLens2とありますが、上記サンプルプロジェクトのサンプルシーンをunity上で開き、SceneunderstandingManagerオブジェクトにアタッチされたSceneUnderstandingDataProvider.csにおけるRun On Deviceをインスペクター上でオフにすることで、予め用意されたシーンを利用してunityエディタ上でどのようなオブジェクトが表示されるのかというデモを見ることができます。
12
12
 
13
13
  ####実現したいこと
14
- このプロジェクトにおけSceneUnderstandingDisplayManager.csというスリプにおいて、SceneRootというオブジェクトを用意し、それをローカル座標原点として、取得したシーンからオブジェクトの位置を取得、unity内正しくオブジェクトを設置しています。自分はメイカメラある方向に壁や床の面を少しだけずらしたいと思い、ワールド座標のメインカメラSceneRootローカル座標でどの位置にあたるかを取得する必要があると思ったので、SceneRootのワールド座標を取得しようとしたところ、次のような問題が生じました。
14
+ 表示され壁や床といった各オブジェクト、SceneRootと呼ばれるオブジェクトのオブジェクトて設置されます(初期状態はエディタ上のRootという名前のオブジェクトが該当る)。自分は作成するアプリケーションの関係上、ワールド座標空間におけるカメラと、SceneRootを原点とするローカル座標空間オブジェクトの位置関係を取得する必要があったためまずSceneRootのワールド座標の位置および傾きを取得しようと試みようとしたところ、次のような問題が生じました。
15
15
 
16
16
  ### 発生している問題・エラーメッセージ
17
17
  unityエディタ上でのデモの実行中、SceneRootのインスペクターを見ると、
@@ -20,26 +20,19 @@
20
20
  Position x:0 y:0 z:0
21
21
  Rotation x:-51.415 y:40:55 z:-75.0010
22
22
 
23
- と表示されるので、これを基準にオブジェクトを配置しているのですが、オブジェクト設置直前(SceneUnderstandingDisplayManager.cs内の298行目DisplaySceneObjectクラス内)
23
+ と表示されるので、これを基準にオブジェクトを配置しているのですが、オブジェクト設置直前(SceneUnderstandingDisplayManager.cs内の298行目DisplaySceneObjectクラス内)に挿入した
24
- Debug.Log(SceneRoot.transform.position)およびDebug.Log(SceneRoot.transform.rotation)を行ったころ実行の際コンソール上で
24
+ Debug.Log(SceneRoot.transform.position)およびDebug.Log(SceneRoot.transform.rotation)によると、コンソール上で
25
25
 
26
26
  (0.0,0.0,0.0)←position
27
27
  (0.0,0.0,0.0,1.0)←rotation
28
28
 
29
- と表示されてまいました。
29
+ と表示されてした。初期移動がなことはともかく、初期回転なしという、SceneRootのインスペクター上のRotationの値とは異なる値を取得していました。
30
30
 
31
31
  ### 試したこと
32
- SceneRootを親としたCubeオブジェクトを作成したところ、実行の際はちゃんと傾いて表示されたのですが、positionおよびlocalPositionともにローカル座標のものになっていました。
32
+ SceneRootを親としたCubeオブジェクトを作成したところ、実行の際はSceneRootのインスペクターのRotationが示すように、ちゃんと傾いて表示されたのですが、positionやrotationの値はともに
33
+ (0.0,0.0,0.0)←position
34
+ (0.0,0.0,0.0,1.0)←rotation
35
+ となっていました。
33
36
 
34
- また、あらかじめエディタ画面上でCube(名前 : localcube)を作成し、DisplayManagerスクリプト上で以下のようなコードを挿入したところ、なぜか実行中はCubeがヒエラルキー内から消え、デバッグ画面にはそのまま現在のワールドカメラ座標が表示されてしまいました。おそらくSceneRootの座標が先に示した通り、Position(0,0,0,0),Rotation(0,0,0,1)で表示されているため、ワールド座標とローカル座標が全く同じのままであるからだと思います。
35
- ```C#
36
- GameObject localcube = GameObject.Find("localcube");
37
- localcube.transform.position = Camera.main.transform.position;
38
- localcube.transform.rotation = Quaternion.identity;
39
- localcube.transform.parent = SceneRoot.transform;
40
- Debug.Log(localcube.transform.localPosition);
41
- Debug.Log(localcube.transform.localRotation);
42
- ```
43
-
44
37
  ### 補足情報(FW/ツールのバージョンなど)
45
38
  Unity 2019.4.11f1 Personal

1

初心者マーク記載

2020/12/27 13:35

投稿

inkyaman
inkyaman

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  ### 前提・実現したいこと
2
- ####Scene understandingについて
2
+ ####Scene understanding機能について
3
3
  Scene UnderstandingはHoloLens2で取得した環境メッシュデータを分析し、壁や床といったオブジェクトの位置やメッシュデータを提供する機能です。
4
4
  現在自分はHoloLens2のScene Understandingの機能を使ったアプリケーションを、以下のサンプルプロジェクトを書き換えて作成しています。
5
5
  https://github.com/sceneunderstanding-microsoft/unitysample