Các đối tượng trò chơi nằm ngoài chế độ xem camera có tiêu tốn tài nguyên máy tính / di động trong Unity không?


11

Để thống nhất, chúng ta hãy giả sử rằng tôi có một số Đối tượng trò chơi trong cảnh mà máy ảnh không nhìn thấy được và do đó không được hiển thị trong khi trò chơi đang chạy.

Các đối tượng trò chơi này có tiêu tốn tài nguyên máy tính / di động khi trò chơi đang chạy không?

Tôi có thể tìm chi tiết về cách sử dụng như thế này ở đâu?

Câu trả lời:


13

Những gì bạn muốn là một hồ sơ bộ nhớ, mà Unity không có. Tại đây: http://docs.unity3d.com/Manual/ProfilerMemory.html

Nhưng giả định của bạn chủ yếu là đúng, nếu gameObject không hiển thị với máy ảnh thì nó không được vẽ và nó sử dụng ít tài nguyên hơn, nhưng nó vẫn phải tiêu thụ một số. GameObject vẫn tồn tại trong bộ nhớ, bao gồm tất cả các kết cấu, mô hình tập lệnh, v.v. nó vẫn tiêu tốn thời gian của CPU thông qua các phương thức Update và FixedUpdate (và nhiều cách khác được mô tả ở đây ).

Nhưng thông thường, sự chậm lại chính là bản vẽ, một lượng nhỏ thời gian CPU được sử dụng để xác định rằng đối tượng nằm ngoài máy ảnh (giới hạn), nhưng không có bản vẽ nào được thực hiện.


5

Tôi nghĩ bạn cũng nên biết về Frustrum Culling, hoặc che giấu việc loại bỏ bề mặt: http://en.wikipedia.org/wiki/Hidden_surface_determination

Đây là một phần quan trọng của việc tối ưu hóa trò chơi, bởi vì ngay cả khi các đối tượng của bạn không ở trong trạng thái bực bội ở một khung nhất định (có thể nhìn thấy), một số lệnh rút thăm (shader) vẫn được khởi chạy cho chúng, do đó làm giảm hiệu suất.


2
@ Gissipi_453, trong khi nghiên cứu dọc theo các dòng này, cũng nghiên cứu cây tứ giác và cây tám (sắp xếp dữ liệu không gian)
Jon

3

Câu trả lời ngắn gọn là có"; bất cứ thứ gì đã sẵn sàng để sử dụng trong trò chơi của bạn đều chiếm bộ nhớ.

Điều khác cần xem xét là chi phí cho tốc độ khung hình của bạn:

5 đối tượng, với 5 kết cấu riêng biệt, được vẽ riêng đòi hỏi phải thay đổi trạng thái ở giữa. Bạn có thể lưu một số bộ nhớ bằng cách dỡ các kết cấu không được sử dụng.

Bằng cách tải tất cả các kết cấu riêng biệt vào một kết cấu bản đồ duy nhất, dấu chân bộ nhớ sẽ được cố định và bạn không còn có thể dỡ một kết cấu riêng lẻ. Sau khi tạo, bạn chỉ phải liên kết tập bản đồ một lần để vẽ tất cả các đối tượng của mình.

Một ví dụ khác là bộ đệm đỉnh và chỉ mục đơn giản. Nếu nhiều điểm thường xuyên chuyển đổi giữa hiển thị và không nhìn thấy, thì nhanh hơn để lại các điểm "cũ" trong bộ đệm đỉnh và chỉ tải lên bộ đệm chỉ mục mới.

Có nhiều lần khác khi chi phí bộ nhớ phía trước tăng lên thích hợp hơn với nhiều thay đổi trạng thái.

Nếu bạn xoay máy ảnh của mình, bạn chắc chắn sẽ không phá hủy các đối tượng đó trừ khi bạn biết, máy ảnh đó sẽ không quay lại để kiểm tra đối tượng đó. "- Katu

Lấy ví dụ về bộ cuộn bên cạnh, nếu bạn chỉ có thể di chuyển sang phải (bản đồ chỉ cuộn sang bên trái), bất kỳ đối tượng nào cuộn khỏi phía bên trái của màn hình có thể được tải vĩnh viễn vì bạn sẽ không bao giờ sử dụng lại. Ngoài ra, nội dung cho các đối tượng có thể được tải theo yêu cầu ngay trước khi đối tượng cuộn vào xem từ bên phải.


1

Rất nhiều câu trả lời chủ yếu là xem xét khía cạnh đồ họa của câu hỏi của bạn.

Thực tế là chúng sẽ chiếm nhiều tài nguyên khác nhau và chúng đắt như thế nào so với việc vẽ đối tượng không cố định. Điều này không phổ biến như một số câu trả lời ngụ ý cho các thành phần của bạn thực hiện các hoạt động đắt tiền hơn so với vẽ, nhưng bạn có thể giảm thiểu số lượng tài nguyên mà chúng sử dụng. Ngoài ra, hãy nhớ rằng GameObject chiếm một lượng nhỏ bộ nhớ và các thành phần của nó cũng vậy. Các thành phần cũng có thể đang làm những việc chiếm một chút bộ nhớ.

Cách đơn giản nhất để giảm thiểu ảnh hưởng của các thành phần off-màn hình là một hệ thống dựa trên OnBecameVisibleOnBecameInvisible callbacks.

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

Tất nhiên, đó là tính hữu dụng rất hạn chế vì có nhiều lúc bạn sẽ muốn một vật thể ngoài màn hình ảnh hưởng đến trò chơi. Nhưng bạn có thể mở rộng trên một mô hình loại này cho một hệ thống hạt mịn có khả năng giảm thiểu ảnh hưởng của các tính toán đắt tiền nhất của bạn. Ngay cả một cái gì đó đơn giản như giảm một cái gì đó như chất lượng của một đường dẫn theo kịch bản khi đối tượng ở ngoài màn hình có thể dẫn đến tiết kiệm lớn trong thời gian dài.


1

Nó cần bộ nhớ để giữ cho nó sống và cập nhật vị trí của nó và các thuộc tính khác.

Nhưng nó không tiêu thụ tài nguyên đồ họa máy tính / di động vì nó không nhìn thấy được.

Vì vậy, có, nó tiêu thụ tài nguyên bộ nhớ nhưng không sử dụng tài nguyên đồ họa như Game Object có thể nhìn thấy.


Cảm ơn rất nhiều. Đây là một câu trả lời rất trực tiếp tôi đang tìm kiếm.
Gissipi_453

0

Bất cứ điều gì trong một chương trình đều tiêu tốn tài nguyên; Bạn không nghĩ rằng các chương trình chạy trên hy vọng và ước mơ đơn giản, phải không?

Câu hỏi nên là một đối tượng trò chơi tiêu thụ bao nhiêu tài nguyên và đến cuối cùng tôi nghĩ đây là một câu trả lời khá chắc chắn: http://answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- tiêu dùng.html

Nói tóm lại, họ tự tiêu thụ tài nguyên không đáng kể. Nhưng tại sao bạn lại muốn một loạt các đối tượng trò chơi chỉ ngồi trong trò chơi của bạn không làm gì cả? Vào cuối ngày, những gì bạn thực sự làm cho các đối tượng trò chơi đó 'làm', là những gì sẽ gây ra bất kỳ loại chi phí nào - và bao nhiêu tài nguyên đòi hỏi rất nhiều trong từng trường hợp.


Cảm ơn rât nhiều. Vậy tôi có nên tiêu diệt những vật thể khuất khỏi tầm nhìn của camera trong khi trò chơi đang chạy không?
Gissipi_453

1
Tôi nghĩ rằng câu trả lời này không thực sự cố gắng trả lời câu hỏi của bạn và do đó hoàn toàn sai. Nếu bạn xoay máy ảnh của mình, bạn chắc chắn sẽ không phá hủy các đối tượng đó trừ khi bạn biết, máy ảnh đó sẽ không quay lại để kiểm tra đối tượng đó. Thế giới trò chơi tồn tại và sự di chuyển của AI, ánh sáng ảnh hưởng đến môi trường, ngay cả khi bạn không nhìn thấy chúng.
Katu

@Katu, đó cũng là một điểm. Cảm ơn. Trừ khi đối tượng không cần thiết phải được hiển thị, tôi không nên phá hủy nó.
Gissipi_453

@Katu Tôi đã trả lời câu hỏi: "Các đối tượng trò chơi này (Các đối tượng trong cảnh của tôi không hiển thị với máy ảnh) có tiêu tốn tài nguyên máy tính / di động khi trò chơi đang chạy không?" Câu trả lời đó là: "Có. Bất cứ điều gì trong một chương trình đều tiêu tốn tài nguyên". Và tôi tiếp tục giải thích về tác động của các đối tượng trò chơi trống trong bối cảnh và chi phí tài nguyên.
trả lại đúng

2
@ Gissipi_453 Để trả lời câu hỏi của bạn, điều đó phụ thuộc hoàn toàn vào các đối tượng trò chơi trong cảnh thực sự đang làm gì, tần suất chúng được tạo / xóa và các cân nhắc khác. Biết khi nào cần tối ưu hóa là một kỹ năng, nhưng nguyên tắc chung là không lo lắng về nó, cho đến khi có điều gì đó phải lo lắng. Chi phí hoạt động của các đối tượng trò chơi phụ gần như không có gì, vì vậy đừng lo lắng. Trong một số trường hợp, nếu bạn thêm / xóa đối tượng thường xuyên, nhóm đối tượng có thể là một trình tiết kiệm cuộc sống và trong các trường hợp khác, bạn có thể thực hiện các thủ thuật khác. Tất cả phụ thuộc vào nếu có và chính xác vấn đề là gì.
trả lại đúng
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.