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

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

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

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

Unity

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

Q&A

解決済

1回答

25364閲覧

Unityで親オブジェクトが回転しても子オブジェクトは回転しない方法

agen44

総合スコア26

C#

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

Unity

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

0グッド

0クリップ

投稿2016/12/16 15:20

編集2016/12/17 11:27

###前提・実現したいこと
まず、Unityでカメラが上下運動(浮いたり落ちたり)するシステムを作っています。
そして、このカメラを親に、その少し下の座標に子オブジェクト(パーティクル)を作っています。
カメラにMouseLookスクリプトを付けて、再生時にカーソルの位置で視点が変わるようにしているのですが、
そのせいか、カメラの視点が変わる(回転?)と、子オブジェクトも回転してしまうのか、
下にある子オブジェクトが見えなくなってしまいます。

**上下運動には連動しても、回転はしない(常にカメラの下方)方法**はないでしょうか。

どうぞよろしくお願いします。

また、MouseLookスクリプトはこのようになっています。

C#

1using UnityEngine; 2using System.Collections; 3 4[AddComponentMenu("Camera-Control/Mouse Look")] 5public class MouseLook : MonoBehaviour { 6 7 public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } 8 public RotationAxes axes = RotationAxes.MouseXAndY; 9 public float sensitivityX = 15F; 10 public float sensitivityY = 15F; 11 12 public float minimumX = -360F; 13 public float maximumX = 360F; 14 15 public float minimumY = -60F; 16 public float maximumY = 60F; 17 18 float rotationY = 0F; 19 20 void Update () 21 { 22 if (axes == RotationAxes.MouseXAndY) 23 { 24 float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX; 25 26 rotationY += Input.GetAxis("Mouse Y") * sensitivityY; 27 rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); 28 29 transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0); 30 } 31 else if (axes == RotationAxes.MouseX) 32 { 33 transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0); 34 } 35 else 36 { 37 rotationY += Input.GetAxis("Mouse Y") * sensitivityY; 38 rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); 39 40 transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0); 41 } 42 } 43 44 void Start () 45 { 46 // Make the rigid body not change rotation 47 if (GetComponent<Rigidbody>()) 48 GetComponent<Rigidbody>().freezeRotation = true; 49 } 50}

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

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

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

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

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

guest

回答1

0

ベストアンサー

原則として子オブジェクトは親オブジェクトの回転の影響を受けるので、対処法としては
1.親オブジェクトの回転量を判定し、それを打ち消すような位置に再度回転(移動)する
2.親子関係にはせず、カメラの位置=パーティクルの位置となるように、スクリプトで追従する
3.パーティクルオブジェクトもキー入力を受け取るようにする(カメラの位置を無視して移動する)
のいずれかになるかと思います。

多分今回の場合は2番が簡単で良いかと。
具体的なスクリプトはこちらの質問の回答をご覧ください。

投稿2016/12/19 08:13

sakura_hana

総合スコア11425

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

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

agen44

2016/12/22 11:46

ありがとうございます! そのように対処法がいくつかあることも思いつかなかったので助かりました。 また多重投稿でお手間を取らせてしまい申しわけありません。 ご丁寧に本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問