2016-11-21 2 views
1

階層ではキューブを持っていますが、これをUnitに変更しました。 子供の中に空のGameObjectがエレベーターとして名前が変更されました。 エレベーターの子どもとして、私はキューブをプラットフォームとし、プラットフォームの子として名前を変更しました。別のキューブで名前をOnTop Detectorに変更しました。マウスの空のGameObjectやCubeを使って回転させる方法と、その子を一緒に使う方法はありますか?

エレベーターの子供として、私はPlatform1(立方体)とボタン(カプセル)も持っています。

これは、それを示すスクリーンショットである:

Screenshot

は、今私がオリジナルで、一般的にやりたいことエレベーターを回転させることが私のスクリプトを使用しているし、すべてが、それは、マウスを使用してチャイルズのチャイルズとチャイルズです。

私は、エレベーターの各チャイルドにスクリプトを添付すれば、この特定のオブジェクトを問題なく回転させることができます。しかし、私はエレベーターを回転させたいすべてのユニットを1つのユニットとして回転させたいと思っています。

問題は、エレベーターに2つのアニメーションクリップがあるアニメーションコンポーネントがあることです。そしてアニメーションは回転を無効にします。

だから、私がしようとしたのはユニットと呼ばれる別のキューブを追加してそれにスクリプトを添付して、すべてを回転させることです。問題は、シーン内のオブジェクトが以前と同じようにスケールされないことです。

また、Unity(Cube)が表示されず、プレーヤーを移動すると衝突しないようにしていますが、すべての子オブジェクトを回転させるために使用したいと思っています。

これは私がユニット(キューブ)を追加する前に、それがどのように見えるかです:

Screenshot1

しかし、私はエレベーターをドラッグしてユニットの子作りいったんシーン全体が最初のようにめちゃくちゃ取得スクリーンショット。

これは私のスクリプトです:

using UnityEngine; 
using System.Collections; 

public class ObjectRotate : MonoBehaviour { 

    public float multiplier = 10f; 

    void OnMouseDrag() 
    { 
     transform.Rotate(Input.GetAxis("Mouse Y") * multiplier, -Input.GetAxis("Mouse X") * multiplier, 0, Space.World); 
    } 
} 

スクリプトは、個々のオブジェクトを回転させるように正常に動作しているが、1つの単位として、それらすべてを回転させます。

更新

彼らは最初のスクリーンショットintheのような以前のようにスケールされていないプラットフォームのチャイルズされるボタンやプラットフォーム1を移動した後:

Screenshot2

答えて

0

あなたが使用してそれぞれの子の子供たちを見つける必要がありますループ

void OnMouseDrag() 
{ 
    RotateChildren(transform); 
    transform.Rotate(Input.GetAxis("Mouse Y") * multiplier, -Input.GetAxis("Mouse X") * multiplier, 0, Space.World); 
} 

private void RotateChildren(Transform transform) 
{ 
    foreach(Transform child in transform) 
    { 
     if(child.childCount > 0) 
     { 
      RotateChildren(child); 
     } 
     transform.Rotate(Input.GetAxis("Mouse Y") * multiplier, -Input.GetAxis("Mouse X") * multiplier, 0, Space.World); 
    } 
} 

この例では、指定された数に複数の子がある場合、このメソッドは自身を呼び出します子オブジェクト。

+0

これはうまくいくようですが、いくつかの問題があります。最初に動作させるには、Platform1とButtonをPlatformの子に移動しました。それから私はプラットフォームにスクリプトを添付しました。今私は2つの問題があります:1.私は、プラットフォーム1とボタンをプラットフォームの子にするために移動したとき、彼らは前と同じようにシーンで拡大縮小されません。 2。どうすればいいですか?私は、マウスを使って、例えばButtonやPlatform1を回転させ、それらをすべて回転させるでしょうか? –

+0

私はスケーリングについての私の最初の質問のための今のようにどのように見えるかを示す別のスクリーンショットを私の質問に追加しました。だから一般的に、すべての子どものためのループのアイデアは動作していますが、私はボタンやプラットフォーム1からマウスだけでなく、プラットフォームからそれを回転させたいのですが? –

+0

foreachを 'foreach(transform in var)'に変更してから、子と何かをする前に 'if(child is Button)'を使い、 'Button child) 'とし、' if(子が変換する) 'を'(transform)子 'としてキャストする –

関連する問題