前提・実現したいこと
自由にカメラが回転し、対象となるオブジェクトを任意の角度で確認できるようにしたい。
発生している問題・エラーメッセージ
ある対象の物体を中心に、カメラを球面座標で動かしたいのですが、Targetとなるオブジェクトにより挙動が異なってしまい困っています。
上手くいく例としてはUnity上で作成したCubeやPlaneをTargetとすると、Positionに関係なくオブジェクト中心にカメラは回転してくれます。
いかない例としては、WBboneという自分で作成した.objの拡張子のオブジェクトを対象にすると、対象物体よりも随分と上を回転してしまいます。
カメラの動きのスクリプトは球面座標によるカメラの操作のTPSを参考にし、"float distance = 1f"に変更しただけとなります。
このスクリプトを画像のようにObservationCameraObjectという空のオブジェクトに入れています。
Cameraとの親子関係も画像の通りとなります。
CameraFixObject,CameraともにPotion、Rotationの設定は0です。
ObservaionCameraObjectのTargetに対象としたいオブジェクトを入れています。
このTargetのオブジェクトによって挙動が思い通りにいかず困っています。
WBbone、RFemともに元はCTのDICOMデータであり、3D Slicerというソフトを使用して作成しています。
Sceneに配置した際、サイズがとても大きく、Scaleを0.01にしてこのサイズ感です。
(赤いCubeのスケールが1なので元がいかに大きいことか…)
このサイズが大きいことが悪影響を及ぼしているのでしょうか。
Unity超初心者になります。教えて頂けますと大変助かります。
ーーー加筆ーーー
アドバイスを頂いたスクリプトを元のスクリプトに以下のように書き加えました。
C#
1 public Transform target; 2 public float spinSpeed = 0.3f; 3 float distance = 15f; 4 5 Vector3 nowPos; 6 public Vector2 mouse = Vector2.zero; 7 Vector3 offset = new Vector3(0.0f, 10f, 0.0f); 8 9 void Start() 10 { 11 // 初期位置の取得 12 nowPos = transform.position; 13 } 14 15 void Update() 16 { 17 // マウスの移動の取得 18 if (Input.GetMouseButton(0)) 19 { 20 mouse += new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * Time.deltaTime * spinSpeed; 21 } 22 23 mouse.y = Mathf.Clamp(mouse.y, -0.3f + 0.5f, 0.3f + 0.5f); 24 Vector3 lookAtPos = target.transform.position + offset; 25 26 Vector3 targetPos = new Vector3( 27 lookAtPos.x = distance * Mathf.Sin(mouse.y * Mathf.PI) * Mathf.Cos(mouse.x * Mathf.PI), 28 lookAtPos.y = distance * Mathf.Cos(mouse.y * Mathf.PI), 29 lookAtPos.z = distance * Mathf.Sin(mouse.y * Mathf.PI) * Mathf.Sin(mouse.x * Mathf.PI)); 30 31 transform.position = targetPos; 32 transform.LookAt(lookAtPos); 33 34 } 35}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/21 23:45
2018/03/21 23:48