Tại sao prefabs tăng tốc độ tải?


8

Tôi có một cảnh với một địa hình rộng lớn. Phải mất một thời gian dài để tải (khoảng 60 giây) khi tôi nhấn play. Tôi đang trong biên tập.

Tôi đã chuẩn bị trước nó.

Bây giờ chỉ mất khoảng 5 giây để tải khi tôi nhấn play. Tại sao?

Dự đoán tốt nhất của tôi là có một số tải trước được thực hiện khi nó được cài sẵn, nhưng chỉ mất vài giây để làm sẵn nó. Vì vậy, đó không thể là lý do. Có ý kiến ​​gì không? Tôi đang thua lỗ.


4
Dự đoán tốt nhất của tôi là, ngay trước khi chạy, Unity lưu lại trạng thái hiện tại của cảnh trong trình chỉnh sửa, để khi bạn dừng trò chơi, nó có thể đưa mọi thứ trở lại như cũ (ngay cả khi bạn có những thay đổi chưa xảy ra lưu vào tập tin cảnh trên đĩa). Bằng cách giảm tải địa hình lớn cho prefab, nó không cần phải trải qua bước lưu trữ này, điều này có thể tăng tốc mọi thứ. Tôi đã không kiểm tra giả thuyết này mặc dù.
DMGregory

2
Bạn đang nói về biên tập viên hoặc một dự án tuân thủ? Trong trường hợp tệp exe, nó thực sự không quan trọng đến mức đó (chưa được kiểm tra) nhưng trình chỉnh sửa không nên có sẵn bộ đệm. Prefabs nên có điều đó mặc dù và điều đó có thể tăng tốc mọi thứ trong trình chỉnh sửa. (Tất cả điều này chỉ là suy đoán, chưa thực sự được thử nghiệm.)
John Hamilton

@ John John Hamilton Trong trình chỉnh sửa
Evorlor

1
Nếu tôi không sai, prefab là tĩnh trong sự thống nhất, vì vậy có khả năng cao chúng sẽ được tải ngay từ đầu, vì vậy khi bạn tải địa hình của mình, nó đã có trong bộ nhớ.
TomTsagk

Câu trả lời:


0

Prefabs là gì

Các tài liệu Unity cho Prefabs chỉ đơn giản mô tả nó như là

Một mẫu mà từ đó bạn có thể tạo các thể hiện đối tượng mới trong cảnh. Mọi chỉnh sửa được thực hiện đối với tài sản prefab ngay lập tức được phản ánh trong tất cả các phiên bản được tạo từ nó nhưng bạn cũng có thể ghi đè các thành phần và cài đặt cho từng phiên bản riêng lẻ.

Nó ảnh hưởng đến hiệu suất như thế nào

Kinh nghiệm của tôi cho biết, nó không. Vì google không chỉ ra bất kỳ phân tích cứng nhắc nào về việc liệu prefabs có cải thiện hiệu suất hay không và tôi đã thực hiện bất kỳ thử nghiệm nào liên quan đến vấn đề này, câu hỏi Unity answer.com này giải thích như sau:

Không có gì kỳ diệu về prefabs; chúng chỉ đơn giản là một sự tiện lợi. Không có sự khác biệt về hiệu suất giữa việc đặt hai hình khối vào một cảnh, hoặc tạo một prefab ra khỏi khối và sau đó đặt hai khối prefab vào cảnh.

Đó là tất cả. Nếu có bất kỳ báo cáo hoặc phân tích cải tiến hiệu suất hoặc bất cứ điều gì liên quan đến điều này, tôi cũng có thể muốn biết về nó. Cảm ơn bạn.

EDIT: Tôi đã thử những gì bạn nói, đã tạo ra một địa hình 50 nghìn x 50 nghìn với độ phân giải chiều cao 512 (không thể cao hơn nữa).

  1. Nhấn nút phát đầu tiên ~ 5 giây
  2. Nhấn nút phát lần thứ hai ~ 4-5 giây (đại khái)
  3. Prefabbed nó và nhấn Play ~ 4-5 giây
  4. Đợi một lúc, có thể là 5 phút và nhấn chơi 2-3 giây

Sự khác biệt về thời gian không đáng kể nhưng đây là những gì tôi nhận thấy. Bất cứ khi nào bạn thay đổi cài đặt Địa hình, ở góc dưới bên phải, sẽ có một số xử lý xảy ra. Nếu bạn để nó hoàn thành, thời gian khởi động sẽ giảm.

Đây là những gì nó trông giống như:

nhập mô tả hình ảnh ở đây

Tôi không biết cài đặt địa hình của bạn và mức độ phức tạp của nó nhưng từ đó tôi có thể suy luận rằng việc xử lý dưới cùng bên phải có thể là điều quản lý thời gian tải. Nó có thể đang tải trong bộ nhớ và có thể thực hiện một số tính toán / xử lý một lần.


2
Đây là thông tin tốt, nhưng nó không giải thích được hiện tượng mà OP mô tả. Bạn có biết điều gì khiến cảnh của họ tải nhanh hơn đáng kể khi nhấn play trong Trình chỉnh sửa sau khi họ lưu địa hình của họ dưới dạng prefab không?
DMGregory

Chỉnh sửa câu trả lời. Có thể giúp đỡ ngay bây giờ
Hasnain NoOrani

1
FYI, thanh quá trình mà bạn nhìn thấy là nướng nhẹ không đồng bộ.
DMGregory

Sau đó, tôi đoán tôi không chắc về điều đó vì tôi đã thử điều tương tự, nhưng thực sự không có thay đổi nào về thời gian đối với tôi.
Hasnain NoOrani

Bỏ qua bình luận 'cụm 5/11 việc làm'. Đó là sự thống nhất nướng Bản đồ Ánh sáng và KHÔNG CÓ gì để làm với hiệu suất prefab mà bạn đang thảo luận. Tôi không thể nhận xét về hiệu suất Prefab, nhưng muốn biết liệu họ có giúp đỡ không. Tôi hy vọng họ làm, có vẻ như nó sẽ có ý nghĩa. Bất kỳ thông tin bạn có thể chia sẻ về điều này sẽ được đánh giá cao.
AllanMac

-1

phụ gia cho người khác trả lời. chúng tôi có mô hình cân nặng liên quan đến bộ nhớ và tối ưu hóa. khi bạn có nhiều đối tượng, mô hình bay bổng, chia sẻ cùng một dữ liệu trong cùng một bộ nhớ và phân bổ bộ nhớ cho các tính năng mới hoặc khác nhau. unity3d sử dụng mẫu này để làm việc với prefabs.

Cách tiếp cận khác là trong lập trình, nhân bản nhanh hơn nhiều với sự phân bổ ít hơn so với việc tạo ra toàn bộ đối tượng mới. trong c # MemberWiseClone của nó và khởi tạo trong Unity


1
Bạn có một trích dẫn cho tuyên bố rằng prefabs đại diện cho việc sử dụng mô hình bay bổng và không chỉ đơn giản là sao chép vào cảnh không?
DMGregory

@DMGregory tôi đã thấy một số đề cập trong một hướng dẫn nhưng rõ ràng. thêm tài nguyên bên ngoài vào các dự án của bạn sẽ tăng kích thước dự án của bạn nhưng chúng tôi không bổ sung quá nhiều khi sử dụng nhiều prefab hoặc cảnh, chúng không chỉ là một trường hợp. chỉ các đối tượng phụ chia sẻ prefab chính. Bạn nghĩ rằng sự thống nhất tải toàn bộ kết cấu và ... của một đối tượng cho mỗi người trong số họ? tôi tin rằng một số loại hạng ruồi chắc chắn được sử dụng trong sự hiệp nhất prefabing
virtouso

2
Unity không tải một bản sao riêng biệt của một kết cấu cho bất kỳ đối tượng nào, prefabs hoặc không. Hoạ tiết hoàn toàn sử dụng mô hình cân nặng. Nhưng prefabs bao gồm rất nhiều thứ không phải là kết cấu: GameObjects và Thành phần phải được sao chép để tạo phiên bản mới. Không rõ ràng tại sao các bản sao đầy đủ của các đối tượng này sẽ tải nhanh hơn các đối tượng cảnh thông thường khi thử nghiệm trong trình chỉnh sửa. Vì vậy, chúng ta cần đào sâu hơn một chút vào can đảm để tìm hiểu điều gì khác biệt.
DMGregory

-4

Prefab chỉ dành cho khả năng sử dụng lại và cho một nhiệm vụ lặp lại, nó không có bất kỳ kết nối nào với tiền xử lý. Khi quá trình kết xuất xảy ra với bất kỳ đối tượng trò chơi nào và nó có bất kỳ truy xuất nào đến bảng thống nhất dự án, hãy tạo tệp meta của nó và lưu trữ một số thông tin trên đó và cho lần tiếp theo Unity sử dụng thông tin đó cho lần tiếp theo.


6
Tôi đã cố gắng chỉnh sửa câu hỏi của bạn để dễ đọc .. nhưng bạn hoàn toàn mất tôi, sau câu đầu tiên. "Khi quá trình kết xuất (?) Xảy ra với bất kỳ (các) trò chơi nào .." là khoảng thời gian tôi nhận được trước khi tôi không thể hiểu ý nghĩa của câu trả lời này. Tôi tin rằng bạn có nghĩa là tốt, nhưng một câu trả lời không thể đọc được chỉ đơn giản là không có ích.
Gnemlock

1
Xin lỗi vì sự bất tiện này tôi có thể cố gắng cải thiện câu trả lời của mình.
ramesh
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.