1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

オブジェクトをカーソルのまわりで回転させる

Last updated at Posted at 2022-11-15

はじめに

オブジェクトを下のようにカーソルのまわりを回転させる方法をまとめた記事が意外と少なかったので、メモ的に残しておきます。RotateAround()を使う方法もあるとは思いますが、今回は簡単な数学を使った方法です。
画面収録-2022-11-15-9.59.15.gif

プログラム解説

cycleScript.cs
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()です。
この関数の式は、高校数学の三角比あたりを思い出していただければいいのですが、半径と角度がわかっている場合、そこの座標は三角比を使って表現することができます。こんな感じで。
image.png
つまり、角度angleと半径radiusさえ与えてあげれば円形の運動をさせてあげることができます。
今回は、回転し続ける様にしたいので、Update()内でCycleAround()を呼び出した後、angleを変化させて回転する様にしています。z軸に関しては特にこだわりはないので0を代入しています。あとはそれぞれ計算した座標を回転させたいオブジェクトに代入してあげるだけで回転させることができます。ヤッタネ!

高校で学んだ数学がゲーム開発にも活きたと感動した瞬間でした。

参考文献

Unityでマウス座標にキャラクターをついてこさせる方法

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?