Head-Up:
Jawaban ini sudah usang. Persatuan sekarang mendukung partikel titik cahaya secara asli. Silakan lihat jawaban ini untuk perincian lengkap.
Saya akan meninggalkan posting ini di sini untuk siapa pun yang ingin tahu, atau menggunakan Unity versi lama, atau membutuhkan lebih banyak kontrol manual daripada yang ditawarkan metode asli - cukup perhatikan bahwa dukungan asli cenderung jauh lebih efisien dan terukur daripada pendekatan yang disajikan di bawah ini.
Saya tidak yakin mengapa begitu banyak jawaban mengklaim ini sulit atau tidak mungkin. Menangani beberapa lusin lampu titik dinamis cukup konvensional untuk pipa render yang ditangguhkan modern berjalan pada PC.
Berikut adalah contoh cepat yang saya buat:
Saya menggunakan skrip ini untuk secara dinamis memunculkan cukup lampu untuk partikel maks saya (pastikan Anda menyesuaikan pengaturan Sistem Partikel Anda sehingga maks masuk akal - standar 1000 tidak akan membuat kartu grafis Anda sangat bahagia), dan kemudian memperbarui mereka untuk mengikuti aktif partikel:
[RequireComponent(typeof(ParticleSystem))]
public class ParticleLights : MonoBehaviour {
public Light lightPrefab;
ParticleSystem _system;
ParticleSystem.Particle[] _particles;
Light[] _lights;
void Start () {
_system = GetComponent<ParticleSystem>();
_particles = new ParticleSystem.Particle[_system.maxParticles];
_lights = new Light[_system.maxParticles];
for(int i = 0; i < _lights.Length; i++)
{
_lights[i] = (Light)Instantiate(lightPrefab);
_lights[i].transform.parent = transform;
}
}
void Update () {
int count = _system.GetParticles(_particles);
for(int i = 0; i < count; i++)
{
_lights[i].gameObject.SetActive(true);
_lights[i].transform.localPosition = _particles[i].position;
// Looks like the GetCurrentColor function was added in 5.3.
// You can use other methods in earlier Unity versions.
_lights[i].color = _particles[i].GetCurrentColor(_system);
}
for (int i = count; i < _particles.Length; i++)
{
_lights[i].gameObject.SetActive(false);
}
}
}
Sunting: Anda dapat membuat cetakan dengan terlebih dahulu membuat objek game (dalam hal ini, Buat -> Cahaya -> Cahaya Titik), mengaturnya dengan nama / parameter / skrip / anak-anak yang Anda inginkan, kemudian menyeretnya dari Hierarki ke dalam Penjelajah Proyek Anda. Ini menyimpan objek sebagai aset yang dapat Anda gunakan kembali di banyak layar & skrip, dengan tingkat pewarisan. Anda dapat menghapus salinan di adegan Anda dan aset akan tetap di folder Aset Anda untuk direferensikan saat diperlukan.
Pastikan lightPrefab memiliki jangkauan yang relatif kecil dan tidak membayangi, untuk memberi Anda ruang kepala paling berkinerja untuk semua yang terjadi dalam adegan Anda. Anda tidak perlu membuat lightPrefab itu sendiri hijau (atau warna kunang-kunang) - itu akan mengambilnya dari warna partikel.
Anda mungkin menemukan bahwa Anda memiliki kontrol yang lebih baik terhadap penerbangan kunang-kunang jika Anda membuat masing-masing GameObject sendiri, dengan quad billboard dan lampu yang terpasang dengan skrip pergerakan / blinkig kustom, karena mendapatkan penjelajahan yang meyakinkan membutuhkan lebih banyak sistem sistem partikel daripada Aku tahu. ;)