Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
к Руководству

ParticleSystemForceField

класс в UnityEngine / Наследует от: Behaviour / Реализовано в: UnityEngine.ParticleSystemModule

Описание

Скриптовый интерфейс для силовых полей системы частиц.

Силовые поля системы частиц можно использовать для воздействия на группы частиц, попадающих в зону влияния каждого поля.

Форма силового поля может принимать различные формы, а то, как воздействуют на частицы, контролируется различными свойствами силового поля.

При выборе формы вы можете определить начальный и конечный диапазоны. Конечный диапазон описывает максимальную протяженность фигуры, а начальный диапазон можно использовать для создания полой формы.

К частицам, находящимся в этом объеме, может быть приложен ряд сил: направленная, гравитационная, вращательная, сила сопротивления и векторное поле.

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

using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine;

public class ExampleClass : MonoBehaviour { public ParticleSystemForceFieldShape m_Shape = ParticleSystemForceFieldShape.Sphere; public float m_StartRange = 0.0f; public float m_EndRange = 3.0f; public Vector3 m_Direction = Vector3.zero; public float m_Gravity = 0.0f; public float m_GravityFocus = 0.0f; public float m_RotationSpeed = 0.0f; public float m_RotationAttraction = 0.0f; public Vector2 m_RotationRandomness = Vector2.zero; public float m_Drag = 0.0f; public bool m_MultiplyDragByParticleSize = false; public bool m_MultiplyDragByParticleVelocity = false;

private ParticleSystemForceField m_ForceField;

void Start() { // Create a Force Field var go = new GameObject("ForceField", typeof(ParticleSystemForceField)); go.transform.position = new Vector3(0, 2, 0); go.transform.rotation = Quaternion.Euler(new Vector3(90.0f, 0.0f, 0.0f));

m_ForceField = go.GetComponent<ParticleSystemForceField>();

// Configure ParticleSystem transform.position = new Vector3(0, -4, 0); transform.rotation = Quaternion.identity; var ps = GetComponent<ParticleSystem>();

var main = ps.main; main.startSize = new ParticleSystem.MinMaxCurve(0.05f, 0.2f); main.startSpeed = new ParticleSystem.MinMaxCurve(1.5f, 2.5f); main.maxParticles = 100000;

var emission = ps.emission; emission.rateOverTime = 0.0f; emission.burstCount = 1; emission.SetBurst(0, new ParticleSystem.Burst(0.0f, 200, 200, -1, 0.1f));

var shape = ps.shape; shape.shapeType = ParticleSystemShapeType.SingleSidedEdge; shape.radius = 5.0f; shape.radiusMode = ParticleSystemShapeMultiModeValue.BurstSpread; shape.randomPositionAmount = 0.1f; shape.randomDirectionAmount = 0.05f;

var forces = ps.externalForces; forces.enabled = true; }

void Update() { m_ForceField.shape = m_Shape; m_ForceField.startRange = m_StartRange; m_ForceField.endRange = m_EndRange; m_ForceField.directionX = m_Direction.x; m_ForceField.directionY = m_Direction.y; m_ForceField.directionZ = m_Direction.z; m_ForceField.gravity = m_Gravity; m_ForceField.gravityFocus = m_GravityFocus; m_ForceField.rotationSpeed = m_RotationSpeed; m_ForceField.rotationAttraction = m_RotationAttraction; m_ForceField.rotationRandomness = m_RotationRandomness; m_ForceField.drag = m_Drag; m_ForceField.multiplyDragByParticleSize = m_MultiplyDragByParticleSize; m_ForceField.multiplyDragByParticleVelocity = m_MultiplyDragByParticleVelocity; }

void OnGUI() { GUIContent[] shapeLabels = Enum.GetNames(typeof(ParticleSystemForceFieldShape)).Select(n => new GUIContent(n)).ToArray(); m_Shape = (ParticleSystemForceFieldShape)GUI.SelectionGrid(new Rect(25, 25, 400, 25), (int)m_Shape, shapeLabels, 4);

float y = 80.0f; float spacing = 40.0f;

GUI.Label(new Rect(25, y, 140, 30), "Start Range"); m_StartRange = GUI.HorizontalSlider(new Rect(165, y + 5, 100, 30), m_StartRange, 0.0f, 2.0f); y += spacing;

GUI.Label(new Rect(25, y, 140, 30), "End Range"); m_EndRange = GUI.HorizontalSlider(new Rect(165, y + 5, 100, 30), m_EndRange, 2.0f, 3.0f); y += spacing;

GUI.Label(new Rect(25, y, 140, 30), "Direction"); m_Direction.x = GUI.HorizontalSlider(new Rect(165, y + 5, 40, 30), m_Direction.x, -1.0f, 1.0f); m_Direction.y = GUI.HorizontalSlider(new Rect(210, y + 5, 40, 30), m_Direction.y, -1.0f, 1.0f); m_Direction.z = GUI.HorizontalSlider(new Rect(255, y + 5, 40, 30), m_Direction.z, -1.0f, 1.0f); y += spacing;

GUI.Label(new Rect(25, y, 140, 30), "Gravity"); m_Gravity = GUI.HorizontalSlider(new Rect(165, y + 5, 100, 30), m_Gravity, -0.05f, 0.05f); y += spacing;

GUI.Label(new Rect(25, y, 140, 30), "Gravity Focus"); m_GravityFocus = GUI.HorizontalSlider(new Rect(165, y + 5, 100, 30), m_GravityFocus, 0.0f, 1.0f); y += spacing;

GUI.Label(new Rect(25, y, 140, 30), "Rotation Speed"); m_RotationSpeed = GUI.HorizontalSlider(new Rect(165, y + 5, 100, 30), m_RotationSpeed, -10.0f, 10.0f); y += spacing;

GUI.Label(new Rect(25, y, 140, 30), "Rotation Attraction"); m_RotationAttraction = GUI.HorizontalSlider(new Rect(165, y + 5, 100, 30), m_RotationAttraction, 0.0f, 0.01f); y += spacing;

GUI.Label(new Rect(25, y, 140, 30), "Rotation Randomness"); m_RotationRandomness.x = GUI.HorizontalSlider(new Rect(165, y + 5, 60, 30), m_RotationRandomness.x, 0.0f, 1.0f); m_RotationRandomness.y = GUI.HorizontalSlider(new Rect(230, y + 5, 60, 30), m_RotationRandomness.y, 0.0f, 1.0f); y += spacing;

GUI.Label(new Rect(25, y, 140, 30), "Drag"); m_Drag = GUI.HorizontalSlider(new Rect(165, y + 5, 100, 30), m_Drag, 0.0f, 20.0f); y += spacing;

m_MultiplyDragByParticleSize = GUI.Toggle(new Rect(25, y, 220, 30), m_MultiplyDragByParticleSize, "Multiply Drag by Particle Size"); y += spacing;

m_MultiplyDragByParticleVelocity = GUI.Toggle(new Rect(25, y, 220, 30), m_MultiplyDragByParticleVelocity, "Multiply Drag by Particle Velocity"); y += spacing; } }

Свойства

directionX Применяет линейную силу вдоль локальной оси X к частицам в объеме силового поля.
directionY Применяет линейную силу вдоль локальной оси Y к частицам в объеме силового поля.
directionZ Применяет линейную силу вдоль локальной оси Z к частицам в объеме силового поля.
drag Применяет перетаскивание к частицам в объеме силового поля.
endRange Определяет размер формы, используемой для воздействия на частицы.
gravity Применяет гравитацию к частицам в объеме силового поля.
gravityFocus При использовании силы гравитации установите это значение в диапазоне от 0 до 1, чтобы управлять фокусом эффекта гравитации.
length Описывает длину цилиндра при использовании формы силового поля цилиндра для воздействия на частицы.
multiplyDragByParticleSize При использовании перетаскивания сила перетаскивания будет умножаться на размер частиц, если этот переключатель включен.
multiplyDragByParticleVelocity При использовании перетаскивания сила перетаскивания будет умножаться на скорость частиц, если этот переключатель включен.
rotationAttraction Управляет тем, насколько сильно частицы вовлекаются в вихревое движение.
rotationRandomness Применяет случайность к оси силового поля, вокруг которой будут перемещаться частицы.
rotationSpeed Скорость, с которой частицы движутся вокруг вихря.
shape Выбирает тип формы, используемой для воздействия на частицы.
startRange Установка значения больше 0 создает полую форму силового поля. Это приведет к тому, что частицы не будут затронуты силовым полем, если они находятся ближе к центру объема, чем свойство startRange.
vectorField Применяет силы к частицам в объеме силового поля, используя 3D-текстуру, содержащую данные векторного поля.
vectorFieldAttraction Управляет тем, насколько сильно частицы вовлекаются в движение векторного поля.
vectorFieldSpeed Скорость, с которой частицы движутся через векторное поле.

Унаследованные члены

Свойства

enabled Включенные поведения обновляются, отключенные — нет.
isActiveAndEnabled Было ли поведение активным и включенным?
gameObject Игровой объект, к которому прикреплен компонент. Компонент всегда привязан к игровому объекту.
tag Тег игрового объекта.
transform Transform, прикрепленный игровому объекту.
hideFlags Должен ли объект быть скрыт, сохранен вместе со сценой или изменен пользователем?
name Имя объекта

Публичные Методы

BroadcastMessage Вызывает метод с именем methodName для каждого MonoBehaviour в игровом объекте или любом из его дочерних элементов.
CompareTag Помечен ли этот игровой объект тегом?
GetComponent Возвращает компонент, если он прикреплён к игровому объекту, и null, если нет. Также возвращает отключенные компоненты.
GetComponentInChildren Возвращает компонент дочернего элемента игрового объекта, используя поиск в глубину.
GetComponentInParent Возвращает компонент игрового объекта в любом из его родителей.
GetComponents Возвращает все компоненты игрового объекта
GetComponentsInChildren Возвращает все компоненты дочерних элементов игрового объекта. Работает рекурсивно.
GetComponentsInParent Возвращает все компоненты игрового объекта любого из родителя.
SendMessage Вызывает метод с именем methodName для каждого MonoBehaviour в этом игровом объекте.
SendMessageUpwards Вызывает метод с именем methodName для каждого MonoBehaviour в этом игровом объекте и для каждого behaviour.
TryGetComponent Получает компонент указанного типа, если он существует.
GetInstanceID Возвращает идентификатор экземпляра объекта.
ToString Возвращает имя объекта.

Статические Методы

Destroy Удаляет игровой объект, компонент или актив.
DestroyImmediate Уничтожает объект obj. Настоятельно рекомендуется использовать Destroy.
DontDestroyOnLoad Не уничтожает целевой объект при загрузке новой сцены.
FindObjectOfType Возвращает первый активный загруженный объект.
FindObjectsOfType Получает список всех загруженных объектов.
Instantiate Клонирует исходный объект и возвращает клон.

Операторы

bool Объект существует?
operator != Сравнивает, ссылаются ли два объекта на другой объект.
operator == Сравнивает две ссылки на объекты, чтобы определить, ссылаются ли они на один и тот же объект.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3