ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【Unity】TransformのPositionの最大値が気になったので調べてみたお話

time 2019/02/02

というわけで、今回はUnityでちょっと変わったことが気になったので、そのお話になります。
タイトル通り「TransformコンポーネントのPositionは最大でどのくらいまで許容されるのか」を調べてみました!

結論を言うと「100000(10万)までで、それを超えると警告が出る」です!
以下、あれこれ試してみた経緯と結果を載せているので、興味がある方はどうぞ。

試してみた値

float.MaxValue

Vector3の各軸はfloat型なので、まずはfloatの最大値を入れてみることにしました。
float.MaxValueの値は「340282346638528859811704183484516925440」です。桁を数える気にならないくらい大きいですね。

簡単なスクリプトを作り、Transform.positionのY軸にこの値を突っ込んでみました。

using UnityEngine;

public class TransformMaxTest : MonoBehaviour
{
    void Start()
    {
        transform.position = new Vector3(0, float.MaxValue, 0);
    }
}

適当なゲームオブジェクトにスクリプトを設定して実行します。

当然というべきか、Transformコンポーネントに警告が出てしまいました。
さすがに値が大きすぎましたね…。

short.MaxValue

short.MaxValueの値は「32767」です。数万くらいなら現実的な値…?という印象。
スクリプトは先ほどのものと同じで、Start()の代入部分のみ差し替えます。

transform.position = new Vector3(0, short.MaxValue, 0);

30000くらいは問題なく許容してくれるようです。

65535

プログラミング言語を習いたての頃によく聞く数字という印象です。
今思えばushort.MaxValueでよかった気がしますが、細かいことは忘れましょう。

transform.position = new Vector3(0, 65535f, 0);

これも問題なさそうです。+1して「65536」でも同様でした。
となると結構大きい値までいけるのかもしれないですね。

int.MaxValue

int.MaxValueは「2147483647」です。
float型がぶっ飛んでいるので小さく見えますが、「21億」と書くとこちらもぶっ飛んだ値に感じるところではあります。

transform.position = new Vector3(0, int.MaxValue, 0)

やはり21億もアウトのようです。ちなみに1000で割って214万でもダメでした。
「システム的には何かの型の最大値かキリの良い数値ではないか」とは感じていたので、次はズバっとキリの良い数値を指定してみました。

100000

そんな経緯で10万にたどり着きました。冒頭で述べた通りこれが最大値のようです。

transform.position = new Vector3(0, 100000f, 0);

100000なら警告が出ませんが、100001だと警告が出ます。ということでここが閾値のようですね。
今回はY軸しか設定していませんが、XZ軸も同様でした。

余談

ちなみに100000を超えてPositionを移動させようとすると、オブジェクトを選択した際に出るXYZ軸の矢印がなくなり、オブジェクトもそれ以上移動しなくなります。

また、100000を超えたからといってゲームが落ちるわけではないので、意図的に移動させたのでなければ深く気にしなくて良いかもしれません。
深く気にしなくて良いのに今回調べた理由は、単なる好奇心ですね。

down

コメントする