как узнать размеры объекта в unity
Как получить размер панели в пикселях?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как узнать ширину текста в пикселях на определённой панели в StatusBar
Здравствуйте! Помогите разобраться по такому вопросу. Ребята нужно сделать хинт на статусбаре.
Как узнать размер строки в пикселях?
У меня есть строка. Хочу узнать размер в пикселях. Это надо для того, чтобы потом узнав размер.
Как зафиксировать размер изображения в пикселях
Установил изображение на рабочий лист excell, на изображении присутствую части этого изображения.
(Решено) Как я могу узнать размер экрана в пикселях?
(Решено) День добрый. Возникла необходимость получить размер экрана в пикселях. Подскажите.
Решение
Добавлено через 59 секунд
и содержит дополнительные данные (например, якоря) для размещения UI-объекта в координатах Canvas (пикселях), которое работает по иным законам, чем игровые объекты, которые находятся в игровых координатах (юнитах). В то же время любой UI-элемент находится также и в игровых координатах, которые можно получить через тот же transform, как и через RectTransform тоже, поскольку последний наследует все свойства первого.
[!] Но манипулировать расположением объекта в UI все же нужно через RectTransform, т.к. находясь в Canvas он будет размещаться именно по правилам RectTransform.
Оба вариант дадут один и тот же объект RectTransform, только второй вариант будет чуточку быстрее (разницу в скорости можно ощутить, например, если вы это делаете для тысяч объектов в каждом кадре, но в этом случае лучше будет сделать это 1 раз, например в Awake и сохранить в приватную переменную класса компонента).
Backkk, вряд ли ощутите экономию на таком кол-ве даже на очень долхом компе. Эти небольшие колебания fps могут быть вызваны другими причинами. Только если проект сильно разрастется и вы везде и всюду будете использовать GetComponent (вместо того, чтобы один раз его вызвать при старте объекта или еще лучше сделать поле [SerializeField] и назначить его редакторе). К тому же чаще всего у вас не будет под рукой объекта, который можно будет привести к нужному типу, как в случае с transform, а будут доступны только варианты с GetComponent, либо сериализуемое поле.
Размер модели в Unity3d
Здравствуйте! В 3d max создали сферу диаметром 1 метр. Перенес в макс несколько моделей из двух пакетов Unity(Savanna, PostApo) чтобы сравнить размеры. Оказалось, что модели из PosApo в много раз меньше сферы, длина получается всего пару сантиметров(это был автобус и часть забора), а обычный камень из Savanna раз в 20 больше всей сцены в максе. Получается нет разницы какого размера модели главное чтобы пропорции между ними в юнити были соблюдены. Так что ли? Это я спрашиваю к тому, что создал я в максе модель горы типа этих, сделал развертку, натянул текстуру на модель и перенес в юнити. Когда смотришь на модель на некотором расстоянии, то все детали видно хорошо, а когда подходишь почти в плотную, то текстура размывается, в то время как в этих двух пакетах, даже если очень близко подойти к модели, то все видно четко. Сравнивал две текстуры(мою и из пакета), обе 2048, все четко видно, а на модели моя расплывается вблизи. Я думал может это из-за того, что моя модель слишком большая и детали на ней просто растягиваются, но есть камни и во много раз больше и там все нормально. Ставил тайлинг для моей текстуры = 3, тогда все четко видно, но мне нужна не затайленная текстура, а именно карта, чтобы можно было всякие неповторяющиеся детали добавлять. На моделях, которые я смотрел текстура тоже без тайлинга и там все нормально. Подскажите как сделать так что бы вблизи текстура четко была видна.
Да, в любом движке нужно только соблюдать пропорции. Если пропорции не соблюдаются, то нужно отмасштабировать модель при загрузке так, чтобы они соблюдались.
Заметь, в движках обычно нет слова метр, расстояния измеряются в безразмерных единицах.
kokon
> Я думал может это из-за того, что моя модель слишком большая и детали на ней
> просто растягиваются, но есть камни и во много раз больше и там все нормально.
> Ставил тайлинг для моей текстуры = 3, тогда все четко видно, но мне нужна не
> затайленная текстура, а именно карта, чтобы можно было всякие неповторяющиеся
> детали добавлять.
Надо увеличивать разрешение текстуры. Если есть более качественный исходник, то из него. А если нет, то придётся заново рисовать в большем разрешении.
Правка: внимательно перечитал насчёт текстур. Не знаю тогда в чём проблема, ничего само по себе размываться не должно.
kokon
Посмотри настройки текстуры.
Там в настройках можно выбрать максимальное разрешение (Max Size), возможно оно меньше, чем сама текстура. По умолчанию там стоит 1024.
Размер модели не должен влиять, но для информации скажу, что при импорте модели она масштабируется, если выделить модель в проекте, то в инспекторе в настройках можно изменить коэффициент масштабирования(Scale Factor) для каждой отдельной модели. По умолчанию он равен 0.01 (для разных форматов возможно разный коэффициент по умолчанию)
При импорте модели в юнити там есть параметры ИМПОРТА. В нем настраивается SCALE объекта. По умолчанию для чего то сделано 0.01. это кажется сделано для каких то особенностей FBX экспортера. Но у меня с Blender я экспорчу в нормальном размере и в Импорте ставлю Scale = 1. И все идеально.
MorfeusKiev
> От такие советов иногда послать хочется, только без обид. Это образно говоря.
А где ты увидел советы? Я просто написал, что всё относительно. Я не говорю, что не нужно придерживаться рекомендуемых единиц измерения. Хотя про то, что в Юнити есть принятые единицы измерения, я не знал, так как недостаточно долго его ковырял.
Но лично я сам тоже принимаю единицу за метр, так как это СИ.
по моему большой разницы нет, только на расстоянии детали видны
мне кажется, что дело не в настройках юнити, а в самой текстуре или модели. потому что так сказать профессиональные модели и текстуры там нормально смотрятся.
может быть в развертке ты берешь маленькую часть текстуры, а в профессиональных моделях берется часть побольше) поэтому получается маленькое разрешение.
на скринах, я вижу что для шифера берется где-то 1/4 текстуры. А для камня на скрине модели видно, что текстура неповторяющаяся, хотя сама текстура повторяющаяся, значит там берется какая-то очень маленькая часть текстуры, намного меньше чем 1/4.
Поэтому надо создать другую текстуру неповторяющуюся и хорошего качества и переделать UV координаты.
нет. это лишь фотошопом не исправить.
Это исправить только в 3д редакторе, изменив UV координаты, т.е. эти координаты надо там увеличить. и текстуру в фотошопе изменить, чтобы не было этих повторений. Зачем хранить в текстуре одну и ту же информацию несколько раз, когда лучше хранить ее один раз но в более хорошем качестве?
Разные размеры от того, что, видимо, объекты моделировались с разными настройками системных единиц измерения.
Управление игровыми объектами (GameObjects) с помощью компонентов
В редакторе Unity вы изменяете свойства Компонента используя окно Inspector. Так, например, изменения позиции компонента Transform приведет к изменению позиции игрового объекта. Аналогично, вы можете изменить цвет материала компонента Renderer или массу твёрдого тела (RigidBody) с соответствующим влиянием на отображение или поведение игрового объекта. По большей части скрипты также изменяют свойства компонентов для управления игровыми объектами. Разница, однако, в том, что скрипт может изменять значение свойства постепенно со временем или по получению ввода от пользователя. За счет изменения, создания и уничтожения объектов в заданное время может быть реализован любой игровой процесс.
Обращение к компонентам
Наиболее простым и распространенным является случай, когда скрипту необходимо обратиться к другим компонентам, присоединенных к тому же GameObject. Как упоминалось во разделе Введение, компонент на самом деле является экземпляром класса, так что первым шагом будет получение ссылки на экземпляр компонента, с которым вы хотите работать. Это делается с помощью функции GetComponent. Типично, объект компонента сохраняют в переменную, это делается в C# посредством следующего синтаксиса:
В UnityScript синтаксис немного отличается:
Как только у вас есть ссылка на экземпляр компонента, вы можете устанавливать значения его свойств, тех же, которые вы можете изменить в окне Inspector:
Имейте ввиду, что нет причины, по которой вы не можете иметь больше одного пользовательского скрипта, присоединенного к одному и тому же объекту. Если вам нужно обратиться к одному скрипту из другого, вы можете использовать, как обычно, GetComponent, используя при этом имя класса скрипта (или имя файла), чтобы указать какой тип Компонента вам нужен.
Если вы попытаетесь извлечь Компонент, который не был добавлен к Игровому Объекту, тогда GetComponent вернет null; возникнет ошибка пустой ссылки при выполнении (null reference error at runtime), если вы попытаетесь изменить какие-либо значения у пустого объекта.
Обращение к другим объектам
Пусть иногда они и существуют изолированно, все же, обычно, скрипты отслеживают другие объекты. Например, преследующий враг должен знать позицию игрока. Unity предоставляет несколько путей получения других объектов, каждый подходит для конкретной ситуации.
Связывание объектов через переменные
Переменная будет видна в окне Inspector, как и любые другие:
Теперь вы можете перетащить объект со сцены или из панели Hierarchy в эту переменную, чтобы назначить его. Функция GetComponent и доступ к переменным компонента доступны как для этого объекта, так и для других, то есть вы можете использовать следующий код:
Кроме того, если объявить переменную с доступом public и заданным типом компонента в вашем скрипте, вы сможете перетащить любой объект, который содержит присоединенный компонент такого типа. Это позволит обращаться к компоненту напрямую, а не через игровой объект.
Соединение объектов через переменные наиболее полезно, когда вы имеете дело с отдельными объектами, имеющими постоянную связь. Вы можете использовать массив для хранения связи с несколькими объектами одного типа, но связи все равно должны быть заданы в редакторе Unity, а не во время выполнения. Часто удобно находить объекты во время выполнения, и Unity предоставляет два основных способа сделать это, описанных ниже.
Нахождение дочерних объектов
Иногда игровая сцена может использовать несколько объектов одного типа, таких как враги, путевые точки и препятствия. Может возникнуть необходимость отслеживания их в определенном скрипте, который управляет или реагирует на них (например, все путевые точки могут потребоваться для скрипта поиска пути). Можно использовать переменные для связывания этих объектов, но это сделает процесс проектирования утомительным, если каждую новую путевую точку нужно будет перетащить в переменную в скрипте. Аналогично, при удалении путевой точки придется удалять ссылку на отсутствующий объект. В случаях, наподобие этого, чаще всего удобно управлять набором объектов, сделав их дочерними одного родительского объекта. Дочерние объекты могут быть получены, используя компонент Transform родителя (так как все игровые объекты неявно содержат Transform):
Вы можете также найти заданный дочерний объект по имени, используя функцию Transform.Find:
Динамическое изменение размеров объекта в Unity3D (решено)
Имеется куб, который надо динамически изменять.
Скрипт вешается на сам куб, раз в 10 секунд(например) меняется его размер на новый, случайный( new Vector3(Random.Range(2,10),Random.Range(2,10),Random.Range(2,10)) ).
Как динамически менять размеры? Желательно, пример кода.
36 ответов
Всё что у меня получилось:
randomscale.cs
Но эта часть не работает почему-то правильно:
Она должна менять размер плавно. Нужно погуглить, как её правильно написать.
косяк был в том, как я понял, что переменная размера отдельно записывалась, а надо было передавать нынешние размеры объекта, т.е.
С коллайдером наверное что-то. Попробуй mesh collider вместо box collider.
И ещё попробуй это поменять эти параметры:
Создание ощущения больших и маленьких размеров
С точки зрения графики, единицы расстояния в Unity произвольны и не соответствуют реальным системам измерения. Не смотря на то, что это делает дизайн гибким и удобным, не всегда легко передать реальный размер объекта. Например, игрушечная машинка выглядит иначе, чем машина в реальном масштабе даже если это будет аккуратно выполненная масштабная модель реального объекта.
Главную роль для создания ощущения размеров объекта играет то, как изменяется перспектива относительно длины объекта. Например, если смотреть на игрушечную машинку сзади, тогда передняя часть будет на небольшом расстоянии от задней. Пока расстояние мало, перспектива, соответственно, будет иметь малый эффект и поэтому размер передней части будет мало отличаться от размера задней части машинки. В случае же реального автомобиля, перед будет расположен на несколько метров дальше от камеры, чем задняя часть и эффект перспективы будет куда более заметней.
Для объекта, который должен выглядеть маленьким, линии перспективы должны иметь малое отклонение относительно его глубины. Вы можете достигнуть этого, используя более узкий угол обзора (FOV), чем стандартный угол в 60 градусов и отодвигая камеру дальше, чтобы компенсировать увеличенный экранный размер. И наоборот, если вы хотите, чтобы объект выглядел больше, используйте широкий угол обзора (FOV) и пододвиньте камеру ближе. Когда вы используете эти изменения перспективы с другими техниками (такими как взгляд вниз на “маленький” объект с точки, расположенной выше чем обычно), результат может быть вполне убедительным.