UnityのTransform
unityhttps://docs.unity3d.com/jp/current/ScriptReference/Transform.html
オブジェクトの位置、スケール、回転を保持する。親子関係を持つ。
Position
positionがワールド空間の、 localPosition が親から見た相対的なローカル空間の位置。localPositionの1unitはscaleに依存する。
transform.position = new Vector3(0, 0, 0);
transform.localPosition = new Vector3(0, 0, 0);
徐々に移動するにはTranslate()を使う。
最後の引数はデフォルトでSpace.Selfになっていて、Space.Worldを指定するとワールド座標を基準にする。
Time.deltaTimeは最後のフレームを完了するのにかかった秒数。 なのでフレームレートにかかわらず同じ速度で移動させることができる。
transform.Translate(0, Time.deltaTime, 0, Space.World);
transform.Translate(Vector3.up * Time.deltaTime, Space.World); // 軸に沿って移動
transform.Translate(Time.deltaTime, 0, 0, Camera.main.transform); // 最後の引数のローカル座標を基準にする
transform.Translate(Time.deltaTime, 0, 0, Camera.main.transform);
Scale
localScale はローカル空間のスケール。ワールド空間のScaleはない。
transform.localScale = new Vector3(0.1f, 1f, 1f);
Rotation
ワールド空間の rotationと ローカル空間の localRoation。
UnityはQuarternion(四元数)で回転を持っている。 実際はQuarternionそのものを自分で計算することはなく、 Quaternion.LookRotation()や Quaternion.Euler()などを使う。
Vector3 relativePos;
transform.rotation = Quaternion.LookRotation(relativePos); // そのPointを向くように回転
transform.localRotation = Quaternion.Euler(0, 30, 0);
Transformを向くように回転する場合は LookAt()を使う。
Transform target;
transform.LookAt(target);
徐々に回転させるにはRotate()を使う。
最後の引数はデフォルトでSpace.Selfで、Space.Worldを指定すると回転の軸がワールドの軸になる。指定するのは角度。
transform.Rotate(0, Time.deltaTime, 0, Space.World);
transform.Rotate(Vector3.up, Time.deltaTime, Space.World);
ワールド座標のあるPointを中心として回転させる場合は RotateAround()を使う。
transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);
parent
親を指定する。
var fuga = GameObject.CreatePrimitive (PrimitiveType.Cube);
fuga.transform.parent = hoge.transform;
fuga.transform.parent = null; // detach
Find
子の名前で検索する。 FindChildもあるがドキュメントに書いてないので使わない方がよさそう。
var child = transform.Find("hoge/fuga")
if(child != null){
child.gameObject
}