Описание
Определяет текстуру для окрашивания начальных цветов частицы.
Чтобы подкрасить начальный цвет частиц, модуль Shape считывает пиксели из этой Текстуры на ЦП. Это означает, что вы должны включить параметр чтения/записи в назначенных настройках импорта текстуры.
Чтобы подкрасить частицы, модуль Shape сначала растягивает текстуру по заданной вами форме. Затем, когда система испускает частицу из точки на фигуре, модуль Shape использует цвет текстуры в этом месте в качестве цвета частицы.
Чтобы увидеть, как текстура растягивается по фигуре, выберите систему частиц в представлении «Иерархия» и разверните модуль «Форма». Визуализация формы в представлении «Сцена» включает в себя предварительный просмотр текстуры.
using UnityEditor;
using UnityEngine;
[RequireComponent(typeof(ParticleSystem))]
public class ExampleClass : MonoBehaviour
{
private ParticleSystem ps;
public float alphaThreshold = 0.0f;
public bool colorAffectsParticles = true;
public bool alphaAffectsParticles = true;
public bool bilinearFiltering = false;
void Start()
{
ps = GetComponent<ParticleSystem>();
var main = ps.main;
main.startSpeed = 0.0f;
main.startSize = 0.5f;
main.startLifetime = 1.0f;
var emission = ps.emission;
emission.rateOverTime = 500.0f;
var shape = ps.shape;
shape.shapeType = ParticleSystemShapeType.Circle;
shape.radius = 6.0f;
shape.texture = AssetDatabase.GetBuiltinExtraResource<Texture2D>("Default-Particle.psd");
}
void Update()
{
var shape = ps.shape;
shape.textureClipThreshold = alphaThreshold;
shape.textureColorAffectsParticles = colorAffectsParticles;
shape.textureAlphaAffectsParticles = alphaAffectsParticles;
shape.textureBilinearFiltering = bilinearFiltering;
}
void OnGUI()
{
float y = 120.0f;
float spacing = 40.0f;
GUI.Label(new Rect(25, y, 140, 30), "Alpha Threshold");
alphaThreshold = GUI.HorizontalSlider(new Rect(165, y + 5, 100, 30), alphaThreshold, 0.0f, 1.0f);
y += spacing;
colorAffectsParticles = GUI.Toggle(new Rect(25, y + 5, 200, 30), colorAffectsParticles, "Color Affects Particles");
y += spacing;
alphaAffectsParticles = GUI.Toggle(new Rect(25, y + 5, 200, 30), alphaAffectsParticles, "Alpha Affects Particles");
y += spacing;
bilinearFiltering = GUI.Toggle(new Rect(25, y + 5, 200, 30), bilinearFiltering, "Bilinear Filtering");
y += spacing;
}
}