Làm cách nào để tắt đèn trong Unity3D?


9

Trước hết, tôi sở hữu Unity Pro.

Tôi đã tìm cách che khuất ánh sáng khi chúng không được xem trong một thời gian để cải thiện hiệu suất. Các phương pháp chính mà tôi đã sử dụng là sử dụng BecameVisible () và thử nghiệm sự thất vọng của máy ảnh.

Vấn đề chính của tôi là nếu người chơi đang xem một khu vực sẽ được thắp sáng bởi ánh sáng, tôi vẫn muốn đèn sáng.

Hiện tại tôi đang sử dụng một phương pháp kiểm tra xem khu vực sáng có nằm trong máy ảnh hay không, nhưng vấn đề là đôi khi ánh sáng ở trong sự thất vọng mà người chơi không thực sự nhìn thấy (ví dụ như một bức tường giữa họ và người chơi). Tôi đã thử chiếu tia tới chúng nhưng bạn không bao giờ có thể có đủ chi tiết cho vùng sáng thực tế (điều tốt nhất tôi có thể hình là sử dụng renderer.bound.extent và renderer.bound.center để tính điểm sáng tối đa từ ánh sáng).

Có ai biết một cách dễ dàng trong Unity Pro để tắt đèn không? Hoặc bạn có thể cho tôi biết một cách tốt để sử dụng phương pháp điểm tựa máy ảnh mà tôi đang nói đến không?


1
Bạn có thể kiểm tra xem sự thất vọng của máy ảnh và sự thất vọng của đèn có giao nhau không, nhưng tôi hy vọng sự thống nhất đã được thực hiện.
Archy

1
Trong Unity Pro, OcinatingCulling cũng nên xử lý đèn.
Archy

Được rồi, nghệ sĩ của tôi đã nói rằng Ocinating Culling sẽ không hoạt động cho ánh sáng. Vì vậy, có lẽ tôi chỉ đặt các nguồn sáng khác nhau của mình là các vùng kín trong các khu vực tắc mà tôi đã thiết lập?
Timothy Williams

Và một cái gì đó như kiểm tra máy ảnh và sự thất vọng nhẹ đối với nhau có thể hoạt động, mặc dù tôi cần nó hoạt động ở 360 độ.
Timothy Williams

Loại trừ loại trừ dường như không hoạt động với ánh sáng, mặc dù những gì các nghệ sĩ và tôi cố gắng. Làm thế nào chính xác tôi sẽ che khuất một ánh sáng?
Timothy Williams

Câu trả lời:


1

Bạn có thể viết kịch bản của riêng bạn để ngăn chặn ánh sáng. Một cái gì đó như thế này được gắn vào máy ảnh chính:

List<Light> Lights = new List<Light>();
const float OccludeDist = 100;
void Update()
{
    foreach (Light light in Lights)
    {
        if ((transform.position - light.transform.position).sqrMagnitude > OccludeDist * OccludeDist))
        {
            light.enabled = false;
        }
        else{
            light.enabled = true;
        }
    }
}

Bạn cũng có thể kiểm tra xem điểm có nằm trong một góc trên trục Y của máy ảnh không (các trục khác sẽ khiến bạn đau). Hãy hào phóng một chút với góc chụp, có thể gấp 2 lần sự bực bội của máy ảnh, để đèn không tắt khi chúng là khu vực chiếu sáng trong tầm nhìn của máy ảnh. Nếu bạn chọn thêm tối ưu hóa bổ sung này (có lẽ sẽ không cần thiết), hãy đảm bảo bạn sử dụng khoảng cách làm broadphase vì nó ít tốn kém hơn.


Đẹp và đơn giản :)
Ḟḹáḿíṅḡ ỏḿƀíé
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.