Đứng lên:
Câu trả lời này đã lỗi thời. Unity hiện hỗ trợ các hạt ánh sáng tự nhiên. Xin vui lòng xem câu trả lời này để biết chi tiết đầy đủ.
Tôi sẽ để lại bài đăng này ở đây cho bất kỳ ai tò mò hoặc sử dụng các phiên bản cũ của Unity hoặc cần kiểm soát thủ công nhiều hơn so với phương thức gốc - chỉ cần lưu ý rằng hỗ trợ gốc có thể hiệu quả và có thể mở rộng hơn nhiều so với phương pháp được trình bày dưới đây.
Tôi không chắc tại sao rất nhiều câu trả lời khẳng định điều này là khó hoặc không thể. Xử lý một vài chục đèn điểm động là khá thông thường đối với đường ống kết xuất hoãn lại hiện đại chạy trên PC.
Đây là một ví dụ nhanh tôi đã nấu lên:
Tôi sử dụng tập lệnh này để tự động sinh ra đủ ánh sáng cho các hạt tối đa của mình (đảm bảo bạn điều chỉnh cài đặt Hệ thống hạt của mình sao cho mức tối đa hợp lý - mặc định 1000 sẽ không làm cho card đồ họa của bạn rất hài lòng), và sau đó cập nhật chúng để theo dõi hoạt động các hạt:
[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);
}
}
}
Chỉnh sửa: bạn có thể tạo prefab bằng cách trước tiên tạo một đối tượng trò chơi (trong trường hợp này là Tạo -> Ánh sáng -> Ánh sáng điểm), thiết lập nó với tên / tham số / tập lệnh / con bạn muốn, sau đó kéo nó từ Phân cấp của bạn vào thám hiểm dự án của bạn. Điều này lưu đối tượng dưới dạng một tài sản mà bạn có thể sử dụng lại trên nhiều cảnh & tập lệnh, với mức độ kế thừa. Bạn có thể xóa bản sao trong cảnh của mình và tài sản sẽ vẫn còn trong thư mục Tài sản của bạn để được tham chiếu khi cần.
Đảm bảo lightPrefab có phạm vi tương đối nhỏ và không bị bóng đè, để cung cấp cho bạn khoảng không hiệu suất cao nhất cho mọi thứ diễn ra trong cảnh của bạn. Bạn không cần phải làm cho lightPrefab tự xanh (hoặc màu của đom đóm) - nó sẽ lấy nó từ màu của các hạt.
Bạn có thể thấy rằng bạn có quyền kiểm soát tốt hơn đối với chuyến bay của đom đóm nếu bạn tạo cho mỗi GameObject của riêng mình, với một hình tứ giác và một ánh sáng được gắn với một kịch bản chuyển động / chớp mắt tùy chỉnh, vì việc đi lang thang có sức thuyết phục mang nhiều tính nghệ thuật của hệ thống hạt hơn Tôi biết. ;)