Unityのtransformを使ってオブジェクトの座標や回転を操作する

19/02/03 15:18:11     19/02/17 20:01:39

Unityのtransform

Unityはゲーム用のプラットフォームですが、業務システムとゲームの最大の違いはグラフィックの動きと言っても過言ではありません。もちろん業務システムにはゲームにはない内部の複雑な処理があったり、逆にゲームにはグラフィックだけでなくサウンドなどもあります。

しかし、誰が見ても明らかに異なる部分はグラフィックで、UnityはそのグラフィックをGUIで実装できるプラットフォームです。そしてグラフィックのなかのオブジェクトを自由に動かすことのできるクラスがtransformです。

このページでは、transform とは何かというところから、具体的な使用方法まで解説していきます。

transformとは

transformとは、オブジェクトの座標を保持しているクラスです。つまり、transformを操作することでオブジェクトを動かすことができます。ゲームのなかでは自分の操作しているキャラクターも敵キャラもステージも動いているので、transformの役割が大きいことがわかります。

そしてゲーム内のすべてのオブジェクトはtransformを保持しており、そのtransformのなかには位置、回転、スケール、といった情報が格納されています。さらに、各オブジェクトのtransform同士が親子関係を持つことも可能です。

たとえば、自分の操作しているキャラクターを動かすと、それに連動して敵キャラクターを動かすようなことも可能です。他には、主人公がアイテムを手に持っているときなどもオブジェクトが関連づいています。

今パッと思いついたものだとあるゲームでは勇者である主人公が人に家に入ってツボを投げて割ってなかから薬草を手に入れたりしますが、ツボを投げて割る際にはオブジェクト同士が関連づいています。

transformの操作方法

transformの概要は上記の通りですが、具体的にどのように操作していけば良いのでしょう。オブジェクトを操作するためのツールはいくつか用意されているのですが、細かいツール名等はまた操作する際に見ていただければ良いかと思います。重要なのは、どのような操作方法が良いされているのかということです。大きく分けると以下の三種類に分けられるでしょう。

  • マウスでのGUI操作
  • ツールでの数値入力
  • ソースコードを書き換える

以上の三つになります。

まずマウスで動かす方法ですが、これはそのままの意味です。オブジェクトを画面に表示して、これをマウスでドラッグしながら動かして設定していきます。

次に、複数のツールから数値を入力して座標や回転を決めていくことができます。この二つの操作方法に関しては、深く考えずともUnityをいじっていれば直感的に慣れてくるかと思います。

問題は、ソースコードをを書き換える方法でしょう。GUIやツールからの数値書き換えでもある程度のオブジェクトの動きを操作できますが、やはり細かい設定は難しいです。どうしてもオブジェクトが単純な動きになってしまうため、自分の思い通りに動かそうと思うとソースコードを書き換える必要が出てきます。

transformを書き換える

transformを書き換えるためには、まずオブジェクトのtransformを取得する必要があります。transformを取得するサンプルコードは以下です。

public class MainCharacter : MonoBehaviour {
    void Update () {

        Transform myTransform1 = this.gameObject.GetComponent<Transform> ();

        // 省略して以下のように取得することもできます
        Transform myTransform2 = this.transform;
    }
}

これで現在対象としてるtransformを取得することができるのですが、今はとりあえずイメージとして掴んでおいてください。また、上で説明した親子関係を持たせる場合のサンプルコードは以下です。

public class MainCharacter : MonoBehaviour
{
    GameObject obj; // 親にしたいオブジェクトを入れておく

    void Update () {
        // transformを取得
        Transform myTransform = this.transform;

        // objを親として設定
        myTransform.parent = obj.transform;
    }
}

親にしたいオブジェクトを設定し、現在のtransformを取得し、現在のtransformに対して親となるtransformはこれですよ、と設定していることがなんとなく流れからわかるかと思います。

今のところこの流れをなんとなく把握しておけばOKです。そのまま書いても動きますし、クラス内でどのような処理が掛かれているのかトレースしても良いでしょう。また各クラスについて細かく解説されているものもネット上で見つかります。

座標の取得

座標を取得するサンプルコードは以下です。

public class MainCharacter : MonoBehaviour {
    void Update() {

        // transformを取得
        Transform myTransform = this.transform;

        // ワールド座標を基準に、座標を取得
        Vector3 worldPos = myTransform.position;
        worldPos.x; //
        worldPos.y; //
        worldPos.z; //

        // ローカル座標を基準に、座標を取得
        Vector3 localPos = myTransform.localPosition;
        localPos.x; //
        localPos.y; //
        localPos.z; //
    }
}

ワールド座標とは三次元の位置を指す座標で、ローカル座標は親に対する三次元座標です。この違いについても頭の片隅に入れておいてください。

回転角度の取得

public class MainCharacter : MonoBehaviour {
    void Update () {
        // transformを取得
        Transform myTransform = this.transform;

        // ワールド座標を基準に、回転を取得
        Vector3 worldAngle = myTransform.eulerAngles;
        worldAngle.x; //
        worldAngle.y; //
        worldAngle.z; //

        // ローカル座標を基準に、回転を取得
        Vector3 localAngle = myTransform.localEulerAngles;
        localAngle.x;
        localAngle.y;
        localAngle.z;
    }
}

角度取得のメソッドがeulerAnglesとlocalEulerAnglesです。

まとめ

以上、transformについて解説してきました。

GUI操作はもちろん直感的にできますが、ソースコードの編集についても表面的には簡単です。座標や回転の操作コードは決まっているため、深く考えずにコピペして編集できるからです。

Unityの勉強方法としては、情報を得たらなるべく実際に動かしてみるのがおすすめです。クラスの役割や内部処理を詳しく見ることも重要かもしれませんが、完璧に理解しようとするときりがありません。

なので、調べたことはすぐに実践し、経験を積み、それと同時並行で情報収集していくと良いかと思います。そうすることで、手を動かした実戦経験と知識を同時に得ることができます。

【Unity関連記事】
▼Unityの基礎編
・ 【unityのフリーランス求人・案件情報】エンジニア需要や開発単価、未経験でもいける?
・ 【unity入門】ゲーム開発だけじゃない、Unityで出来ること

▼Unityの外部アセット、リソース編
・ UnityでMMDモデルを自由自在に動かしてみよう!
・ Unity adsを使って簡単に広告を導入しよう
・ Unityのアセットストアの上手な使い方
・ Unityで作られているARアプリをまとめてみました

▼Unityのコンポーネント編
・ Unityのrigidbodyを使って物理演算を導入してみよう
コードを使わずにUnityでキャラ追従のカメラを作る方法
・ Unityで簡単にアニメーションを作成する方法をまとめました
・ Unityでオブジェクトを回転させる方法をわかりやすくまとめました
・ (この記事)Unityのtransformを使ってオブジェクトの座標や回転を操作する
・ Unityのアニメーターを簡単に作成する方法まとめ
・ UnityのShaderの解説と使い方まとめました
・ Unityで「当たり判定」(衝突判定)を付ける方法
・ Unityのgetcomponentの上手な使い方と使用時の注意点まとめ
・ Unityでキャラの移動を制御する方法まとめ
Unityのraycastを使って出来ることをまとめました

▼Unityのデフォルト機能、ゲーム製作編
blenderで作ったオブジェクトをUnityで組み込んでみよう
・ Unityのコルーチンとは?使い方をまとめました
Unityで作られているRPGゲームを作るための6つのステップ
・ Unityのパーティクルを使って演出できるエフェクト例
・ UnityでのUIデザインの基礎をまとめてみました
Unityのcloud buildの便利な点をまとめました
・ Unityを使って半日でFPSゲームを作ってみよう

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する