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 の機能を使い倒して、さらに面白いゲームを作れるようになりましょう。
コメント