バッテラ777

ゲーム開発に関する情報を共有するブログです。記事を8192書くまでやめれません

【Unity】Mathf.Repeatを使って値を特定の範囲で循環(ループ)させる

Unity

はじめに

今日はUnityの計算処理の勉強していきます。

循環は剰余演算子(%)を使うやり方もあると思うのですが、公式が用意しているAPIを使ってやってみようと思います。

環境

この記事の情報は次のバージョンで動作確認しています。

* MacOS Monterey (12.1)
* Unity (2021.3.2f1)

Mathf.Repeatについて

docs.unity3d.com

public static float Repeat (float t, float length);

t  => 値を入れる
length  =>  最大値(これ以上なったら0からリスタート)

Mathf.Repeatはfloat型用の剰余演算子(%)みたいなものです。

但し、tマイナスの値を入れても想定の挙動にならないです。

簡単な検証をしました。

var max = 100;

var val_1 = 150;
var val_2 = 200;
var val_3 = -150; // 負の値

Debug.Log(Mathf.Repeat(val_1, max)); // => 50
Debug.Log(Mathf.Repeat(val_2, max)); // =>  0
Debug.Log(Mathf.Repeat(val_3, max)); //  => 50 

0 〜 MAX で値を循環させる方法

これはそのままMathf.Repeatを使えばよいです

例えば 0 〜 100 を循環させるには

var num = 125; // ここは動的に変わる値とします

var result = Mathf.Repeat(num, 100);

Debug.Log(result); // => 25

角度を -180 〜 180 で循環させるには

Mathf.Repeatは0をスタートとするのでちょっと工夫が必要です。

var result = Mathf.Repeat(num + 180, 360) - 180;

参考にしたサイト

【Unity】角度を0~360度や-180~180度の範囲に正規化する(循環させる) | ねこじゃらシティ

おわりに

最後まで見ていただきヘペトナス!

読者登録・Twitterのフォローもお願いします。