e
sv

Unity'de akış varlıkları nasıl kullanılır?

avatar

Yazılım Method

  • e 0

    Mutlu

  • e 0

    Eğlenmiş

  • e 0

    Şaşırmış

  • e 0

    Kızgın

  • e 0

    Üzgün

Bir varlık, Unity'deki herhangi bir kaynak olabilir; bu kaynaklar resimler, ses, video, komut dosyaları, metin vb. olabilir.

Herhangi bir platforma bir Unity projesi oluştururken, oyununuzdaki tüm varlıklar bir dosyada (veya platformunuza bağlı olarak daha fazla) "paketlenir" ve sonuçta ortaya çıkan derleme boyutu, karar verdiğiniz varlıkların boyutuna bağlı olacaktır. oyununuzun içindeki paket.

Harita Atlası kullanmak yerine birden fazla HD dokuya sahip bir oyun oluşturmak veya 1080p kullanmak yerine 240p'de video kullanmak aynı şey değildir. Varlıklarınızın boyutu ne kadar büyükse, nihai yapınızın boyutunun da o kadar büyük olması beklenir.

Genel olarak, yapınızı olabildiğince hafif tutmak iyi bir uygulamadır, böylece oyuncu boyut nedeniyle oyununuzu indirmekten vazgeçmez ve sahneleriniz önemli ölçüde daha hızlı çalışır.

Bunu başarmak için birden fazla ipucu ve püf noktası var ve bu makalede akış varlıklarından başlayarak bazılarından bahsedeceğiz.

Akış varlıkları nedir?

Diyelim ki oyununuzda tüm aksiyonun geçtiği güzel bir sahne var. Oyuncu düşman üssüdür ve belirli bir odada, bilgisayarda oynayan bir videoyu paskalya yumurtası olarak koymaya karar verirsiniz.

Video gerçekten büyük, 300 MB'tan fazla ve oynatıcı, gerçekten görmek için o odaya girebilir veya girmeyebilir. Varsayılan olarak sahnenize yüklemek uygun olur mu? Bu, harika sahnenizde gereksiz yavaşlığa neden olabilir. Bu yüzden, gerçekten ihtiyacımız olduğunda yüklemek harika olabilir.

Bir akış varlığı tam da şudur: Gerektiğinde Unity Player tarafından yüklenecek belirli bir klasöre yerleştirilmiş bir varlık. Bu varlık, hedef platformda bulunması kolay bir adrese yerleştirilecektir.

Bir akış varlık klasörüne (Unity içinde StreamingAssets olarak adlandırılır) yerleştirilen herhangi bir varlığın hedef platforma kopyalanacağını ve bir kullanıcı proje klasörü içinde arama yaparsa bunları görebileceğini lütfen unutmayın.

Bazı oyunların bazı modları bu şekilde yapılır.

Bir karakterin dokusunu değiştirmek? Veri klasörüne gidin ve kullanılan dokuyu bulun, ardından değiştirin. Sert bir patronun sesini değiştirmek mi? Sadece veri klasörüne gidin ve ses parçasını bulun ve aynı ada sahip başka bir parçayla değiştirin.

Akış varlıkları, tüm varlıkları bellekten yüklemeden oyunun sorunsuz çalışmasına izin verir ve daha büyük olanları kolayca erişilebilen bir yolda sunar.

Akış varlıklarına ilişkin kolay bir örnek oluşturalım

Oyununuzda bir video göstererek akış varlıklarının nasıl çalıştığını kolay bir örnekle göstereceğiz.

Bu örnek için iStockPhoto'dan bir videonun önizlemesini indirdim .

Kullanmak istediğiniz videonun şu uzantılardan birine sahip olduğundan emin olun: .mov, .mpeg, .mp4, .avi, .asf.

İlk örneğimiz için Video adında yeni bir klasör oluşturacağız ve videomuzu bu klasörün içine yerleştireceğiz:

Klasör İçinde Video

Ardından Hiyerarşi panelimizde video oynatıcımızı kuracağız.

Hiyerarşinize sağ tıklayın ve bir Boş Oyun Nesnesi ekleyin. VideoObject benimkini çağırdım.

Bunun içinde videoyu oynatacağımız bir küp oluşturdum; İstediğiniz herhangi bir şekil olabilir, ancak kolaylık olması için bir küp seçtim. Ben buna Video_Canvas diyorum .

Ve Video_Canvas ile aynı seviyede, VideoObject içinde, VideoObject'e sağ tıklayıp Video , ardından Video Player öğesini seçerek yeni bir Video Player nesnesi ekledim.

Video Nesnesi Klasör Yapısı

Video Oynatıcı nesnemizi şu şekilde ayarladım:

Video Oynatıcı Kurulumu

Source'u Video Clip olarak ayarladık ve oluşturduğumuz Video Klasörümüzden video klibi seçtik ve Loop'u seçtik ki video sonsuz oynatılmaya devam etsin.

Ardından, Malzeme Geçersiz Kılma olarak İşleme Modu'nu seçin ve videoyu oynatmak istediğiniz Nesneyi – bizim durumumuzda Video_Canvas küpünü – sürükleyip bırakın. Material Property _MainTex olsun .

Unity Editor'da Oynat'a tıklarsanız, şunun gibi bir şey göreceksiniz: küpün her iki tarafında oynatılan bir video.

Her Küp Tarafında Video

Ayrıca, ekran gibi daha düz bir yüzey istiyorsanız, bir düzlem oluşturabilir veya küpün ölçeğini istediğiniz şekle küçültebilirsiniz.

Bu demo video 3.5MB boyutundadır.

Bu projeyi bağımsız bir platform (Windows, Linux, MacOs) için inşa edersek, videolu boş bir projenin 87.6MB olduğunu göreceğiz.

Siyah Proje Videosu

Şimdi, aynı videoyu bir akış varlığı olarak kullanmanın nasıl göründüğüne bakalım.

Bunu yapmak için Assets klasöründe StreamingAssets adında yeni bir klasör oluşturacağız; bu, video_streamingAssets video dosyamızı düzenleyicinin özellikler penceresinde hiçbir seçeneği olmayan normal bir dosya olarak ele alacak özel bir adlandırılmış klasördür.

Akış Varlıkları Klasörü

Ardından Video Oynatıcı nesnemizde, Video Oynatıcı Oyun Bileşeninin Kaynağını URL olarak değiştirebilir ve gerçek URL'yi olduğu gibi bırakabiliriz. LoadVideo adında yeni bir Script oluşturacağız ve onu resimdeki gibi Video Player GameObject'imize ekleyeceğiz.

Bu komut dosyası bir Video Oynatıcı parametresi olarak alır, bu nedenle bu komut dosyasının eklendiği aynı Video Oynatıcımızı sürükleyip bırakacağız.

Video Oynatıcı Ayrıntıları

İşte LoadVideo'nun betiği:

 UnityEngine'i kullanarak;
UnityEngine.Video'yu kullanarak;

public class LoadVideo : MonoBehaviour
{
   genel VideoPlayer myVideoPlayer;
   geçersiz Başlat()
   {
       string videoUrl= Application.streamingAssetsPath +"/"+ "video_streamingAssets" + ".mp4";
       myVideoPlayer.url = videoUrl;
   }
}

Temel olarak, uygulamanın başlangıcında, yerleşik herhangi bir hedef platformda StreamingAssets klasörünün yolunu almak için Application.streamingAssetsPath'i kullanır. Ardından, o klasördeki videomuzun adını ve uzantısını referans alacaktır.

Ardından, (zaten sahne video oynatıcımızın referansına sahip olan) myVideoPlayer'ı alacak ve url özelliğini videomuzun yolu ile yazacaktır.

Bu, oynatılan videoyla aynı küple sonuçlanacaktır.

Her Küp Tarafında Video

Şimdi, bu projeyi inşa edersek, önceki örneğimizle aynı boyutta olduğunu ancak büyük bir farkla olduğunu göreceğiz.

Tek Farkla Boş Proje

Bu yapının Paket içeriklerini görürsek Contents/Resources/Data üzerinde videomuzla birlikte StreamingAssets klasörümüzün olduğunu görebiliriz.

Videolu StreamingAssets Klasörü

Ve StreamingAssets klasörümüzdeki videoyu aynı ada sahip başka bir videoyla değiştirirsek , oyunumuza yansıyan değişiklikleri görmek için projemizi yeniden oluşturmamız gerekmez.

Farklılıkları Olan Küp

Artık varlıklarımızı/içeriğimizi yapımızdan nasıl ayırabileceğimizi biliyoruz. Uzak dosyaları Video Oynatıcımızdaki URL'den de arayabiliriz. Bunun için bu videoyu örnek olarak kullanacağız. Neredeyse 10 dakika uzunluğunda ve yaklaşık 151MB.

Kodumuzu şu şekilde değiştirirsek:

 UnityEngine'i kullanarak;
UnityEngine.Video'yu kullanarak;

public class LoadVideo : MonoBehaviour
{
   genel VideoPlayer myVideoPlayer;
   geçersiz Başlat()
   {
       string videoUrl= "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4";
       myVideoPlayer.url = videoUrl;
   }
}

…ve StreamingAssets klasörünün orijinal videosunu silin, sonunda şöyle bir şey elde ederiz:

Yeni Video Küpü

Aynı işlevsellik, ancak artık video varlıkları harici bir kaynaktan geliyor.

Şimdi, projemizi StreamingAssets klasörümüzdeki yerel video olmadan inşa edersek, derlememizin boyutunda bir azalma görürüz.

Akış Varlıkları Küçültülmüş Boyut

Lütfen bunun bir zaman uyumsuz çağrı veya UnityWebRequest çağrısı ve bir eşyordam ile de yapılabileceğini unutmayın, ancak basitlik için, akış varlıklarının gücünü göstermek için yalnızca bir videonun tam URL'sini ekliyoruz.

Harici bir kaynaktan video almak için bir eşyordam kullanma

Doğrudan bağlantıyı video oynatıcımıza iletmek yerine bir eşyordam kullanmak için LoadingScript şu şekilde değiştirebiliriz:

 UnityEngine'i kullanarak;
UnityEngine.Video'yu kullanarak;
UnityEngine.Networking'i kullanarak;
System.Collections'ı kullanarak;

public class LoadVideo : MonoBehaviour
{
   genel VideoPlayer myVideoPlayer;
   geçersiz Başlat()
   {
       StartCoroutine(LoadExternalVideo("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4"));
   }

     IEnumerator LoadExternalVideo(string url){
      (UnityWebRequest request = UnityWebRequest.Get(url)) kullanarak
      {
          //Bir sayfa getirir ve yanıtın karakter sayısını görüntüler.
          iade isteğini getir.SendWebRequest();
          myVideoPlayer.url = request.url;
      }
  }
}

Bu örnekle, bir API uç noktası kullanmak ve videonun URL'sini almak için bir eşyordam kullanabiliriz, ancak basitlik için bu, harici bir bağlantıyla nasıl yapılacağına ilişkin basit bir örnektir.

Sonuç çok benzer olacaktır; sadece UnityWebRequest sonucumuzun tüketilen uç noktadan alındığından ve video oynatıcının URL özelliğine ayarlamadan önce videonun URL'sinin mevcut olduğundan emin olmamız gerekiyor.

Son düşünceler

Akış varlıkları, Unity'nin oyununuz için varlıkları işlemesinin farklı yollarından yalnızca biridir. Oyununuzu modifiye etmelerine izin vererek oyuncu tabanınızı dahil etmeye çalıştığınızda veya oyununuzun hafif bir son yapısına sahip olmak istiyorsanız ve daha sonra ilk başlatmada, oyununuzun geri kalan varlıklarını indirin. oyuncu fark etmeden önce.

Bu yaklaşımı uygulayan birçok çevrimiçi oyun vardır: oyunları çok hafiftir, ilk seviyenin küçük bir eğitimini tamamlayabilirsiniz ve ardından geri kalan varlıkları indiren bir yükleme ekranı alırsınız.

Oyununuz için en iyi yaklaşımı aklınızda tutmalısınız. Tüm varlıklarınızı uzak bir sunucuda tutamazsınız, çünkü oyuncu oyununuzu ilk kez oynadığında cihazında iyi bir internet bağlantısı yoksa ne olur? Varlıklar olmadan oyununuz nasıl görünürdü?

En iyi yaklaşımlardan biri, varsayılan olarak varlıklarınızın (malzemeler, dokular, resimler gibi) çok hafif bir sürümünü yer tutucu olarak kullanmaktır ve oynatıcınızın bu içeriği beğeneceğinden ve cihazın bu bilgileri indirmeye hazır olduğundan emin olduğunuzda, mümkün olduğunca sorunsuz bir şekilde yapın.

Umarım bu makaleyi beğenmişsinizdir ve faydalı bulmuşsunuzdur! Mutlu oyun devleri!

Unity'de akış varlıkları nasıl kullanılır yazısı ilk olarak LogRocket Blog'da göründü.

etiketlerETİKETLER
Üzgünüm, bu içerik için hiç etiket bulunmuyor.

Sıradaki içerik:

Unity'de akış varlıkları nasıl kullanılır?