【Unity】ScratchのブロックをUnityで再現しよう~動き④~

マウスのポインターへ向ける ScratchからUnityへ
マウスのポインターへ向ける

Scratch のブロックを Unity で再現するときに、どのような方法があるのかを紹介していきます。

ScratchのブロックをUnityで再現しよう

マウスのポインターへ向ける

Scratch の「マウスのポインターへ向ける」ブロックを Unity で作ってみましょう。

マウスのポインターへ向ける
マウスのポインターへ向ける

準備

「動き③」と同様に三角形を配置してMoveTriangleスクリプトを用意します。

90度に向ける

それでは、MoveTriangleコンポーネントに C#プログラムを記述して、90度に向けてみましょう。
プログラムを作成後、画面上部の再生ボタンを押すと、三角形が90度に向きます。

using UnityEngine;

public class MoveTriangle : MonoBehaviour {
    void Start() {
        transform.rotation = Quaternion.Euler(0f, 0f, 90f);
    }
}

マウスのポインターへ向ける

次は、マウスポインターの方に向けるようにしましょう。

using UnityEngine;

public class MoveTriangle : MonoBehaviour {
    private void Update() {
        // マウスのワールド座標を取得する.
        Vector3 vecMouseWorldPos = GetMouseWorldPos();
        // 三角形からマウスのワールド座標を見た方向ベクトルを計算する.
        Vector3 vecDir = (vecMouseWorldPos - transform.position).normalized;
        // 三角形の向きをマウスのワールド座標にする.
        transform.rotation = Quaternion.FromToRotation(Vector3.up, vecDir);
    }

    /// <summary>
    /// マウスのワールド座標を取得する.
    /// </summary>
    /// <returns>マウスのワールド座標</returns>
    private Vector3 GetMouseWorldPos() {
        // マウスのスクリーン座標.
        Vector3 vecMouseScreenPos = Input.mousePosition;
        // カメラから見た三角形のZ座標をマウスのスクリーン座標に設定する.
        // 三角形と同じ平面上にマウスの座標を持ってくる.
        vecMouseScreenPos.z = transform.position.z - Camera.main.transform.position.z;
        // マウスのスクリーン座標からワールド座標に変換する.
        Vector3 vecMouseWorldPos = Camera.main.ScreenToWorldPoint(vecMouseScreenPos);
        return vecMouseWorldPos;
    }
}

プログラムのちょこっと解説

今回は「マウスのポインターへ向ける」ために、クオータニオンを使ってみました。
クオータニオンは3Dでの回転を表しますが、2Dでも同様に使うことができます。
FromToRotaion関数以外にも便利な関数が用意されていますので、使えるようにしておきましょう。

Quaternion - Unity スクリプトリファレンス
クォータニオンは回転を表すのに使用されます。

まとめ

Scratch の「マウスのポインターへ向ける」ブロックと同じ動きを Unityで作ってみました。
移動と回転ができれば、さまざまな動きをさせることができるようになります。

Unity の機能を使い倒して、さらに面白いゲームを作れるようになりましょう。

コメント

タイトルとURLをコピーしました