Tôi có thể chạy tập lệnh tải của riêng mình trong màn hình giới thiệu Unity không?


10

Tôi có thể tải dữ liệu ở chế độ nền trong khi màn hình giật gân Unity không? Nếu vậy thì thế nào?

Tôi đang cố gắng chạy mã trong màn hình giật gân, không chỉ tải tài sản.

Tôi chưa thể tìm thấy bất kỳ thông tin nào về điều này trong Google hoặc Tài liệu thống nhất .


2
Tôi nghĩ Unity đã tải toàn bộ ứng dụng của bạn khi màn hình giật gân hiển thị. Tôi không nghĩ những gì bạn muốn làm là có thể, nhưng tôi rất muốn bị sai lần này.
Hellium

2
Điều này cảm thấy giống như một chút vấn đề XY: tại sao bạn muốn tải nội dung trong màn hình đó?
doppelgreener

1
Bất cứ điều gì bạn đặt trong cảnh đầu tiên của trò chơi của bạn được tải trong khi màn hình giật gân đó lên, phải không? Vì vậy, sẽ không đủ để bao gồm nội dung mà bạn muốn tải trong cảnh đầu tiên đó (ngoài máy ảnh, bị tắt hoặc chỉ được tham chiếu nếu bạn không muốn nội dung đó hiển thị ngay lập tức)? Hay bạn đang cố tải nội dung từ một nguồn khác, như máy chủ web?
DMGregory

@DMGregory Điểm tuyệt vời. Tôi cập nhật câu hỏi. Tôi đang cố chạy mã.
Evorlor

Chúng tôi hiểu rằng bạn đang cố chạy mã (tải tập lệnh nhất thiết phải là mã) - nhưng mã nào và tại sao? Bạn đã gặp sự cố và bạn đã quyết định giải pháp là chạy mã đó trong màn hình giật gân Unity; tại sao vậy?
doppelgreener

Câu trả lời:


9

Tôi vừa thực hiện một số thử nghiệm và tôi thấy rằng hàm tạo cho các đối tượng trong cảnh đầu tiên thực sự được gọi trong khi màn hình giật gân vẫn được hiển thị.

Dưới đây là một số thời gian tôi đo bằng Đồng hồ bấm giờ tĩnh:

Constructed  0     s
Awake        2.118 s
OnEnable     2.12  s
Start        2.744 s
First Update 2.919 s

Vì vậy, có vẻ như chúng ta có thể kích hoạt một tập lệnh chạy gần 3 giây trước khi kết thúc màn hình giật gân (với cài đặt mặc định) bằng cách loại bỏ tập lệnh khỏi hàm tạo. Bạn có thể thử kích hoạt mã tải của mình (có thể trên luồng của chính nó) từ đó.

Chỉ cần lưu ý rằng điều này có thể được gọi từ luồng tải, vì vậy chúng tôi không ở trong luồng chính, chúng tôi sẽ hạn chế hơn một chút với những gì chúng tôi được phép làm ở đây. Nếu có một điều cụ thể mà bạn đang cố gắng thực hiện mà không được hỗ trợ trên luồng tải, hãy xem xét việc đăng câu hỏi mới với chi tiết về ứng dụng của bạn và chúng tôi có thể cố gắng tìm cách giải quyết cho trường hợp đó.


1
3 giây trước khi kết thúc, ý bạn là, một giây trước khi bắt đầu?
Jacob

Trong các thử nghiệm của tôi, tập lệnh của tôi được Update()đánh dấu đầu tiên 2,9 giây sau khi trình xây dựng được kích hoạt. Đó là tất cả những gì tôi có thể nhận thấy với các thiết bị hiện tại.
DMGregory

2

Đặt cược tốt nhất của bạn là tạo màn hình tải của riêng bạn và đặt đó là cảnh ban đầu. Sau đó, từ cảnh đơn giản đó, sử dụng Trình quản lý cảnh để tải cảnh tiếp theo trong nền, không đồng bộ .

Tôi không thể tìm thấy thông tin để xác nhận điều này, nhưng từ quan sát của tôi, có vẻ như Unity đang tải cảnh ban đầu của bạn trong khi màn hình giật gân đang được hiển thị.

Trên một số nền tảng, trò chơi bắt đầu chạy trước khi màn hình giật gân biến mất, nếu tải đủ nhanh.

Tất cả điều này có thể thay đổi bất cứ lúc nào, trên mọi nền tảng, trên bất kỳ bản cập nhật nào. Không có gì đảm bảo rằng điều này sẽ nhất quán, vì vậy tốt hơn hết bạn nên sử dụng màn hình tải của riêng mình.


Màn hình tải kép là những gì bạn đang đề nghị?
Evorlor

Thực chất là có. Đó là cách để làm điều đó với Unity. Đặt màn hình giật gân / tải cho trò chơi của bạn hoặc một số hình ảnh động của studio trong khi nó tải cảnh tiếp theo.
Stephane Hockenhull

1
@Evorlor đây là những gì tôi làm với trò chơi của mình và hoạt động hoàn toàn tốt. Mặc dù điều này không cho phép bạn sử dụng thời gian mà phần giới thiệu Unity mất, vì phần giới thiệu đó có thể khá ngắn, bạn chỉ có thể tạo một màn hình tải (tuy nhiên chung chung) và sử dụng phần đó cho bạn.
John Hamilton

-1

Câu trả lời ngắn gọn là không , bạn không thể làm điều đó.

Cả hai câu trả lời trên đều đúng về mặt quản lý cảnh. Bạn có thể sử dụng Trình quản lý cảnh để tải cảnh và vì nó không đồng bộ nên bạn có thể chạy mã khác song song.

Hãy xem tài liệu của SceneManager.LoadScene để biết thêm chi tiết.

Lần gần nhất bạn có thể chạy mã của mình càng nhanh càng tốt sau khi trò chơi bắt đầu là chạy mã từ cảnh đầu tiên với dấu chân nhỏ. Hãy gọi nó là Cảnh Splash . Điều duy nhất nó sẽ chứa là hình ảnh giật gân và bộ điều khiển của bạn đang chạy mã cần thiết và tải một cảnh khác.

Vì nó có dấu chân nhỏ, nó sẽ tải rất nhanh và do đó làm cho mã của bạn chạy gần như ngay lập tức. Sau đó, bạn có thể làm những gì bạn phải làm và tải Cảnh khác sau đó.

Một điều khác bạn có thể thử là xóa "màn hình giật gân" xóa bất kỳ hình ảnh nào bạn muốn hiển thị ở đó. Nó sẽ chỉ nhanh hơn một chút vì nó sẽ không được tải ban đầu.

Vì vậy, dòng chảy sẽ là một cái gì đó như thế này:

  1. Màn hình Splash (không có hình ảnh ở đây, chỉ làm cho nó màu đen)
  2. Cảnh giật gân (dấu chân nhỏ với mã ban đầu của bạn và trình tải cảnh tiếp theo)
  3. Cảnh giới thiệu (cảnh giới thiệu thường xuyên)
  4. .... (những cảnh khác như thường lệ)

Cảnh nhỏ hơn sẽ tải nhanh hơn. Bạn có thể sử dụng một cái gì đó như bộ điều khiển giật gân gắn liền với bất kỳ đối tượng nào trong màn hình Splash đã tải .

using UnityEngine;
using UnityEngine.SceneManagement;

public class SplashController: MonoBehaviour
{
    void Start()
    {

        // RunSomeSyncMethod();

        SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
    }
}
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.