【Unity】LookAtとは?指定したオブジェクトの方向に回転させるメソッド

LookAtとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのLookAtメソッドってなに?」

「LookAtメソッドの使い方が知りたい!」

というお悩みの方に向けた内容となっています。

Unityでは、オブジェクトの回転処理を作る際に、LookAtメソッドが使われることがあります。

このLookAtメソッドは、特定のオブジェクトを指定して、その方向に自身の向きを回転させる処理を行うメソッドです。

例えば、プレイヤーのいる方向にカメラオブジェクトを向かせたい場合や、敵となるオブジェクトの方向に回転させたいような場合に、LookAtメソッドが使われます。

そこで、このページでは、UnityのLookAtメソッドについて、どんなメソッドなのか、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

LookAtとは?

まずは、LookAtメソッドがどういうものなのか紹介していきます。

指定したオブジェクトのいる方向に回転させるメソッド

LookAtメソッドは、指定したオブジェクトがいる方向に、向きを回転させる処理を行うメソッドです。

もう少し具体的に言うと、自身のオブジェクトのZ軸が正となる向き(前方)を、指定したオブジェクトがいる方向に回転させるTransformコンポーネントで定義されているメソッドです。

例えば、移動するプレイヤーの方向を常に見るようなキャラクターを作る場合や、カメラのオブジェクトの向きを特定のオブジェクトがいる方向に回転させるといった場合に、このLookAtメソッドで処理を作ることができます。

Quaternion.LookRotationとの違い

LookAtメソッドと同じようなメソッドとして、Quaternionで定義されているLookRotationというメソッドがあります。

このLookRotationも、指定したオブジェクトの方向に回転させる場合に使いますが、回転処理自体を行うものではなく、その回転のQuaternionを作成してくれるメソッドです。

実際に、オブジェクトの向きを回転させるには、そのQuaternionを自身の回転(rotation)にセットして使うことになります。

LookAtメソッドよりもひと手間必要になりますが、Quaternionを使うことになるので、滑らかに回転させたいような場合や、特定の軸だけを回転させるといったカスタマイズを行うことができるようになります。

例えば、LookAtメソッドの場合は、以下のようにパッと切り替わるように回転処理が起こりますが、

LookRotationメソッドの場合は、これを滑らかに回転させる処理にカスタマイズすることができます。

そのため、どちらも同じようなメソッドですが、

  • オブジェクトの方向に回転させるだけなら ⇒ LookAt
  • オブジェクトの方向への回転をカスタマイズするなら ⇒ LookRotation

と、上記のような使い分けをすることができます。

LookAtの使い方

ここからは、LookAtメソッドの使い方について紹介していきます。

引数で目標とするオブジェクトを指定する

LookAtメソッドを使用する際は、以下のように記述することで、オブジェクトの向きを回転させることができます。

Transform.LookAt(target, worldUp);

target:目標とするオブジェクト(Transform型)
worldUp:上方向のベクトル(Vector3型)

第1引数に、目標とするオブジェクトをTransform型で指定します。

ここで指定したオブジェクトの方向に対して、自身のオブジェクトのZ軸の向きを合わせるように回転します。

第2引数には、回転させた際の上方向のベクトルを指定し、省略した場合は「Vector3.up」が指定されます。

Z軸の向きがオブジェクトの方向となるので、この第2引数ではY軸の向きを指定していることになります。

プレイヤーのいる方向にカメラを回転させる処理

ここでは、実際にUnity上でLookAtメソッドを使った処理を作っていきます。

以下のように、プレイヤーとなるオブジェクトを配置して、移動するプレイヤーの方向にカメラが回転するという処理を作ってみます。

カメラオブジェクトに対して、以下のスクリプトをアタッチしておきます。

using UnityEngine;

public class Test : MonoBehaviour
{
    public Transform player;    // プレイヤーのTransformを取得する変数

    void Update()
    {
        transform.LookAt(player);   // プレイヤーの向きに回転する処理
    }
}

5行目でプレイヤーのTransformを取得する変数をpublicを付けて宣言して、インスペクターウィンドウからプレイヤーを指定しておきます。

そして、9行目でLookAtメソッドを使って、引数に先ほどの変数を指定してあげます。

これでゲームを実行してみると、

上記のように、プレイヤーが移動するとカメラの向きが変わるようになりました。

まとめ

このページでは、UnityのLookAtメソッドについて、どんなメソッドなのか、また使い方までをまとめていきましたが、いかがでしたでしょうか?

LookAtメソッドとは、指定したオブジェクトの方向に回転させる処理を行うTransformコンポーネントで定義されているメソッドです。

例えば、プレイヤーの移動に合わせてカメラの向きを変えたり、特定のオブジェクトを常に見続けるといった処理を作ることができます。

同じような処理を行うメソッドにLookRotationがありますが、LookAtメソッドの方が回転処理まで行ってくれるので、ただその方向を向かせるだけであれば、LookAtの方がコードも簡単に書くことができます。

最後までお読みいただきまして、ありがとうございました!

コメント