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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity3D

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

Unity

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

Q&A

解決済

1回答

1058閲覧

FOVE0向けのプログラムをUnityで作成。カメラの回転を固定するには?

ehuronkon35

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2018/08/03 02:29

FOVE0向けのプログラムをUnityで作成。カメラの回転を固定するには?

今現在Unityを用いてFOVE0向けのプログラムを作成しています。
FOVE0のカメラはMainCameraではなく、Fove Rigというものを使用しています。
![イメージ説明
そしてその子オブジェクトとしてFove Interfaceが使用されています。
イメージ説明
カメラ内の映像を固定したいので位置固定はできました。
回転を固定する方法があれば教えていただきたいです。

自分はUnityでの開発はこれが初めてなんで、できれば詳しく教えていただけると助かります。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Unity - Unityを3Dで作成する際にカメラの位置と回転を固定することはできますか?(137942)|teratail
この質問と同様だと思うのですが、解決しなかったのですか?

Fove Rigに付いているCameraControllerが怪しそうなので中を見ると参考になるかもしれません。
また、Fove InterfaceにあるClient uses...Orientationをオフにするとどうなりますか?

以下のページもご覧ください。
質問するときのヒント|teratail(テラテイル)

投稿2018/08/03 02:52

編集2018/08/03 02:53
sakura_hana

総合スコア11427

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

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

ehuronkon35

2018/08/03 03:27

CameraControllerはカメラの位置固定をするために描いたものです using UnityEngine; using UnityEngine.VR; using System.Collections; public class CameraController : MonoBehaviour { void Update() { // TODO: ここで固定したい位置があれば指定しておく Vector3 basePos = Vector3.zero; // VR.InputTracking から hmd の位置を取得 Vector3 trackingPos = UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.CenterEye); // CameraController 自体の rotation が // zero でなければ rotation を掛ける // trackingPosition = trackingPos * transform.rotation; // 固定したい位置から hmd の位置を // 差し引いて実質 hmd の移動を無効化する transform.position = basePos - trackingPos; } } Fove InterfaceのClient use...のOrientationをオフにするとUnity上では画面が固定されましたが、HMDを使って見てみると画面が動いてしまいます。 ずっと同じところを見るプログラムにするにはどうすればいいのかまだ分かりません。
sakura_hana

2018/08/06 04:06

上記のコードだと回転を制御するソースが入っていませんので当然回転します。 前の質問でも上げましたが transform.rotation = Quaternion.Inverse(target.rotation); をUpdateの中に入れて、 // trackingPosition = trackingPos * transform.rotation; この行のコメントを外してみてください。
ehuronkon35

2018/08/06 08:05

何度もすいません。 その方法で試したのですがエラーが発生して動作しませんでした。 targetとtrackingPosition = trackingPos * transform.rotation;の行すべてに赤線でマークされました。
sakura_hana

2018/08/06 09:01

とりあえずコピペで動くようにしました。 ただ実働確認してない(出来ない)ので適宜微調整してください。 「XR.InputTracking.GetLocalRotationが正しい回転を取れているか」 「XRNode.CenterEyeが指しているモノが本当にこのスクリプトと親子関係を作っているのか」 辺りが怪しいです。(移動側が動かないようになっているなら大丈夫だとは思いますが) void Update() { // TODO: ここで固定したい位置があれば指定しておく Vector3 basePos = Vector3.zero; // VR.InputTracking から hmd の位置を取得 Vector3 trackingPos = UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.CenterEye); //カメラの角度と反対方向へ傾ける transform.rotation = transform.rotation * Quaternion.Inverse ( //ローカル回転をワールド回転にしている transform.rotation * UnityEngine.XR.InputTracking.GetLocalRotation(UnityEngine.XR.XRNode.CenterEye) ); // CameraController 自体のrotationを位置に反映 trackingPos = transform.rotation * trackingPos; // 固定したい位置から hmd の位置を // 差し引いて実質 hmd の移動を無効化する transform.position = basePos - trackingPos; }
ehuronkon35

2018/08/07 02:09

丁寧にありがとうございます! 早速実装してみました。エラーはありませんでした。 しかしHMDを通して映像を見るとやはり画面が固定されることはありませんでした。 「XR.InputTracking.GetLocalRotationが正しい回転を取れているか」 「XRNode.CenterEyeが指しているモノが本当にこのスクリプトと親子関係を作っているのか」 この部分がわからないのが原因かもしれません。
sakura_hana

2018/08/07 05:57 編集

一応確認ですが、位置は固定出来ているんですよね? だとすれば普通は、UnityEngine.XR.InputTracking.GetLocalRotationも正しく取れると思います。 考えられるとしたら以下のようなケース。 ・VOSE0は特殊な仕様で、InputTracking.GetLocalPositionは正しく取れるがInputTracking.GetLocalRotationは正しく取れない(画面上では回転しているくせに常に0を返して来るとか) ・Unityのオブジェクト的には固定出来ているが、VOSE0が画面を上書きしているので固定出来ていないように見える とりあえずOnGUIかuGUIを使って、InputTracking.GetLocalRotationやtransform.rotationの値を画面上に表示させつつ、何が起こっているのか把握するのか一番だと思います。 法則性が分かればそれに合わせてプログラムを直せばいいだけなので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問