Unity açılış ekranı sırasında kendi yükleme komut dosyamı çalıştırabilir miyim?


10

Unity açılış ekranı varken arka planda veri yükleyebilir miyim? Öyleyse nasıl?

Sadece varlıkları yüklemek değil, açılış ekranı sırasında kodu çalıştırmak için çalışıyorum.

Google'da veya Unity Documentation'da bununla ilgili herhangi bir bilgi bulamadım .


2
Bence açılış ekranı görünür olduğunda Unity tüm uygulamanızı yüklüyor. Ne yapmak istediğini düşünmüyorum, ama bu sefer yanlış olmayı çok isterim.
Hellium

2
Bu biraz bir XY sorunu gibi geliyor: neden bu ekran sırasında bir şeyler yüklemek istiyorsunuz?
doppelgreener

1
Oyununuzun ilk sahnesine koyduğunuz her şey, açılış ekranı yukarıdayken yüklenir, değil mi? Bu nedenle, ilk sahneye yüklemek istediğiniz içeriği dahil etmek yeterli olmaz (kamera dışında, devre dışı veya yalnızca söz konusu içeriğin hemen görünmesini istemiyorsanız referans verilir)? Yoksa web sunucusu gibi başka bir kaynaktan içerik yüklemeye mi çalışıyorsunuz?
DMGregory

@DMGregory Harika bir nokta. Soruyu güncelledim. Kod çalıştırmaya çalışıyorum.
Evorlor

Kodu çalıştırmaya çalıştığınızı anlıyoruz (yükleme komut dosyaları mutlaka koddur) - ancak hangi kod ve neden? Bir sorununuz var ve çözümün Unity açılış ekranında bu kodu çalıştırmak olduğuna karar verdiniz; Neden?
doppelgreener

Yanıtlar:


9

Sadece bazı testler yaptım ve ilk sahnedeki nesneler için yapıcı aslında açılış ekranı görüntülenirken çağrıldı.

Statik bir Kronometre ile ölçtüğüm bazı zamanlamalar:

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

Yani, bir komut dosyasını, açılış ekranının sonundan yaklaşık 3 saniye önce (varsayılan ayarlarla) yapıcıdan çalıştırarak çalıştırmak için tetikleyebiliriz. Yükleme kodunuzu (muhtemelen kendi iş parçacığında) oradan tetiklemeyi deneyebilirsiniz.

Bunun muhtemelen yükleme iş parçacığından çağrıldığına dikkat edin, bu yüzden ana iş parçacığında olmadığımızdan, burada yapmamıza izin verilenlerle biraz daha sınırlı olacağız. Yükleme iş parçacığında desteklenmeyen belirli bir şey varsa, uygulamanızın ayrıntılarıyla yeni bir soru göndermeyi düşünün ve bu durum için bir geçici çözüm bulmaya çalışabiliriz.


1
3 saniye önce, yani baţlamadan bir saniye önce mi?
Jacob

Deneylerimde, senaryom ilk Update()kurucusunu kurucu açıldıktan 2,9 saniye sonra alır . Bu, mevcut enstrümanları ayırt edebileceğim her şeyle ilgili.
DMGregory

2

En iyi seçeneğiniz kendi yükleme ekranınızı oluşturmak ve bunu ilk sahne olarak ayarlamaktır. Ardından, bu basit sahneden, arka planda bir sonraki sahneyi eşzamansız olarak yüklemek için Sahne Yöneticisi'ni kullanın .

Bunu onaylamak için bilgi bulamıyorum, ancak gözlemimden, Unity, açılış ekranı gösterilirken ilk sahnenizi yüklüyor gibi görünüyor.

Bazı platformlarda, yükleme yeterince hızlıysa, oyun açılış ekranı kaybolmadan önce çalışmaya başlar.

Bütün bunlar herhangi bir zamanda, herhangi bir platformda, herhangi bir sürüm güncellemesinde değişebilir. Bunun tutarlı olacağının garantisi yoktur, bu nedenle kendi yükleme ekranınızı kullanmanız daha iyi olur.


Çift yüklemeli ekranlar ne öneriyorsunuz?
Evorlor

Esasen evet. Bunu Unity ile yapmanın yolu. Bir sonraki sahneyi yüklerken oyununuz için bir açılış / yükleme ekranı veya bazı stüdyo logosu animasyonları koyun.
Stephane Hockenhull

1
@Evorlor, oyunumla yaptığım ve mükemmel iş yaptığım şey bu. Bu, Unity intro'nun aldığı zamanı kullanmanıza izin vermese de, bu intro oldukça kısa olabileceğinden, sadece bir yükleme ekranı (ancak genel) oluşturabilir ve bunu sizin için kullanabilirsiniz.
John Hamilton

-1

Kısa cevap hayır , bunu yapamazsın.

Yukarıdaki yanıtların her ikisi de sahne yönetimi açısından doğrudur. Sahne Yöneticisi'ni kullanabilirsiniz yüklemek için ve zaman uyumsuz olduğu için diğer kodu paralel olarak çalıştırabilirsiniz.

Bak SceneManager.LoadScene Ayrıntılar için belgelere.

Oyun başladıktan sonra kodunuzu olabildiğince hızlı çalıştırmak için kullanabileceğiniz en yakın nokta, ilk adımdan küçük ayak iziyle çalıştırılmasıdır. Buna Sıçrama Sahnesi diyelim . İçerdiği tek şey, açılış resminiz ve kontrol cihazınızın gerekli kodu çalıştırması ve başka bir sahne yüklemesidir.

Az yer kapladığı için çok hızlı yüklenir ve böylece kodunuz neredeyse anında çalışır hale gelir. Daha sonra yapmanız gerekeni yapabilir ve Diğer Sahne'yi yükleyebilirsiniz daha sonra .

Deneyebileceğiniz başka bir şey, "açılış ekranı" nı kaldırmaktır orada görüntülemek istediğiniz görüntüleri kaldırın. Başlangıçta yüklenmeyeceğinden biraz daha hızlı olacaktır.

Yani akış böyle bir şey olurdu:

  1. Açılış ekranı (burada görüntü yok, sadece siyah yap)
  2. Sıçrama sahnesi (ilk kodunuz ve bir sonraki sahne yükleyicinizle küçük alan kaplaması)
  3. Giriş sahnesi (normal giriş sahnesi)
  4. .... (her zamanki gibi diğer sahneler)

Daha küçük sahne daha hızlı yüklenir. Yüklenen Açılış ekranındaki herhangi bir nesneye bağlı olan sıçrama denetleyicisi gibi bir şey kullanabilirsiniz .

using UnityEngine;
using UnityEngine.SceneManagement;

public class SplashController: MonoBehaviour
{
    void Start()
    {

        // RunSomeSyncMethod();

        SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.