2013-06-02 4 views
3

У меня есть предупреждение от Unity3D Pro, которое я не совсем понимаю. я поставил Transform.position.x моего игрока в 1000000. в графическом интерфейсе, и он дал мне это предупреждение:Ограничения точности с плавающей запятой Unity3d

«В связи с плавающей точкой точности ограничений, рекомендуется, чтобы принести мир координаты GameObject в пределах меньшего диапазона ».

Означает ли это, что моя одиночная сцена должна быть меньше 1000000 * 1000000 * 1000000. Это считается достаточно большим? Мне понадобится несколько сцен, если мне нужен более крупный мир? Когда загружается новая сцена, позиция моего игрока будет сброшена? Как управлять данными позиции, чтобы она не выходила за пределы диапазона?

+1

Предупреждение было о точности, а не диапазоне. Нормализованный 32-разрядный плавающий IEEE 754 имеет 24-битную точность. Это примерно 7 десятичных цифр, поэтому предупреждение является подходящим. –

ответ

6

Для чисел величиной 1,000,000 размер шага 32-битной с плавающей запятой IEEE-754 равен 1/16 (0,625). Таким образом, следующее число выше 1,000,000, которое является представимым, составляет 1,000,000.0625.

Это может быть хорошо, если у вас есть вид, где изменения .0625 не видны глазу. Если масштаб объектов в вашем мире таков, что .0625 намного меньше, чем любая функция объекта, и представление никогда не будет увеличиваться до тех пор, пока различия в .0625 не заметны для человеческого глаза, тогда может быть никаких проблем. (Тем не менее, вам может потребоваться немного больше возможностей. Даже если объекты этого размера не видны, некоторые из них могут быть затронуты, так как любые вычисления скорости, положения и т. Д. Не могут использовать приращения, меньшие, чем 0,625, в то время как вы делают 32-разрядную арифметику на числах 1 000 000.)

Сравните это с числами вблизи начала координат, например, номерами величиной 100. При 100 размер шага равен 1/131072 (.00000762939453125). Если вы рисуете объекты, которые используют это прекрасное разрешение, они будут выглядеть нормально, пока они находятся рядом с источником. Однако, когда они перемещаются по вашей сцене в места, где координаты имеют большую величину, они теряют разрешение.

Основная проблема заключается в соотношении между размером сцены и размером деталей в сцене. Это то, что ограничено. Вы можете иметь большие координаты, если объекты также велики. Но вы не можете поддерживать мелкие объекты, а координаты большие.

Смежные вопросы