サーチ…
構文
- void Transform.Translate(Vector3 translation、Space relativeTo = Space.Self)
- void transformTranslate(float x、float y、float z、Space relativeTo = Space.Self)
- void Transform.Rotate(Vector3 eulerAngles、Space relativeTo = Space.Self)
- void Transform.Rotate(float xAngle、float yAngle、float zAngle、Space relativeTo = Space.Self)
- void Transform.Rotate(Vector3軸、浮動角度、Space relativeTo = Space.Self)
- void Transform.RotateAround(ベクトル3点、ベクトル3軸、浮き角度)
- void Transform.LookAt(Transform target、Vector3 worldUp = Vector3.up)
- void Transform.LookAt(Vector3 worldPosition、Vector3 worldUp = Vector3.up)
概要
トランスフォームは、オブジェクト(親、子、位置、回転、位取りなど)のオブジェクトの大半を保持します。また、これらのプロパティのそれぞれを変更する機能も備えています。すべてのGameObjectにはTransformがあります。
オブジェクトの平行移動(移動)
// Move an object 10 units in the positive x direction
transform.Translate(10, 0, 0);
// translating with a vector3
vector3 distanceToMove = new Vector3(5, 2, 0);
transform.Translate(distanceToMove);
オブジェクトの回転
// Rotate an object 45 degrees about the Y axis
transform.Rotate(0, 45, 0);
// Rotates an object about the axis passing through point (in world coordinates) by angle in degrees
transform.RotateAround(point, axis, angle);
// Rotates on it's place, on the Y axis, with 90 degrees per second
transform.RotateAround(Vector3.zero, Vector3.up, 90 * Time.deltaTime);
// Rotates an object to make it's forward vector point towards the other object
transform.LookAt(otherTransform);
// Rotates an object to make it's forward vector point towards the given position (in world coordinates)
transform.LookAt(new Vector3(10, 5, 0));
より多くの情報と例はUnityドキュメンテーションで見ることができます 。
また、ゲームで剛体を使用している場合は、剛体にisKinematic == true
がisKinematic == true
ていない限り、変換を直接操作しないでください。そのような場合は、剛体に直接作用するAddForceや他の同様のメソッドを使用します。
子育てと子供
Unityは、プロジェクトを整理しておくために、階層と連携します。エディタを使用してオブジェクトを階層内の場所に割り当てることはできますが、コードで行うこともできます。
子育て
オブジェクトの親を次のメソッドで設定することができます
var other = GetOtherGameObject();
other.transform.SetParent( transform );
other.transform.SetParent( transform, worldPositionStays );
トランスフォームの親を設定すると、オブジェクトの位置をワールド位置に保ちます。 worldPositionStaysパラメーターにfalseを渡して、この相対位置を相対的に指定することができます。
次のメソッドを使用して、オブジェクトが別のトランスフォームの子であるかどうかを確認することもできます
other.transform.IsChildOf( transform );
子供を得る
オブジェクトはお互いを親として扱うことができるので、階層内の子も見つけることができます。これを行う最も簡単な方法は、次の方法を使用することです
transform.Find( "other" );
transform.FindChild( "other" );
注:FindChild呼び出しは、フードの下で検索します。
さらに階層の下にある子を検索することもできます。これを行うには、「/」を追加してレベルを深く指定します。
transform.Find( "other/another" );
transform.FindChild( "other/another" );
子をフェッチするもう1つの方法は、GetChild
transform.GetChild( index );
GetChildはインデックスとして整数を必要とします。これは合計子カウントよりも小さくなければなりません
int count = transform.childCount;
兄弟インデックスの変更
GameObjectの子の順序を変更することができます。これを行うと、子の描画順序を定義できます(同じZレベルと同じソート順であると仮定します)。
other.transform.SetSiblingIndex( index );
次のメソッドを使用して、兄弟インデックスを最初または最後に素早く設定することもできます
other.transform.SetAsFirstSibling();
other.transform.SetAsLastSibling();
すべての子供を預ける
トランスフォームのすべての子を解放したい場合、これを行うことができます:
foreach(Transform child in transform)
{
child.parent = null;
}
また、Unityはこの目的のための方法を提供します:
transform.DetachChildren();
基本的に、 DetachChildren()
とDetachChildren()
両方は、最初の深さの子の親をnullに設定します。つまり、親を持たないことになります。
(最初の深さの子:変換の子である変換)