सचेत:
यह उत्तर पुराना है। एकता अब मूल रूप से बिंदु प्रकाश कणों का समर्थन करती है। कृपया पूर्ण विवरण के लिए इस उत्तर को देखें।
मैं इसे किसी भी उत्सुक व्यक्ति के लिए, या एकता के पुराने संस्करणों का उपयोग करके, या देशी विधि ऑफ़र की तुलना में अधिक मैन्युअल नियंत्रण की आवश्यकता के बाद यहां छोड़ दूंगा - बस ध्यान दें कि नीचे दिए गए दृष्टिकोण की तुलना में मूल समर्थन बहुत अधिक कुशल और स्केलेबल होने की संभावना है।
मुझे यकीन नहीं है कि इतने सारे उत्तर दावा करते हैं कि यह मुश्किल या असंभव है। कुछ दर्जन गतिशील बिंदु रोशनी को संभालना एक आधुनिक आस्थगित रेंडरिंग पाइपलाइन के लिए बहुत पारंपरिक है पीसी पर चलने वाली ।
यहाँ एक त्वरित उदाहरण है जिसे मैंने पकाया है:
मैं अपने अधिकतम कणों के लिए डायनेमिक रूप से पर्याप्त रोशनी के लिए इस स्क्रिप्ट का उपयोग करता हूं (सुनिश्चित करें कि आप अपने कण सिस्टम सेटिंग्स को समायोजित करते हैं ताकि अधिकतम उचित हो - 1000 का डिफ़ॉल्ट आपके ग्राफिक्स कार्ड को बहुत खुश नहीं करेगा), और फिर सक्रिय का पालन करने के लिए उन्हें अपडेट करता है। कणों:
[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);
}
}
}
संपादित करें: आप एक बना सकते हैं पहले गेम ऑब्जेक्ट (इस मामले में, बनाएं -> लाइट -> प्वाइंट लाइट) बनाकर प्रीफैब हैं, इसे अपने इच्छित नाम / पैरामीटर / स्क्रिप्ट / बच्चों के साथ सेट कर सकते हैं, फिर इसे अपने पदानुक्रम से खींच सकते हैं आपका प्रोजेक्ट एक्सप्लोरर यह ऑब्जेक्ट को एक परिसंपत्ति के रूप में सहेजता है जिसे आप कई दृश्यों और लिपियों में पुन: उपयोग कर सकते हैं, विरासत की डिग्री के साथ। आप अपने दृश्य में प्रतिलिपि हटा सकते हैं और परिसंपत्ति जरूरत पड़ने पर संदर्भित करने के लिए आपके संपत्ति फ़ोल्डर में रहेगी।
सुनिश्चित करें कि lightPrefab में एक अपेक्षाकृत छोटी रेंज है और यह छायांकन नहीं है, जिससे आपको अपने दृश्य में चल रही हर चीज के लिए सबसे अधिक प्रदर्शन हेडरूम मिल सके। आपको लाइटप्रेब को खुद हरा (या आपके फायरफ्लाइज़ का रंग) बनाने की ज़रूरत नहीं है - यह इसे कणों के रंग से उठाएगा।
आप पा सकते हैं कि अगर आप हर एक को अपनी खुद की गेमऑबजेक्ट पर बेहतर नियंत्रण रखते हैं, तो एक बिलबोर्ड क्वाड और एक लाइट के साथ एक कस्टम आंदोलन / ब्लिंक लिपि के साथ जुड़ा हुआ है, क्योंकि एक भटकने वाली भटकने से एक कण प्रणाली कलात्मकता लेता है। मुझे पता है। ;)