Перевести единицы измерения Unity?

Я продлил хороший ответ, заданный @ renato-chandelier, обеспечив поддержку:

  • _NIBBLE_(…) - 4 бит, 1 nibble в качестве аргумента
  • _BYTE_(…) - 8 бит, 2 глыбы в качестве аргументов
  • _SLAB_(…) - 12 бит, 3 глыбы в качестве аргументов
  • _WORD_(…) - 16 бит, 4 куска в качестве аргументов
  • _QUINTIBBLE_(…) - 20 бит, 5 глаголов в качестве аргументов
  • _DSLAB_(…) - 24 бит, 6 кусков в качестве аргументов
  • _SEPTIBBLE_(…) - 28 бит, 7 грызков в качестве аргументов
  • _DWORD_(…) - 32 бит, 8 глаголов в качестве аргументов

На самом деле я не очень уверен в терминах «quintibble» и «septibble». Если кто-нибудь знает какую-либо альтернативу, пожалуйста, дайте мне знать.

Вот макрос, переписанный:

#define __CAT__(A, B) A##B
#define _CAT_(A, B) __CAT__(A, B)

#define __HEX_0000 0
#define __HEX_0001 1
#define __HEX_0010 2
#define __HEX_0011 3
#define __HEX_0100 4
#define __HEX_0101 5
#define __HEX_0110 6
#define __HEX_0111 7
#define __HEX_1000 8
#define __HEX_1001 9
#define __HEX_1010 a
#define __HEX_1011 b
#define __HEX_1100 c
#define __HEX_1101 d
#define __HEX_1110 e
#define __HEX_1111 f

#define _NIBBLE_(N1) _CAT_(0x, _CAT_(__HEX_, N1))
#define _BYTE_(N1, N2) _CAT_(_NIBBLE_(N1), _CAT_(__HEX_, N2))
#define _SLAB_(N1, N2, N3) _CAT_(_BYTE_(N1, N2), _CAT_(__HEX_, N3))
#define _WORD_(N1, N2, N3, N4) _CAT_(_SLAB_(N1, N2, N3), _CAT_(__HEX_, N4))
#define _QUINTIBBLE_(N1, N2, N3, N4, N5) _CAT_(_WORD_(N1, N2, N3, N4), _CAT_(__HEX_, N5))
#define _DSLAB_(N1, N2, N3, N4, N5, N6) _CAT_(_QUINTIBBLE_(N1, N2, N3, N4, N5), _CAT_(__HEX_, N6))
#define _SEPTIBBLE_(N1, N2, N3, N4, N5, N6, N7) _CAT_(_DSLAB_(N1, N2, N3, N4, N5, N6), _CAT_(__HEX_, N7))
#define _DWORD_(N1, N2, N3, N4, N5, N6, N7, N8) _CAT_(_SEPTIBBLE_(N1, N2, N3, N4, N5, N6, N7), _CAT_(__HEX_, N8))

И вот пример использования Ренато:

char b = _BYTE_(0100, 0001); /* equivalent to b = 65; or b = 'A'; or b = 0x41; */
unsigned int w = _WORD_(1101, 1111, 0100, 0011); /* equivalent to w = 57155; or w = 0xdf43; */
unsigned long int dw = _DWORD_(1101, 1111, 0100, 0011, 1111, 1101, 0010, 1000); /* Equivalent to dw = 3745774888; or dw = 0xdf43fd28; */
0
задан jtth 16 January 2019 в 00:15
поделиться

1 ответ

1 единица измерения Unity обычно считается равной 1 метру, однако, как только вы прочитали, это зависит от вашей реализации, в этом случае похоже, что вы на самом деле экспортируете из САПР с единицей 1 дюйм = 1, поскольку ваши результаты кажутся похоже, но немного не так.

Причина, по которой вы получаете неточности, заключается, скорее всего, в том, что система столкновений Unity не очень точная, большинство коллайдеров на самом деле немного больше, чем сетка, которую они представляют, что значительно отбросит ваши точно настроенные измерения, и вдобавок к этому Точность Unity будет намного ниже, чем у САПР, поскольку Unity - игровой движок, который должен работать в режиме реального времени, данные о 3D-координатах не очень точны (примерно с 4 цифрами они становятся довольно туманными), а на самом деле значительно ухудшаются во время путешествий. вдали от источника.

Я бы не советовал пытаться использовать Unity для каких-либо точных проектных работ, особенно при представлении реального мира, но если вы не уверены, что вы можете увеличить ваши объекты в 10 или 100 раз чтобы держать ваши цифры ближе к десятичной запятой, чтобы уменьшить ошибку с плавающей запятой, это, очевидно, хак.

Возможно, вы также захотите взглянуть на свои настройки физики: https://docs.unity3d.com/Manual/class-PhysicsManager.html В частности, может иметь значение «Смещение контакта по умолчанию» (хотя я я не уверен, влияет ли это на raycasts)

PS: я бы опубликовал это в качестве комментария, но система повторов не позволит мне, ваше описание измерений между каждой средой действительно сбивает с толку, возможно, в следующий раз Попробуйте отформатировать его в виде таблицы или еще чего-нибудь?

0
ответ дан Empty 16 January 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: