Önüne bak:
Bu cevap modası geçmiş. Birlik şimdi doğal olarak nokta ışık parçacıklarını destekliyor. Lütfen tüm detaylar için bu cevaba bakınız.
Bunu burada meraklı veya Unity'nin eski sürümlerini kullanan veya yerel yöntemden daha fazla manuel kontrole ihtiyaç duyanlar için burada bırakacağım - yalnızca yerel desteğin aşağıda sunulan yaklaşımdan daha verimli ve ölçeklenebilir olabileceğini unutmayın.
Neden bu kadar çok cevabın bunun zor ya da imkansız olduğunu iddia ettiğinden emin değilim. Birkaç düzine dinamik nokta ışığının kullanılması, kullanmak, PC'de çalışan modern bir ertelenmiş işleme hattı .
İşte pişirdiğim hızlı bir örnek:
Bu betiği, maksimum parçacıklarım için yeterince ışık üretmek için dinamik bir şekilde üretmek için kullanıyorum (Partikül Sistem ayarlarınızı ayarladığınızdan emin olun, bu nedenle maksimum makul olur - 1000'in varsayılanı, grafik kartınızı çok mutlu etmez) ve ardından aktif olanları takip edecek şekilde günceller. parçacıklar:
[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);
}
}
}
Düzenleme: önce bir oyun nesnesi oluşturarak (bu durumda, Oluştur -> Işık -> Nokta Işığı), onu istediğiniz ad / parametreler / komut dosyaları / çocuklar ile ayarlayıp ardından Hiyerarşinizden sürükleyerek bir prefabrik oluşturabilirsiniz. Proje gezgini. Bu, nesneyi birden fazla sahne ve komut dosyasında, bir kalıtım derecesiyle yeniden kullanabileceğiniz bir varlık olarak kaydeder. Sahnenizdeki kopyayı silebilirsiniz; varlık gerektiğinde başvurulacak Varlıklar klasörünüzde kalır.
LightPrefab'in göreceli olarak daha küçük bir aralığa sahip olduğundan ve sahnenizde olup biten her şey için en iyi performans alanını sağlamak için gölge yayını yapmadığından emin olun. LightPrefab'in kendisini yeşil (veya ateş böceklerinin rengini) yapmanıza gerek yoktur - onu parçacıkların renginden alır.
Her ikisini de kendi GameObject'i yaparsanız, ateşli uçakların uçuşu üzerinde daha iyi bir kontrole sahip olduğunuzu öğrenebilirsiniz, ancak bir reklam panosu ve özel bir hareket / yanıp sönen senaryo ile tutturulmuş bir ışıkla Biliyorum. ;)