はじめに
オブジェクトを下のようにカーソルのまわりを回転させる方法をまとめた記事が意外と少なかったので、メモ的に残しておきます。RotateAround()
を使う方法もあるとは思いますが、今回は簡単な数学を使った方法です。
プログラム解説
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cycleScriot : MonoBehaviour
{
Vector3 mousePos, worldPos;
public float angle = 0.0f;
public float radius = 2.0f;
// Update is called once per frame
void Update()
{
//座標取ってくる部分
mousePos = Input.mousePosition;
worldPos = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, 10f));
//回転させる部分
transform.position = CycleAround(worldPos, angle, radius);
angle -= 10.0f;
}
static Vector3 CycleAround(Vector3 centerPos, float angle, float radius)
{
Vector3 v = centerPos;
float a = angle * Mathf.Deg2Rad;
float x = radius * Mathf.Cos(a) + v.x;
float y = radius * Mathf.Sin(a) + v.y;
float z = 0.0f;
return new Vector3(x, y, z);
}
}
マウスカーソルから座標を取ってくる部分は、こちらの記事を参考にしました。
回転させる部分は、CycleAround()
です。
この関数の式は、高校数学の三角比あたりを思い出していただければいいのですが、半径と角度がわかっている場合、そこの座標は三角比を使って表現することができます。こんな感じで。
つまり、角度angle
と半径radius
さえ与えてあげれば円形の運動をさせてあげることができます。
今回は、回転し続ける様にしたいので、Update()
内でCycleAround()
を呼び出した後、angle
を変化させて回転する様にしています。z軸に関しては特にこだわりはないので0を代入しています。あとはそれぞれ計算した座標を回転させたいオブジェクトに代入してあげるだけで回転させることができます。ヤッタネ!
高校で学んだ数学がゲーム開発にも活きたと感動した瞬間でした。