Skip to main content

各種の変換(トランスフォーム)

 今まで、物体の移動(位置)、回転と拡大縮小をUnityの「transform」コンポーネントを使ってやってきました。

image.png

 実は裏側でなにが行われているのか、学んでいきましょう。

移動(位置)

 一番簡単なのは、「移動」(位置)である。基本的に、メッシュの各頂点を移動させたい量を足すだけで実現できる。学んできた「ベクトルの足し算」を使えば、すぐ実装できる:

image.png

 ここで「v'」は移動した頂点で、「v」は元の頂点で、「t」は移動ベクトルである。

練習

MyTransform のスクリプトを作成し、MyCube で作った立方体を移動する。

  • 頂点の位置を変えないとけいないので、MyCube の頂点を読み込む(GetVertices)、書き込むメソッド(SetVertices)を作成してください。
  • MyTransform で MyCubeの参照を GetComponent で取得し、頂点を変換する。
    • 変換する前の頂点を保管しておきましょう! (そうしないと、戻せなくなります~)
    • 移動量(位置)を Inspector で変えられるようにしてください。 
MyCube の GetVertices と SetVertices
// メッシュの頂点を返す
public Vector3[] GetVertices()
{
    return mesh.vertices;
}

// メッシュの頂点を設定
public void SetVertices(Vector3[] vertices)
{
    mesh.vertices = vertices;
    mesh.RecalculateNormals(); // 方法ベクトル再計算
}
MyTransform スクリプト
// メッシュの頂点を返す
public Vector3[] GetVertices()
{
    return mesh.vertices;
}

// メッシュの頂点を設定
public void SetVertices(Vector3[] vertices)
{
    mesh.vertices = vertices;
    mesh.RecalculateNormals(); // 方法ベクトル再計算
}