それではMathfの関数を使ってシンプルにコードを組んでいきます。
まず、以下の4つの変数を用意します。
「
Vector3 unit_circle = Vector3.zero; 」 は位置代入用、
「
float angle = 0f; 」 は角度加算用、
「
float speed = 90f; 」 は回転速度用、
「
float range = 5f; 」 は回転幅用です。
続いて、以下の4つの処理も追加しましょう。
「
angle += Time.deltaTime * speed; 」 は実際に角度を加算します。
Time.deltaTimeを使用している理由としては、1フレームではなく、1秒間でspeed (90f) ぶんangleの値が増えるようにするためです。
この手法はよく可変フレームレートに対応するために使用されるものですので、Unityを使用してる方は 「 そんなテクニックもあるんだな~ 」 程度で覚えておくと良いでしょう。
次に 「
unit_circle.x = Mathf.Cos(Mathf.Deg2Rad * angle) * range; 」 を追加して実際にangleに対するCosの値 X(1 ~ -1) をrange (5f) で大きくした値 X(5 ~ -5) を代入します。
「
unit_circle.y = Mathf.Sin(Mathf.Deg2Rad * angle) * range; 」 も同様に、angleに対するSinの値 Y(1 ~ -1) をrange (5f) で大きくした値 Y(5 ~ -5) を代入します。
rangeを使用する理由は、単純にCubeを大きく動かすためで、そっちの方が分かりやすいからです。
なのでrangeの値は1fでも10fでもOKで、小さくすれば小さな動きを、大きくすれば大きな動きをします。
最後に 「
transform.position = unit_circle; 」 を追加して、位置をセットします。
▼ 全体像としてはこのようになりました。
▼ コードのコピーはこちらから。
C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sin_Cos : MonoBehaviour
{
Vector3 unit_circle = Vector3.zero;
float angle = 0f;
float speed = 90f;
float range = 5f;
void Start()
{
}
void Update()
{
angle += Time.deltaTime * speed;
unit_circle.x = Mathf.Cos(Mathf.Deg2Rad * angle) * range;
unit_circle.y = Mathf.Sin(Mathf.Deg2Rad * angle) * range;
transform.position = unit_circle;
}
}
このコードを実行すれば、Cubeが4秒間で1週するようになっていると思います。
ちなみに 「
angle += Time.deltaTime * speed; 」 を 「
angle = 30f; 」 にすれば、Cubeの位置のXは4.330127、Yは2.5となり、この2つの値は角度が30°の時のCos Sinの値を5倍したものとなっています。
▼ 動画で確認
コメント