153 lines
4.4 KiB
C#
153 lines
4.4 KiB
C#
#if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_5 || UNITY_5_4_OR_NEWER
|
|
#define UNITY_FEATURE_UGUI
|
|
#endif
|
|
|
|
using UnityEngine;
|
|
#if UNITY_FEATURE_UGUI
|
|
using UnityEngine.UI;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Copyright 2015-2018 RenderHeads Ltd. All rights reserverd.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
namespace RenderHeads.Media.AVProVideo.Demos
|
|
{
|
|
/// <summary>
|
|
/// A demo that shows multiple videos being loaded and displayed at once
|
|
/// Each time a button is pressed a new video instance is added/removed
|
|
/// </summary>
|
|
public class SampleApp_Multiple : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private string m_videoPath = "BigBuckBunny_360p30.mp4";
|
|
|
|
private int m_NumVideosAdded = 0;
|
|
private List<DisplayUGUI> m_aAddedVideos = new List<DisplayUGUI>();
|
|
|
|
|
|
private void Update()
|
|
{
|
|
#if UNITY_ANDROID
|
|
// To handle 'back' button on Android devices
|
|
if (Input.GetKeyDown(KeyCode.Escape))
|
|
{
|
|
Application.Quit();
|
|
}
|
|
#endif
|
|
|
|
foreach( DisplayUGUI gui in m_aAddedVideos )
|
|
{
|
|
if( gui.gameObject != null && gui.gameObject.activeSelf == false &&
|
|
gui._mediaPlayer != null && gui._mediaPlayer.Control != null && ( gui._mediaPlayer.Control.IsPlaying() ) )
|
|
{
|
|
gui.gameObject.SetActive( true );
|
|
}
|
|
}
|
|
}
|
|
|
|
private void UpdateVideosLayout()
|
|
{
|
|
GameObject canvasPanel = GameObject.Find("Canvas/Panel");
|
|
RectTransform canvasRectTransform = ( canvasPanel ) ? canvasPanel.GetComponent<RectTransform>() : null;
|
|
if( canvasRectTransform )
|
|
{
|
|
Vector2 canvasSize = canvasRectTransform.sizeDelta;
|
|
Vector2 halfCanvasSize = new Vector2( canvasSize.x * 0.5f, canvasSize.y * 0.5f );
|
|
|
|
int iNumMovies = m_aAddedVideos.Count;
|
|
int iNumColRows = Mathf.CeilToInt (Mathf.Sqrt( iNumMovies ));
|
|
|
|
float fWidth = (1.0f / iNumColRows) * canvasSize.x;
|
|
float fHeight = (1.0f / iNumColRows) * canvasSize.y;
|
|
|
|
for( int i = 0; i < iNumMovies; ++i )
|
|
{
|
|
DisplayUGUI gui = m_aAddedVideos[ i ];
|
|
|
|
int x = i % iNumColRows;
|
|
int y = i / iNumColRows;
|
|
|
|
gui.rectTransform.anchoredPosition = new Vector2( ((fWidth * x) - halfCanvasSize.x), ((fHeight * -y) + halfCanvasSize.y) );
|
|
gui.rectTransform.sizeDelta = new Vector2( fWidth, fHeight );
|
|
}
|
|
}
|
|
}
|
|
|
|
public void AddVideoClicked()
|
|
{
|
|
++m_NumVideosAdded;
|
|
|
|
// New media player
|
|
GameObject newMediaPlayerGameObject = new GameObject( "AVPro MediaPlayer " + m_NumVideosAdded.ToString() );
|
|
MediaPlayer newMediaPlayer = newMediaPlayerGameObject.AddComponent<MediaPlayer>();
|
|
newMediaPlayer.m_VideoPath = m_videoPath;
|
|
newMediaPlayer.m_AutoStart = true;
|
|
newMediaPlayer.m_Loop = true;
|
|
|
|
// New uGUI object
|
|
GameObject canvasPanel = GameObject.Find("Canvas/Panel");
|
|
if( canvasPanel != null )
|
|
{
|
|
// New game object, and make it a child of the canvas panel
|
|
GameObject newGuiGameObject = new GameObject( "AVPro Video uGUI " + m_NumVideosAdded.ToString() );
|
|
newGuiGameObject.transform.parent = canvasPanel.transform;
|
|
newGuiGameObject.SetActive( false );
|
|
|
|
// Add the components
|
|
newGuiGameObject.AddComponent<RectTransform>();
|
|
newGuiGameObject.AddComponent<CanvasRenderer>();
|
|
|
|
// Add the DisplayUGUI;
|
|
DisplayUGUI newGuiObject = newGuiGameObject.AddComponent<DisplayUGUI>();
|
|
newGuiObject._mediaPlayer = newMediaPlayer;
|
|
newGuiObject._scaleMode = ScaleMode.StretchToFill;
|
|
newGuiObject.rectTransform.localScale = Vector3.one;
|
|
newGuiObject.rectTransform.pivot = new Vector2( 0.0f, 1.0f );
|
|
m_aAddedVideos.Add( newGuiObject );
|
|
|
|
// Update layout
|
|
UpdateVideosLayout();
|
|
}
|
|
}
|
|
|
|
public void RemoveVideoClicked()
|
|
{
|
|
if (m_aAddedVideos.Count > 0)
|
|
{
|
|
// Pick a random element to remove
|
|
int index = Random.Range(0, m_aAddedVideos.Count);
|
|
DisplayUGUI gui = m_aAddedVideos[index];
|
|
|
|
// Stop and destroy the MediaPlayer
|
|
if (gui._mediaPlayer != null)
|
|
{
|
|
gui._mediaPlayer.CloseVideo();
|
|
GameObject.Destroy(gui._mediaPlayer.gameObject);
|
|
gui._mediaPlayer = null;
|
|
|
|
}
|
|
// Destroy the Display object
|
|
GameObject.Destroy(gui.gameObject);
|
|
|
|
// Update variables
|
|
m_aAddedVideos.RemoveAt(index);
|
|
m_NumVideosAdded--;
|
|
}
|
|
}
|
|
|
|
void OnDestroy()
|
|
{
|
|
foreach( DisplayUGUI gui in m_aAddedVideos )
|
|
{
|
|
if( gui._mediaPlayer )
|
|
{
|
|
gui._mediaPlayer = null;
|
|
}
|
|
}
|
|
m_aAddedVideos.Clear();
|
|
}
|
|
}
|
|
}
|
|
#endif |