Unity’de Televizyon Yapımı (Video Player)

Unity’de Televizyon Yapımı (Video Player)

13 Mart 2020 0 Yazar: Ahmet Güler

Merhaba, bir önceki dersimizde Unity‘de green screen üzerine bir proje gerçekleştirmiştik.Bu dersimizde ise, Unity‘de yapmış olduğumuz projelere nasıl video ekleyebileceğimize bakacağız.Bunun için video player bileşenini kullanacağız ve bir televizyon yapacağız.Şimdi yeni bir proje oluşturalım ve dersimize başlayalım.

Sahnemizi oluşturmaya başlıyoruz.

Evet bu projede kullanacağımız senaryoyu inceleyelim.Bir odamız olacak ve bu odanın içerisinde yer alan televizyonda bir video oynatacağız.Evet şimdi biraz açalım.Sahnemizde bir oda modeli kullanacağımızı söylemiştim.Bu bir yatak odası yada salon olabilir.Önemli olan projemizde kullanacağımız 3D modelin içerisinde bir televizyon modelinin de bulunmasıdır.

Eğer seçtiğiniz modelde bu ünite yer almıyorsa, ayrı bir televizyon modelini Unity içerisinde birleştirerek kullanabilirsiniz.Bu da bir çözümdür.Daha sonra projede kullanmak üzere bir video seçmelisiniz.Projede kullanacağımız materyalleri hazırladıktan sonra, artık sahnemizi hazırlamaya başlayabiliriz.İlk olarak, seçtiğimiz oda modelini sahnemize ekliyoruz.Daha sonra oda içerisinde bulunan eşyaları düzenliyoruz.

Bu düzenlemeden kastım, işimizin olmadığı modelleri bir yerde toplamak.Yani hiyerarşik bir düzenleme yapıyoruz.Şimdi televizyon modelimizi seçiyoruz.Eğer ekran kısmı ayrı bir parça olarak modellenmemişse, benim yaptığım gibi bir Cube nesnesinden yararlanacağız.Sahnemize oluşturduğumuz bu Cube nesnesini, Scene penceresindeki araçlar yardımı ile televizyon ekranına sığacak şekilde boyutlandırıyoruz.

Unity-Televizyon-Yapımı-how-to-add-video-player-tutorial

Şimdi bu Cube nesnemizden oluşturduğumuz yeni ekranımıza Inspector penceresinden Video Player ve Audio Source bileşenlerini ekliyoruz.Bu projede bizi asıl ilgilendiren Video Player bileşenidir.Fakat seçtiğimiz videonun sesini de kullanmak için, Audio Source bileşenine ihtiyacımız olacak.

Projemize eklemiş olduğumuz video dosyamızı, Video Player bileşeninin Video Clip bölümüne sürükleyip bırakıyoruz.Daha sonra Play On Awake özelliğini false yapıyoruz.Bunu videomuz direk başlamasın diye yapıyoruz.Daha sonra Renderer Mode özelliğini Material Override seçeneğine getiriyoruz.Bu seçeneğin hemen altında yer alan, Renderer bölümüne az önce ekranı oluşturduğumuz Cube nesnesini ekliyoruz.

Bu özelliklerin ne işe yaradığını birazdan anlatacağım.Şimdi buraya kadar videomuzu televizyonda oynatmak için hazırladık.Sıra geldi, videonun sesini ayarlamaya.Bunun için Audio Output Mode özelliğini, Audio Source seçeneğine getiriyoruz.Daha sonra aşağıda yer alan Audio Source bölümüne, video dosyamızın tanımlı olduğu yani Cube nesnemizi ekliyoruz.

Unity-Televizyon-Yapımı-how-to-add-video-player-tutorial

Evet sahnemizde kullanacağımız videomuz hazır duruma geldi.Şimdi az önce de dediğim gibi, Video Player bileşeninin özelliklerine bir bakalım.

Video Player bileşeninin özellikleri.

  1. Source : Projede kullanacağımız video kaynağımızı buraya belirliyoruz.İki seçeneğimiz bulunuyor.Direk dosyadan video çekebilirsiniz yada bir url kaynağından dosya çekebilirsiniz.
  2. Video Clip: Projemizde bulunan video dosyamızı bu bölüme ekliyoruz.
  3. URL: Projemizde kullanacağımız video linkini buraya yazıyoruz.
  4. Play On Awake: Bu seçenek işaretli ise, projemizi başlattığımız zaman video otomatik olarak oynatılacaktır.
  5. Wait For First Frame: Bu seçenek işaretli ise, videonuz başlatılması için ilk kareyi bekler.Böylece projenizde bir senkron oluşur.
  6. Loop: Bu seçenek işaretli ise, videonuz bittiği zaman otomatik olarak başa döner ve yeniden başlar.
  7. Playback Speed: Bu özellik ile videonuzun oynatma hızını ayarlayabilirsiniz.Varsayılan olan değer bir “1” olarak belirlenmiştir.
  8. Render Mode: Projenizde kullanacağınız videoların nasıl oluşturulacağını bu özellik yardımı ile ayarlayabilirsiniz.
  9. Render Mode > Camera Far Plane: Videoyu kameranın uzağında oluşturmak için bu seçeneği kullanıyoruz.
  10. Render Mode > Camera Near Plane: Videoyu kameranın yakınında oluşturmak için bu seçeneği kullanıyoruz.
  11. Render Mode > Render Texture: Videoyu bir Render Texture dosyasında kullanmak için bu seçeneği seçiyoruz.
  12. Render Mode > Material Override: Videoyu bir GameObject üzerinde kullanmak için bu seçeneği seçiyoruz.
  13. Render Mode > API Only: Videomuz için bir VideoPlayer.texture fonksiyon özelliği ekliyoruz.Daha sonra bir script dosyasında videomuzu kullanıyoruz.
  14. Audio Output Mode: Videomuzun ses kaynağını bu özellik ile ayarlayabiliyoruz.
  15. Audio Output Mode > None: Videoda ses olmaması için bu seçeneği seçiyoruz.
  16. Audio Output Mode > Audio Source: Videoda bulunan bir ses kaynağını kullanacaksak, bu seçeneği seçiyoruz.
  17. Audio Output Mode > Direct:Videoda bir ses kaynağı yerine direk bir ses çıkışı kullanacaksak, bu seçeneği seçiyoruz.

Evet şimdi televizyonumuzda seçtiğimiz video oynatılırken, daha gerçekçi bir görüntü için sahnemize ışık kaynaklarını ekleyelim.Televizyondan çıkacak ışık süzmesi için sahnemizi iki adet Spotlight ekliyoruz.Bu ışık kaynaklarımızdan birini, televizyona karşı konumlandırıyoruz.

Diğerini ise, tam tersi konumunda odaya doğru konumlandırıyoruz.Tabi bu Spotlight nesnelerimizin, ışık şiddetini,çapını ve rengini kendinize göre ayarlayabilirsiniz.Daha sonra bu ışık kaynaklarına yeni etiketler oluşturuyoruz.İstediğimiz şekilde ışıklarımızı ayarladıktan sonra, artık sahnemiz hazır duruma geliyor.

Unity-Televizyon-Yapımı-how-to-add-video-player-tutorial

Kodlarımızı yazmaya başlayalım.

Şimdi bir adet C# Script dosyası oluşturuyoruz.Daha sonra bu script dosyamızı editör yardımı ile açıyoruz.Artık kodlarımızı yazmaya başlayabiliriz.

using UnityEngine.Video;

İlk olarak, bu kütüphaneyi script dosyamıza dahil ediyoruz.Bu sayede, video bileşenimizin özelliklerine erişebileceğiz.

public GameObject TvEkrani;
private VideoPlayer Video;
public Light TvIsigi1;
public Light TvIsigi2;

Şimdi projemizde kullanacağımız değişkenlerimizi oluşturuyoruz.İlk satırda bir GameObject değişkeni oluşturuyoruz.Bu değişken ile, videomuzu oynatacağımız nesneyi kontrol edebileceğiz.İkinci satırda, VideoPlayer değişkeni oluşturuyoruz.Bu değişkenle ise, video player bileşenimizi kontrol edebileceğiz.

Üçüncü ve dördüncü satırlarda ise, Light değişkenleri oluşturuyoruz.Bu değişkenlerde, sahnemizde kullanacağımız ışıkları kontrol edeceğiz.Aslında bunu tek bir dizi halinde yani “Light[]” şeklinde de yapabilirdik.Ancak ikiden fazla ışığımız olmadığı için tek tek kontrol etmeyi tercih ettim.

TvEkrani = GameObject.FindWithTag ("ekran");
Video = TvEkrani.GetComponent<VideoPlayer>();
TvIsigi1 = GameObject.FindWithTag ("isik1").GetComponent<Light> ();
TvIsigi2 = GameObject.FindWithTag ("isik2").GetComponent<Light> ();
TvIsigi1.enabled = false;
TvIsigi2.enabled = false;

Şimdi bu kodları start() fonksiyonumuzun içerisine yazıyoruz.İlk satırda değişkenimize, etiketi “ekran” olan nesnemizi tanımlıyoruz.İkinci satırda ise değişkenimize, etiketi “ekran” olan nesnemizin, VideoPlayer bileşenini tanımlıyoruz.Böylece bu bileşeni artık kontrol edebileceğiz.Üçüncü satırda değişkenimize, etiketi “isik1” olan nesnemizin Light bileşenini tanımlıyoruz.

Dördüncü satırda ise değişkenimize, yine etiketi “isik2” olan nesnemizin Light bileşenini tanımlıyoruz.Beşinci ve altıncı satırlarda değişkenlerimize tanımladığımız ışık bileşenlerimizi kapatıyoruz yani false konuma getiriyoruz.Bunu yapmamızın nedeni, televizyonumuz kapalı iken ışık süzmelerinin de sahnemizde olmaması gerektiği içindir.

if(Input.GetKeyDown(KeyCode.Space) && Video.isPlaying) {
   Video.Stop();
   Video.enabled = false;
   TvIsigi1.enabled = false;
   TvIsigi2.enabled = false;
}

Şimdi bu kodları update() fonksiyonumuzun içerisine yazıyoruz.İlk satırda yeni bir koşul oluşturuyoruz.Eğer klavyeden “space” tuşuna basarsak ve videomuz oynatılıyor ise, koşulumuz doğru oluyor içerisindeki görevleri yapıyor.İkinci satırda, videomuzu durduruyoruz.Bunu Stop fonksiyonu ile yapıyoruz.

Üçüncü satırda, Video Player bileşenimizi kapalı duruma getiriyoruz yani durumunu false yapıyoruz.Bunu yapmamızın nedeni ise, ekranımızda ki görüntüyü kaybetmek içindir.Dördüncü ve beşinci satırlarda ise, televizyonda kullandığımız ışık kaynaklarını kapatıyoruz.Böylece video ve ışıklar arasında bir senkron oluşturmuş oluyoruz.

else if (Input.GetKeyDown(KeyCode.Space) && !Video.isPlaying) {
         Video.enabled = true;
         Video.Play();
         TvIsigi1.enabled = true;
         TvIsigi2.enabled = true;
      }

Bu kodları oluşturmuş olduğumuz koşulumuzun devamına yazıyoruz.Bu sefer ilk koşulumuzun uymadığı durumda yani eğer “else” kullanarak yeni bir koşul oluşturuyoruz.Burada ise, yine klavyeden “space” tuşuna basılırsa ve videomuz durmuş yani oynatılmıyor ise, koşulumuz doğru oluyor ve içerisinde bulunan kodları çalıştırıyor.

İkinci satıra bakacak olursak, Video Player bileşenimizi açıyor yani true yapıyoruz.Böylece televizyon ekranında görüntümüz beliriyor.Üçüncü satırda ise, videomuzu başlatıyoruz.Bunu Play fonksiyonu ile yapıyoruz.Dördüncü ve beşinci satırlarda ise, ışık kaynaklarını açıyor yani true konumuna getiriyoruz.

Televizyonda ışık süzmesi oluşturalım.

Evet bu aşamaya kadar script dosyamızda, televizyonda oynatacağımız videomuz ve ışıklarımız üzerinde kontrol sağladık.Şimdi ise sahnemizin biraz daha gerçekçi olması açısından, sahnemizde kullandığımız ışık kaynaklarımızın şiddeti ile oynayacağız.Böylelikle sürekli olarak değişiklik gösteren ışık şiddeti ile televizyonumuz daha gerçekçi bir hal alacaktır.

if (TvIsigi1.enabled && TvIsigi2.enabled) {
   TvIsigi1.intensity = Random.Range (10, 20);
   TvIsigi2.intensity = Random.Range (5, 10);
}

Şimdi bu kodları, update() fonksiyonumuzun devamına yazıyoruz.İlk satırda yeni bir koşul oluşturuyoruz.Eğer ışık kaynaklarımız yani “TvIsigi1” ve “TvIsigi2” nesnelerimizde tanımlı Spotlight nesneleri aktif ise, koşulumuz doğru oluyor ve içerisinde ki kodları çalıştırıyor.İkinci satırda ilk ışığımızın ışık şiddetini, Intensity özelliği ile kontrol ediyoruz.

Bu intensity değerini rastgele olarak belirlediğimiz değerler arasından seçiyoruz.Rastgele seçimi ise, Random fonksiyonu yardımı ile belirliyoruz.Üçüncü satırda ise, yine aynı işlemleri gerçekleştiriyoruz.Bu sefer tek farkı, diğer ışık kaynağımız için bu ayarları yapıyoruz.Parantez içerisindeki değerleri istediğiniz gibi değiştirebilirsiniz.Evet böylece script dosyamızı tamamlamış bulunuyoruz.

Evet oluşturmuş olduğumuz bu C# Script dosyamızı, televizyon nesnemizin üzerine sürükleyip bırakıyoruz.Artık test etmeye hazırız.Bir sonraki yazıda görüşmek üzere…

Unity-Televizyon-Yapımı-how-to-add-video-player-tutorial