Меш-коллайдер (Mesh Collider)
Mesh Collider использует меш ассет для создания под него коллайдера на основе этого меша. Это гораздо удобнее, чем использовать примитивы для определения столкновений сложных мешей. Меш коллайдеры, которые помечены как Convex могут взаимодействовать (сталкиваться) с другими меш коллайдерами.

Свойства
| Свойство: | Функция: |
|---|---|
| Is Trigger | Если включён, то этот коллайдер будет игнорироваться физическим движком и использоваться для запуска событий. |
| Material | Ссылка на физический материал, который определяет, как данный коллайдер взаимодействует с другими. |
| Mesh | Ссылка на меш, используемый для столкновений. |
| Convex | При включении, текущий меш коллайдер будет взаимодействовать с другими меш коллайдерами. Выпуклые (Convex) меш коллайдеры ограничены 255 треугольниками. |
Детали
The Mesh Collider builds its collision representation from the Mesh attached to the GameObject, and reads the properties of the attached Transform to set its position and scale correctly. The benefit of this is that the shape of the collider can be exactly the same as the shape of the visible mesh for the object, resulting in more precise and authentic collisions. However, this precision comes with a higher processing overhead than collisions involving primitive colliders (sphere, box, capsule) and so it is best to use Mesh Colliders sparingly.
Меши, служащие для расчёта столкновений, используют отсечение невидимых поверхностей. Если объект столкнётся с таким мешем визуально, то он также столкнётся с ним и физически.
Есть кое-какие ограничения в использовании меш коллайдеров. Обычно два меш коллайдера не могут столкнуться друг с другом. Все меш коллайдеры могут сталкиваться с примитивными коллайдерами. Если ваш меш помечен как Convex , то он сможет сталкиваться с другими меш коллайдерами.
Note that versions of Unity before 5.0 had a Smooth Sphere Collisions property for the Mesh Collider in order to improve interactions between meshes and spheres. This property is now obsolete since the smooth interaction is standard behaviour for the physics engine and there is no particular advantage in switching it off.
Коллайдеры (Colliders)
Collider components define the shape of an object for the purposes of physical collisions. A collider, which is invisible, need not be the exact same shape as the object’s mesh and in fact, a rough approximation is often more efficient and indistinguishable in gameplay.
The simplest (and least processor-intensive) colliders are the so-called primitive collider types. In 3D, these are the Box Collider, Sphere Collider and Capsule Collider. In 2D, you can use the Box Collider 2D and Circle Collider 2D. Any number of these can be added to a single object to create compound colliders.
With careful positioning and sizing, compound colliders can often approximate the shape of an object quite well while keeping a low processor overhead. Further flexibility can be gained by having additional colliders on child objects (eg, boxes can be rotated relative to the local axes of the parent object). When creating a compound collider like this, there should only be one Rigidbody component, placed on the root object in the hierarchy.
Note, that primitive colliders will not work correctly with shear transforms — that means that if you use a combination of rotations and non-uniform scales in the Transform hierarchy so that the resulting shape would no longer match a primitive shape, the primitive collider will not be able to represent it correctly.
Однако существуют случаи, где даже составные коллайдеры недостаточно точны. В 3D вы можете использовать Mesh Colliders, чтобы создать коллайдер, идентичный по форме мешу объекта. В 2D Polygon Collider 2D сгенерирует форму примерно совпадающую с графикой спрайта. Не идеально, но вы можете изменить его форму до любого уровня детализации. Эти коллайдеры нагружают процессор сильнее, чем примитивные коллайдеры, так что используйте их экономно, чтобы сохранить высокую производительность. Также Mesh Collider не сможет сталкиваться с другими Mesh Collider (другими словами, при их контакте ничего не произойдёт). В некоторых случаях вы можете обойти это пометив Mesh Collider в инспекторе как Convex (выпуклый). Это создаст коллайдер формы “выпуклой оболочки”, который такой же, как и оригинальный меш, но с “заполненными” углублениями. Польза от этого в том, что выпуклый Mesh Collider может сталкиваться с другими Mesh Collider, так что вы сможете использовать эту функцию, когда у вас есть двигающийся персонаж с подходящей формой. Тем не менее хорошим общим правилом будет использование Mesh Collider для геометрии сцены, и имитировать приближённую к реальности форму для двигающихся объектов с помощью примитивных коллайдеров.
Для создания пола, стен и других неподвижных элементов сцены, к объектам без компонента Rigidbody можно добавлять коллайдеры. Они называются static (статичными) коллайдерами. Обычно вам не следует перемещать статичные коллайдеры изменяя положение их трансформации, т.к. это сильно повлияет на производительность физического движка. Коллайдеры на объекте, у которого есть Rigidbody, известны как динамичные коллайдеры. Статичные коллайдеры могут взаимодействовать с динамичными коллайдерами, но, т.к. у них нету Rigidbody, они не сдвинутся в ответ на коллизии (столкновения).
Страницы справки для различных типов коллайдеров, указанных выше, имеют дополнительную информацию об их свойствах и способах использования.
Физические материалы (Physics Materials)
Когда коллайдеры взаимодействуют, их поверхностям надо симулировать свойства материала, из которого они теоретически должны состоять. Например, слой льда будет более скользким, в то время как резиновый мяч будет предлагать больше трения и будет очень упругим. Хотя форма коллайдеров и не деформируется во время коллизий, их трение и упругость можно настроить используя физические материалы (Physics Materials). Настроить параметры так, как хочется, можно методом проб и ошибок, но, например, материал льда будет иметь нулевое (или очень маленькое) трение, а резиновый материал будет с большим показателем трения и почти идеальной упругостью. Для дополнительной информации по доступным параметрам, читайте страницы справки Physic Material и Physics Material 2D. Учтите, что, по историческим причинам, 3D ассет называется Physic Material, в то время как 2D эквивалент называется Physics Material 2D (с “s” после “Physic”).
Триггеры (Triggers)
В случае столкновения, система скриптинга может это обнаружить и выполнить действия, указанные в функции OnCollisionEnter . Однако вы также можете использовать физический движок просто для обнаружения того, что один коллайдер входит в пространство другого, без создания коллизии. Коллайдер, настроенный как триггер (с помощью свойства Is Trigger), не ведёт себя как твёрдый объект и просто будет пропускать другие коллайдеры сквозь себя. Когда другой коллайдер войдёт “на территорию” этого коллайдера, триггер вызовет функцию OnTriggerEnter в скриптах объекта, к которому присоединён триггер.
Collision callbacks for scripts
When collisions occur, the physics engine calls functions with specific names on any scripts attached to the objects involved. You can place any code you like in these functions to respond to the collision event. For example, you might play a crash sound effect when a car bumps into an obstacle.
On the first physics update where the collision is detected, the OnCollisionEnter function is called. During updates where contact is maintained, OnCollisionStay is called and finally, OnCollisionExit indicates that contact has been broken. Trigger colliders call the analogous OnTriggerEnter , OnTriggerStay and OnTriggerExit functions. Note that for 2D physics, there are equivalent functions with 2D appended to the name, eg, OnCollisionEnter2D . Full details of these functions and code samples can be found on the Script Reference page for the MonoBehaviour class.
У обычных не триггерных коллизий есть ещё дополнительная деталь: как минимум один из вовлечённых в коллизию объектов должен обладать не кинематическим Rigidbody (т.е. IsKinematic должен быть выключен). Если оба объекта являются кинематическими, то тогда не будут вызываться функции, вроде OnCollisionEnter и т.д. С триггерными столкновениями это условие не применяется, так что и кинематические и не кинематические Rigidbody будут незамедлительно вызывать OnTriggerEnter при пересечении триггерного коллайдера.
Взаимодействия коллайдеров
Коллайдеры взаимодействуют друг с другом по разному, в зависимости от того, как настроены их компоненты Rigidbody. Тремя важными конфигурациями являются статичный коллайдер (Static Collider) (т.е. компонент Rigidbody отсутствует вообще), Rigidbody коллайдер (Rigidbody Collider), и кинематический Rigidbody коллайдер (Kinematic Rigidbody Collider).
Статичный коллайдер (Static Collider)
Это игровой объект, у которого есть коллайдер, но нету Rigidbody. Статичные коллайдеры используются для геометрии уровней, которая всегда стоит на месте и совсем не двигается. Встречные Rigidbody объекты будут врезаться в статичный коллайдер, но его не сдвинут.
The physics engine assumes that static colliders never move or change and can make useful optimizations based on this assumption. Consequently, static colliders should not be disabled/enabled, moved or scaled during gameplay. If you do change a static collider then this will result in extra internal recomputation by the physics engine which causes a major drop in performance. Worse still, the changes can sometimes leave the collider in an undefined state that produces erroneous physics calculations. For example a raycast against an altered Static Collider could fail to detect it, or detect it at a random position in space. Furthermore, Rigidbodies that are hit by a moving static collider will not necessarily be “awoken” and the static collider will not apply any friction. For these reasons, only colliders that are Rigidbodies should be altered. If you want a collider object that is not affected by incoming rigidbodies but can still be moved from a script then you should attach a Kinematic Rigidbody component to it rather than no Rigidbody at all.
Rigidbody коллайдер (Rigidbody Collider)
Это игровой объект, к которому прикреплён коллайдер и нормальный не кинематический Rigidbody. Rigidbody коллайдеры полностью симулируются физическим движком и могут реагировать на коллизии и силы, приложенные из скрипта. Они могут сталкиваться с другими объектами (включая статичные коллайдеры) и являются самой распространённой конфигурацией коллайдера в играх, которые используют физику.
Кинематические Rigidbody коллайдеры (Kinematic Rigidbody Collider)
Это игровой объект, к которому прикреплён коллайдер и кинематический Rigidbody (т.е. свойство IsKinematic компонента Rigidbody включено). Изменяя компонент Transform, вы можете перемещать объект с кинематическим Rigidbody, но он не будет реагировать на коллизии и приложенные силы так же, как и не кинематические Rigidbody. Кинематические Rigidbody должны использоваться для коллайдеров, которые могут двигаться или периодически выключаться/включаться, иначе они будут вести себя как статичные коллайдеры. Примером этого является скользящая дверь, которая обычно является недвижимым физическим препятствием, но по надобности может открываться. В отличие от статичного коллайдера, движущийся кинематический Rigidbody будет применять трение к другим объектам и, в случае контакта, будет “будить” другие Rigidbody.
Даже когда они неподвижны, кинематические Rigidbody коллайдеры ведут себя иначе, в отличие от статичных коллайдеров. Например, если коллайдер настроен как триггер, то вам также понадобится добавить к нему Rigidbody, чтобы можно было в вашем скрипте принимать события триггера. Если вы не хотите, чтобы триггер падал под действием силы гравитации или подвергался влиянию физики, то тогда вы можете включить свойство IsKinematic.
A Rigidbody component can be switched between normal and kinematic behavior at any time using the IsKinematic property.
A common example of this is the “ragdoll” effect where a character normally moves under animation but is thrown physically by an explosion or a heavy collision. The character’s limbs can each be given their own Rigidbody component with IsKinematic enabled by default. The limbs will move normallly by animation until IsKinematic is switched off for all of them and they immediately behave as physics objects. At this point, a collision or explosion force will send the character flying with its limbs thrown in a convincing way.
Матрица действий коллизии
Когда сталкиваются 2 объекта, количество различных событий в скрипте зависит от конфигураций компонентов Rigidbody столкнувшихся объектов. Схемы ниже содержат детали того, какие функции событий будут вызваны, основываясь на присоединённых к объектам компонентах. В некоторых комбинациях эффект производится только на один из двух объектов, так что помните правило — законы физики не применяются к объектам, у которых нет присоединённого Rigidbody.
| Происходит определение столкновений, и при их возникновении посылаются сообщения | ||||||
|---|---|---|---|---|---|---|
| Статичный коллайдер (Static Collider) | Rigidbody коллайдер (Rigidbody Collider) | Кинематический Rigidbody коллайдер (Kinematic Rigidbody Collider) | Статичный коллайдер-триггер (Static Trigger Collider) | Rigidbody коллайдер-триггер (Rigidbody Trigger Collider) | Кинематический Rigidbody коллайдер-триггер (Kinematic Rigidbody Trigger Collider) | |
| Статичный коллайдер (Static Collider) | Да | |||||
| Rigidbody коллайдер (Rigidbody Collider) | Да | Да | Да | |||
| Кинематический Rigidbody коллайдер (Kinematic Rigidbody Collider) | Да | |||||
| Статичный коллайдер-триггер (Static Trigger Collider) | ||||||
| Rigidbody коллайдер-триггер (Rigidbody Trigger Collider) | ||||||
| Кинематический Rigidbody коллайдер-триггер (Kinematic Rigidbody Trigger Collider) | ||||||
| При коллизиях отсылаются сообщения триггера | ||||||
|---|---|---|---|---|---|---|
| Статичный коллайдер (Static Collider) | Rigidbody коллайдер (Rigidbody Collider) | Кинематический Rigidbody коллайдер (Kinematic Rigidbody Collider) | Статичный коллайдер-триггер (Static Trigger Collider) | Rigidbody коллайдер-триггер (Rigidbody Trigger Collider) | Кинематический Rigidbody коллайдер-триггер (Kinematic Rigidbody Trigger Collider) | |
| Статичный коллайдер (Static Collider) | Да | Да | ||||
| Rigidbody коллайдер (Rigidbody Collider) | Да | Да | Да | |||
| Кинематический Rigidbody коллайдер (Kinematic Rigidbody Collider) | Да | Да | Да | |||
| Статичный коллайдер-триггер (Static Trigger Collider) | Да | Да | Да | Да | ||
| Rigidbody коллайдер-триггер (Rigidbody Trigger Collider) | Да | Да | Да | Да | Да | Да |
| Кинематический Rigidbody коллайдер-триггер (Kinematic Rigidbody Trigger Collider) | Да | Да | Да | Да | Да | Да |
Руководство по программированию облачных сценариев
В этом руководстве описывается использование API облачных сценариев Сетки и средств разработчика для создания сред (они начинаются как проекты в Unity, а затем передаются в коллекцию Mesh). Рекомендуется сначала ознакомиться с разделом Настройка инфраструктуры облачных сценариев в Azure , чтобы ознакомиться с основными понятиями и базовой архитектурой облачного скрипта Mesh.
В этом разделе описываются функции и интерфейс API cloud scripting Mesh, который используется для написания скриптов, которые управляют поведением в средах.
Базовая структура DOM
Структура DOM отражает структуру сцены Unity. Элемент «Сцена» приложения соответствует игровому объекту, к которому подключен компонент mesh Cloud Scripting. Следующие классы API облачных сценариев Mesh сопоставляют один к одному с объектами Unity, созданными в редакторе:
- GameObject (& Transform Component) —> TransformNode
- Компонент освещения —> PointLightNode, SpotLightNode, DirectionalLightNode
- Компонент Animator —> AnimationNode (и производные классы, см. ниже)
- Компонент Box Collider —> BoxGeometryNode
- Компонент Sphere Collider —> SphereGeometryNode
- Компонент капсульного коллайдера —> CapsuleGeometryNode
- Компонент сетчатого коллайдера —> MeshGeometryNode
- Компонент Text Mesh Pro —> TextNode
- Компонент Rigidbody —> RigidBodyNode
Например, если вы создаете сцену с игровым объектом, который имеет компонент Light (задается в точечный свет) и подключенный шарный коллайдер, сцена будет содержать TransformNode с двумя дочерними элементами: PointLightNode и SphereGeometryNode.
Кроме того, некоторые объекты API облачных сценариев Mesh не имеют соответствующих встроенных компонентов Unity. Это дополнительные компоненты, которые можно создать в Unity, которые входят в пакет набора средств сетки.
- Компонент cloud scripting Mesh (описано выше)
- Компонент WebSlate
Сопоставление модели Unity DOM с моделью DOM сетки
Вы можете создать сцену с компонентами, о которые API облачных сценариев сетки не знает. Они просто не будут существовать в модели модели сценариев Mesh Cloud для сцены. Однако полная структура сцены GameObjects будет отражена в API DOM как TransformNodes.
Unity имеет форму API GameObject/component; однако модель DOM облачных сценариев Mesh имеет одну древовидную структуру. TransformNode в API облачных сценариев mesh имеет дочерние элементы, которые могут быть другими transformNodes или другими узлами, которые сопоставляются с компонентами. Мы можем рассматривать это как объединенный список компонентов связанного игрового объекта и дочерних элементов его компонента преобразования.
Преобразование rect
При добавлении компонента, использующего RectTransform, например компонента Text Mesh Pro, игровой объект не будет отображаться как Node в графе сцены сценариев Mesh Cloud. Такой компонент по-прежнему можно перемещать, включать и отключать, но для этого необходимо заключить игровой объект с помощью RectTransform в другой игровой объект с помощью обычного компонента Преобразования.
События изменения свойств
Вы можете подписаться на события изменения свойств, вызвав вызов AddPropertyChangedEventHandler на любом узле в иерархии. Необходимо передать имя свойства в виде строки.
Также можно подписаться на все события, подписавшись на DomObjectPropertyChanged событие. Вызывается при изменении любого свойства в модели DOM.
Жизненный цикл объекта
При создании узлы не являются неродимыми. Это означает, что они не будут видны в сцене, пока они не будут явно добавлены в качестве дочернего элемента в сцену или одного из ее потомков. Аналогичным образом установка для родительского узла значения NULL приведет к удалению его и его потомков из сцены.
Иногда требуется временно отключить узел, но не вести запись о том, где он находился в сцене. По этой причине каждый узел имеет флаг «активный». Если задано значение false, узел и его потомки будут отключены.
В Unity можно создавать игровые объекты и компоненты, которые являются частью сцены, но отключены. Они будут отображаться как узлы в иерархии сцены mesh Cloud Scripting, но для активного флага будет установлено значение false. Если установить для активного флага значение true, они будут активированы в сцене Unity.
Клонирование и повторное развертывание
Узлы могут быть клонированы и повторно преобразованы в API облачных сценариев сетки; соответствующая сцена Unity обновится соответствующим образом. Если клонировать узел, он клонирует этот узел и все его дочерние элементы (включая дочерние элементы, которые могут находиться в соответствующих объектах Unity, но не видны для Cloud Scripting Mesh).
Можно клонировать или повторно напарачивать узлы, соответствующие компонентам Unity. Это реализуется путем повторного создания этих компонентов Unity на основе представлений узла сценариев в облаке сетки. Клонировать или повторно создать только узлы, которые можно создать с помощью API облачных сценариев mesh. Если вы создали компонент в Unity и задали поля, которые не отражены в соответствующем узле cloud scripting Node, эти поля будут сброшены до значений по умолчанию, если клонирован сам узел. По этой причине рекомендуется клонировать или повторно создавать узлы преобразования, в которых вы управляете объектами, созданными в Unity. Они всегда будут правильно сохранять все исходные параметры Unity.
Пользователи
В API есть различные места, предоставляющие свойства пользователя. Свойство User.Identifier является строкой постоянного идентификатора, которая является постоянной для пользователя, даже если пользователь покидает и повторно присоединится. Отображаемое имя пользователя также доступно через User.DisplayName . Идентификатор события, из которого пользователь подключился, доступен через User.ConnectedEventId .
Во время разработки отображаемое имя пользователя, идентификатор и идентификатор события можно имитировать в редакторе компонента Mesh Cloud Scripting в разделе «Параметры разработчика», как показано ниже.

Аватары
Аватары — это представление пользователей в сцене. Их можно использовать для телепортирования пользователей в заданное расположение, перемещения между сценами и обнаружения столкновений с триггерными томами.
Информационные диалоги
В cloud Scripting можно открыть диалоговое окно пространства экрана в приложении Microsoft Mesh с пользовательским сообщением. SceneNode содержит функцию для этого , ShowMessageToParticipants(string message, IReadOnlyCollection participants) . Теги форматированного текста можно использовать в сообщении для управления свойствами текста (цветом, полужирным шрифтом и т. д.).
Классы
CloudApplication
Интерфейс ICloudApplication является отправной точкой для разработки приложений сетки. Он доступен в app.cs в качестве переменной _app. Помимо сцены, ICloudApplication имеет функции создания для всех доступных типов. Он также имеет ряд других методов, но они используются для внутреннего использования.
InteractableNode
MeshInteractableSetup — это пользовательский компонент Unity, который входит в пакет набора средств сетки. При присоединении к игровому объекту в Unity он вызывает события щелчка, когда любой пользователь щелкает любой из активных конфликтующих объектов в этом игровом объекте или его дочерних элементах.
Ниже показан простой пример, в котором компонент MeshInteractableSetup добавляется в тот же игровой объект, что и коллайдер box:

WebSlateNode
WebSlate — это пользовательский компонент Unity, который входит в пакет набора средств сетки. Чтобы добавить заготовку WebSlate в сцену, выберите GameObject>Mesh Toolkit>WebSlate в строке меню. Веб-сайт, назначенный свойству URL-адреса экземпляра WebSlate, отображается на четырехугольнике этого заготовки.
Ниже показан пример, в котором в сцену добавлена префаб WebSlate и назначен URL-адрес:
var webSlateNode = Root.FindFirstChild(true); webSlateNode.Url = new System.Uri("https://en.wikipedia.org/wiki/Color");

Прослушивание щелчков
Ниже приведен простой скрипт Mesh Cloud Scripting, который поворачивает куб при каждом щелчке. Замените метод-заглушку StartAsync внутри App.cs этим кодом.
private float _angle = 0; public Task StartAsync(CancellationToken token) < // First we find the TransformNode that corresponds to our Cube gameobject var transform = _app.Scene.FindFirstChild(); // Then we find the InteractableNode child of that TransformNode var sensor = transform.FindFirstChild(); // Handle a button click sensor.Selected += (_, _) => < // Update the angle on each click _angle += MathF.PI / 8; transform.Rotation = new Rotation < X = 1, Y = 0, Z = 0, Angle = _angle >; >; return Task.CompletedTask; >
Сведения о попадании
Можно узнать, какой пользователь щелкнул коллайдер, просмотрев аргументы события изменения свойства. Вы также можете прочитать обычный контакт и положение щелчка из аргументов события. Эти координаты будут относительно локального пространства координат Объекта InteractableNode.
Аниматоры
Вы можете создать и добавить аниматор Unity в сцену и управлять им с помощью облачных сценариев Mesh. Подключаемый модуль набора средств сетки будет просматривать ресурсы в проекте Unity, и для каждого найденного animator он создаст класс в папке AnimationScripts в проекте Mesh Cloud Scripting. Этот класс является производным от AnimationNode и может использоваться для управления аниматором из облачного скрипта Mesh. При добавлении Animator в качестве компонента к игровому объекту в Unity вы найдете соответствующий экземпляр созданного класса в качестве дочернего элемента соответствующего TransformNode. С помощью API этого класса можно управлять аниматором.
Модель программирования облачных сценариев Mesh является заслуживающей доверия на сервере, и мы поддерживаем только небольшое подмножество функций аниматора. Это связано с тем, что мы моделироваем аниматор на сервере и ожидаем, что все клиенты будут точно синхронизированы с серверной моделью. По этой причине в настоящее время поддерживается только следующий API:
- Параметр состояния (для каждого слоя в классе есть соответствующее свойство, которое можно задать в перечисление на основе доступных состояний в аниматоре). Состояния задаются немедленно, а не через переходы.
- Параметр переменной float: предоставляются только переменные float и только для привязки к времени движения в аниматоре.
- Параметр скорости слоя
В состоянии можно создать клип анимации без ограничений на значения, которые можно задать в сцене Unity. Кроме того, поддерживаются клипы анимации в цикле. В AnimationNodes не поддерживаются следующие функции аниматоров:
- Переходы. Если вы добавите переходы в аниматор, вы не сможете активировать их с помощью API облачных сценариев сетки (сервер не моделировает переходы).
- Переменные (кроме с плавающей запятой для перемещения времени движения). Переменные, используемые для управления логикой перехода или множителями скорости, не поддерживаются.
- Зеркальные состояния, смещение цикла и IK ноги.
Позднее присоединение и аниматоры
Когда клиенты присоединяются к событию сетки, они синхронизируются с текущим состоянием и местным временем всех запущенных узлов анимации. Если у вас есть долго выполняющаяся анимация, воспроизводимая в состоянии, для времени воспроизведения будет задано правильное текущее время анимации при позднем соединении. Однако если ваше состояние вызывает события, они НЕ будут запускаться в клиенте с поздним присоединением. Некоторые другие сценарии могут работать неправильно; Например, если вы активируете звук, включив AudioSource в начале состояния, этот AudioSource по-прежнему будет включен в клиенте позднего присоединения, но начнет воспроизводиться в начале аудиоклипа.
Начальное состояние аниматора
Рекомендуется создавать аниматоры с состояниями по умолчанию, которые ничего не делают. Когда сцена начинает воспроизводиться в Unity, она активирует все аниматоры и начнет воспроизводить их анимации по умолчанию. Это может произойти до подключения к облачной службе сценариев сетки. следовательно, нет способа синхронизировать эти состояния, и поведение может быть не так, как требуется.
Повторное создание и клонирование аниматора
AnimationNodes нельзя создать с помощью API облачных сценариев Mesh. Единственный способ создать AnimationNode — экспортировать сцену Unity, содержащую компонент Animator. При попытке клонирования или повторного распространения AnimationNode вы получите сообщение об ошибке, так как это действие не поддерживается. По-прежнему можно клонировать или перенародить родительский объект AnimationNode, так как он соответствует объекту Unity Game Object, который может быть клонирован и воспитан.
Заметки о созданном коде
Созданный код удалит пробелы из имен аниматоров, слоев, состояний и переменных; Например, имя переменной my var в коде становится myVar. По этой причине можно создать аниматоры, которые не будут создавать допустимый код. Например, если у вас есть две переменные с именами «my var» и «myVar», вы получите ошибку во время создания и сообщение с просьбой переименовать переменные.
LightNode
PointLightNode, DirectionalLightNode и SpotLightNode сопоставляется с компонентом Unity Light (для которого будет задано соответствующее значение типа). Можно задать основные параметры этих источников с помощью API LightNode. Кроме того, можно создать lights вручную с помощью API. При создании легких узлов с помощью API параметры, которые не могут быть заданы с помощью API облачных сценариев сетки, останутся равными значениям по умолчанию.
GeometryNode
BoxGeometryNode, SphereGeometryNode, CapsuleGeometryNode и MeshGeometryNode сопоставляют с Unity Box Collider Component, Sphere Collider Component, Capsule Collider Component и Mesh Collider Component, соответственно. Их также можно создать с помощью API облачных сценариев сетки. Включение и отключение геометрических узлов приведет к их добавлению и удалению из кандидатов на попадание, если MeshInteractableSetup подключен к их игровому объекту или одному из его родительских объектов.
При создании геометрических узлов с помощью API параметры, которые не могут быть заданы с помощью API сетки, будут использоваться по умолчанию (например, для физического материала будет задано значение none, а для параметра isTrigger — значение false).
RigidBodyNode
Добавление компонента Жесткого тела к объекту поставит его движение под контроль физики сетки. Без добавления кода объект Rigidbody будет потянуться вниз гравитацией и будет реагировать на столкновения с другими объектами.
Примечание. GeometryNode.Friction Возвращает staticFriction . Однако если этот параметр задан на стороне Cloud Scripting Mesh, он будет обновляться как на клиентах, так staticFriction и dynamicFriction на клиентах.
Активация томов
Геометрические узлы могут выступать в качестве томов триггеров, если для их IsTrigger свойства задано значение true. Этот флаг соответствует свойству IsTrigger коллайдера в Unity и не может быть изменен во время выполнения. Если геометрия является триггером, она создает Entered и Exited для любого Аватары, которые запускают или прекращают перекрываться с ним.
Примечание. Объект Unity необходимо добавить TriggerVolume в слой, чтобы позволить телепортации луча игнорировать его, так как коллайдеры в Default слое блокируют луч телепортации.
TextNode
TextNode сопоставляется с компонентом TextMeshPro в Unity. Если вы добавите компонент TextMeshPro в сцену, в иерархии сцены для cloud scripting mesh будет соответствующий Объект TextNode. Это позволяет задавать текст компонента во время выполнения. Вы также можете изменить основные свойства текста с помощью API TextNode: полужирное, курсивное, подчеркивание, зачеркив и цвет. В настоящее время создать TextNode с помощью API невозможно. Их необходимо создать, добавив в сцену в Unity. Кроме того, вы не можете клонировать TextNode напрямую. Вместо этого необходимо клонировать родительский объект TranformNode TextNode.
Сетки
В настоящее время сетки являются «скрытыми» компонентами в API облачных сценариев сетки. Ими можно создавать в редакторе Unity и управлять ими, управляя родительскими игровыми объектами или компонентами преобразования, но их нельзя создавать программными средствами, а также изменять их свойства во время выполнения с помощью API сетки.
Другие разделы, посвященные облачным сценариям сетки
Добавление ресурсов в облачную службу сценариев Mesh
Если вам нужно добавить ресурс для использования облачной службы сценариев Mesh, необходимо добавить его в качестве внедренного ресурса в файл проекта C#. Это можно сделать с помощью пользовательского интерфейса проекта в Visual Studio или путем непосредственного добавления следующей строки в CSPROJ-файл:
" CopyToOutputDirectory="PreserveNewest" />
Обратите внимание, что именно так упаковано scene.map, которое можно просмотреть в CSPROJ-файле для справки.
Работа с физикой сетки
Mesh Physics позаботится о синхронизации движения жестких тел между клиентами. Облачные скрипты сетки TransformNode.Position , TransformNode.Rotation RigidBody.Velocity и RigidBody.AngularVelocity не будут обновлены с учетом последнего состояния моделирования. Однако клиенты будут применять изменения, если они заданы в облачной службе сценариев mesh. Обратите внимание, что при изменении одного свойства другие свойства останутся без изменений. Например, если задано только положение, скорость не будет изменена, а жесткое тело продолжит движение со старой скоростью из нового положения. Учитывая, что служба облачных сценариев mesh не обновляется с учетом последнего состояния движения для жестких тел, рекомендуется устанавливать их только для новых жестких тел.
Если TransformNode параметр with RigidBodyNode клонирован, клонированные тела будут зарегистрированы и переданы Mesh Physics в для синхронизации между клиентами. Примечание: Клонированные жесткие тела будут иметь положение, вращение и скорости от начала сцены исходного жесткого тела. Если они должны отличаться, они должны быть явно заданы в облачных скриптах сетки.
Как сделать нормальный mesh collider в Unity?

В моей игре планета генерируется через код. Надо, чтобы персонаж мог нормально ходить по поверхности, но для этого нужно как-то сделать для неё нормальный коллайдер. Дело в том, что когда я ставлю на неё меш коллайдер, он работает только тогда, когда включен convex, но у конвекса слишком мало полигонов для моего объекта. Как сделать, чтобы персонаж сталкивался ровно с поверхностью объекта?
- Вопрос задан более трёх лет назад
- 1117 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1

GavriKos @GavriKos Куратор тега Unity
Дробить меш — и как следствие коллайдеры на куски. Типа чанков что то. И включать коллайдеры только на нужных чанках
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Веб-разработка
- +3 ещё
Нужен старый аккаунт Google play console, где найти такой?
- 1 подписчик
- 18 минут назад
- 22 просмотра