آموزش پخش ویدیو در یونیتی با MovieTexture

آموزش پخش ویدیو در یونیتی با MovieTexture

بیشترین جایی که در بازی از ویدیو استفاده می‌کنیم، قبل از شروع بازی می‎‌باشد که ممکن است داستان بازی را روایت کند؛ علاوه بر آن ممکن است در برخی از مراحل بازی، ویدیو را مثلا روی یک گیم‌آبجکتی که نقش نمایشگری مثل تلویزیون را ایفا می‌کند نمایش دهیم.

حالا در این مطلب آموزشی، با نحوه‌ی ساخت یک ویدیو پلیر در یونیتی و به دو روش مختلف در خدمت شما هستیم؛ اما روش بهتری در ورژن‌های جدید یونیتی اضافه شده است و آن استفاده از کامپوننت Video Player می‌باشد که ما این روش را در پست جدایی برای شما قرار داده‌ایم (کلیک کنید)

اما دو روشی که در اینجا برای شما قرار می‌دهیم، به شرح زیر می‌باشند:

  • پخش ویدیو روی یک آبجکت خاص
  • پخش ویدیو روی GUI

در هردو روش، ما از کلاس MovieTexture استفاده می‌کنیم.

مراحل مشترک هردو روش

  1. یک اسکریپت به نام VideoPlayer ِیا هرچیز دیگری بسازید.
  2. در اسکریپت VideoPlayer، یک ویژگی به نام video از نوع MovieTexture و به صورت public تعریف کنید.
  3. یک گیم آبجکت بسازید.
  4. اسکریپت VideoPlayer را به گیم آبجکت ساخته شده اختصاص دهید.
  5. یک ویدیو به Assets اضافه کنید.
  6. ویدیو را به ویژگی video که در اسکریپت تعریف کرده‌اید، از طریق Inspector اختصاص دهید.
  7. متدی به نام play در اسکریپت VideoPlayer ایجاد کنید.
  8. داخل متد play، متد play مربوط به ویژگی video را اجرا کنید. یعنی video.play()
  9. متد play را در Start فراخوانی کنید.

اگر می‌خواهید صدا هم داشته باشید: (مطلب کار با صدا در یونیتی)

  1. یک کامپوننت AudioSource به آبجکت مورد نظر اضافه کنید. (همان آبجکتی که VideoPlayer را به آن اضافه کرده‌اید)
  2. صدای فیلم را به فیلد AudioClip اختصاص دهید.
  3. تیک گزینه‌ی Play On Awake را بردارید تا خودکار شروع به پخش شدن نکند.
  4. در داخل اسکریپت VideoPlayer، یک ویژگی به نام sound و از جنس AudioSource و به صورت private تعریف کنید.
  5. در داخل Start، کامپوننت AudioSource را گرفته و داخل ویژگی sound قرار دهید.
  6. در نهایت داخل متد play ای که خودمان نوشته‌ایم، متد play مربوط به sound را نیز فراخوانی کنید.

می‌توانید از همان ابتدا، کامپوننت AudioSource را به گیم آبجکت اختصاص ندهید و در VideoPlayer یک فیلد AudioClip تعریف کنید و سپس داخل Start، یک کامپوننت AudioSource ساخته و پس از مقداردهی های لازم، به آبجکت اضافه کنید.


در نهایت کد VideoPlayer ای که نوشته‌اید، تا به این‌جا باید به صورت زیر باشد:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VideoPlayer : MonoBehaviour {

	public MovieTexture video;

	private AudioSource sound;

	void Start () {
		sound = GetComponent<AudioSource> ();
                play ();
	}

	private void play() {
		video.Play ();
		sound.Play ();
	}

}

در ادامه، این کد را به دو روش مختلف کامل می‌کنیم.

روش اول: پخش ویدیو روی آبجکت

اسکریپت را به صورت زیر کامل می‌کنیم:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VideoPlayer : MonoBehaviour {

	public MovieTexture video;

	private AudioSource sound;
	private Renderer renderer;

	void Start () {
		renderer = GetComponent<Renderer> ();
		renderer.material.mainTexture = video;
		sound = GetComponent<AudioSource> ();
		play ();
	}

	private void play() {
		video.Play ();
		sound.Play ();
	}

}

همانطور که می‌بینید، کامپوننت Renderer مربوط به آبجکت فعلی را در داخل متد Start گرفته و ویدیو را به تسکچر آن اختصاص می‌دهیم. سپس متد play را اجرا می‌کنیم. (البته بایستی آبجکت Empty نبوده و چیزی مثل Plane یا Cube باشد.)

ممکن است ویدیو روی آبجکت مورد نظر، به صورت برعکس نمایش داده شود که می‌توانید با Rotate از داخل یونیتی آن را درست کنید.

روش دوم: پخش ویدیو با GUI

در این روش از GUI استفاده می کنیم:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VideoPlayer : MonoBehaviour {

	public MovieTexture video;

	private AudioSource sound;

	void Start () {
		sound = GetComponent<AudioSource> ();
		play ();
	}

	void Update () {
		
	}

	void OnGUI() {
		GUI.DrawTexture (new Rect (0, 0, Screen.width, Screen.height), video);
	}

	private void play() {
		video.Play ();
		sound.Play ();
	}
}

در داخل متد OnGUI که مربوط به UI می‌باشد، ما  با استفاده از متد DrawTexture  از کلاس GUI، یک مربع یا Rect به صورت Full Screen ترسیم کرده و MovieTexture را به آن اختصاص داده‌ایم. این متد از ما Texture گرفته و روی صفحه و در حالت UI ترسیم می‌کند.

همانطور که در هر دو روش دیدید، ما متد play، مربوط به MovieTexture را اجرا می‌کنیم. کلاس MovieTexture به جای گرفتن عکس، از ما ویدیو دریافت می‌کند و زمانی که ما آن را play می‌کنیم، تکسچر آن با توجه به فریم‌های فیلم تغییر می‌کند. البته این کلاس متدهای دیگری نیز دارد که می‌توانیم ویدیوی خود را با توجه به آنها بهتر مدیریت کنیم.

چند متد مهم کلاس MovieTexture

  • متد isPlaying : برای فهمیدن این که آیا ویدیو در حال پخش است یا خیر.
  • متد pause : برای توقف موقت ویدیو استفاده می‌شود؛ یعنی زمانی که دوباره play اجرا شود، از همان جایی که توقف شده است ادامه می‌دهد.
  • متد Stop: برای توقف کامل ویدیو استفاده می‌شود؛ یعنی زمانی که دوباره play اجرا شود، از اول پخش خواهد شد.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک