689 lines
22 KiB
C#
689 lines
22 KiB
C#
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.IO;
|
|||
|
using Thousandto.Launcher.ExternalLibs;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEngine.Video;
|
|||
|
using AppManager = UnityEngine.Gonbest.MagicCube.AppManager;
|
|||
|
|
|||
|
#if FUNCELL_LAUNCHER
|
|||
|
using MyRuntimePlatform = Thousandto.Launcher.Logic.MyRuntimePlatform;
|
|||
|
using LauncherManager = Thousandto.Launcher.Logic.LauncherManager;
|
|||
|
#endif
|
|||
|
|
|||
|
public class VideoRootScript : MonoBehaviour
|
|||
|
{
|
|||
|
|
|||
|
#region//组件
|
|||
|
private Camera _camera = null;
|
|||
|
private Transform _mask = null;
|
|||
|
private VideoPlayer _videoPlayer = null;
|
|||
|
private AudioSource _audioSource = null;
|
|||
|
#endregion
|
|||
|
|
|||
|
#region//私有变量
|
|||
|
private bool _isInit = false;
|
|||
|
private string _url = "http//xxxxxxxxxxxxxx";
|
|||
|
private string _fileName = string.Empty;
|
|||
|
private string _ext = "mp4";
|
|||
|
private OnPreparedCall _preparedCallBack = null;
|
|||
|
private OnFinishCall _finishCallBack = null;
|
|||
|
private List<string> _fileNames = new List<string>();
|
|||
|
//texture缓存
|
|||
|
private Dictionary<string, Texture> _texCache = new Dictionary<string, Texture>();
|
|||
|
#endregion
|
|||
|
|
|||
|
#region//const
|
|||
|
private const int TEXTURE_COUNT = 4;
|
|||
|
private const string TEX_MASK_0 = "tex_logininback_3";
|
|||
|
private const string TEX_MASK_1 = "tex_logininback";
|
|||
|
private const string TEX_MASK_2 = "tex_logininback_1";
|
|||
|
private const string TEX_MASK_3 = "tex_logininback_2";
|
|||
|
#endregion
|
|||
|
|
|||
|
#region//delegate
|
|||
|
//视频准备完成回调
|
|||
|
public delegate void OnPreparedCall();
|
|||
|
//视频播放完毕回调
|
|||
|
public delegate void OnFinishCall();
|
|||
|
#endregion
|
|||
|
|
|||
|
#region//私有函数
|
|||
|
private void Initialize()
|
|||
|
{
|
|||
|
if (!_isInit)
|
|||
|
{
|
|||
|
if (_camera == null)
|
|||
|
_camera = transform.Find("Camera_Video").GetComponent<Camera>();
|
|||
|
_mask = transform.Find("Camera_Video/Mask");
|
|||
|
_videoPlayer = RequireComponent<VideoPlayer>(_camera.gameObject);
|
|||
|
_audioSource = RequireComponent<AudioSource>(_camera.gameObject);
|
|||
|
_videoPlayer.playOnAwake = false;
|
|||
|
_videoPlayer.errorReceived += PlayErrorRecived;
|
|||
|
_videoPlayer.aspectRatio = VideoAspectRatio.Stretch;
|
|||
|
_audioSource.playOnAwake = false;
|
|||
|
_mask.gameObject.SetActive(false);
|
|||
|
Renderer rd = _mask.GetComponent<Renderer>();
|
|||
|
if (rd != null)
|
|||
|
{
|
|||
|
rd.sharedMaterial = null;
|
|||
|
}
|
|||
|
_videoPlayer.source = VideoSource.Url;
|
|||
|
_isInit = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void UnInitialize()
|
|||
|
{
|
|||
|
_videoPlayer.errorReceived -= PlayErrorRecived;
|
|||
|
_videoPlayer = null;
|
|||
|
Destroy(_camera.GetComponent<VideoPlayer>());
|
|||
|
_isInit = false;
|
|||
|
}
|
|||
|
|
|||
|
//判断文件是否在apk中
|
|||
|
private bool IsFileInApk(string relationPath)
|
|||
|
{
|
|||
|
return AppManager.Instance.AssetInApp(relationPath);
|
|||
|
}
|
|||
|
|
|||
|
private T RequireComponent<T>(GameObject go) where T : Component
|
|||
|
{
|
|||
|
if (go == null)
|
|||
|
return default(T);
|
|||
|
T t = go.GetComponent<T>();
|
|||
|
if (t == null)
|
|||
|
{
|
|||
|
t = go.AddComponent<T>();
|
|||
|
}
|
|||
|
return t;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region //静态函数
|
|||
|
|
|||
|
//准备视频
|
|||
|
public static void PreVideo(string name, OnPreparedCall preparedCallBack = null, OnFinishCall finishCall = null, bool isShowMask = false, bool isLoop = false, VideoPlayExt extType = VideoPlayExt.Mp4)
|
|||
|
{
|
|||
|
var videoRoot = GameObject.Find("[VideoRoot]");
|
|||
|
VideoRootScript videoScript = null;
|
|||
|
if (!videoRoot)
|
|||
|
{
|
|||
|
var asset = Resources.Load("Default/System/VideoRoot");
|
|||
|
videoRoot = GameObject.Instantiate(asset) as GameObject;
|
|||
|
videoRoot.name = "[VideoRoot]";
|
|||
|
if (videoRoot != null)
|
|||
|
{
|
|||
|
GameObject.DontDestroyOnLoad(videoRoot);
|
|||
|
}
|
|||
|
}
|
|||
|
videoScript = videoRoot.GetComponent<VideoRootScript>();
|
|||
|
if (videoScript == null)
|
|||
|
{
|
|||
|
videoRoot.AddComponent<VideoRootScript>();
|
|||
|
}
|
|||
|
videoScript.PrepareVideo("video_login", preparedCallBack, finishCall, isShowMask, isLoop, extType);
|
|||
|
}
|
|||
|
|
|||
|
public static void PlayVideo(string name, OnPreparedCall preparedCallBack = null, OnFinishCall finishCall = null, bool isShowMask = false, bool isLoop = false, VideoPlayExt extType = VideoPlayExt.Mp4)
|
|||
|
{
|
|||
|
var videoRoot = GameObject.Find("[VideoRoot]");
|
|||
|
VideoRootScript videoScript = null;
|
|||
|
if (!videoRoot)
|
|||
|
{
|
|||
|
var asset = Resources.Load("Default/System/VideoRoot");
|
|||
|
videoRoot = GameObject.Instantiate(asset) as GameObject;
|
|||
|
videoRoot.name = "[VideoRoot]";
|
|||
|
if (videoRoot != null)
|
|||
|
{
|
|||
|
GameObject.DontDestroyOnLoad(videoRoot);
|
|||
|
}
|
|||
|
}
|
|||
|
videoScript = videoRoot.GetComponent<VideoRootScript>();
|
|||
|
if (videoScript == null)
|
|||
|
{
|
|||
|
videoRoot.AddComponent<VideoRootScript>();
|
|||
|
}
|
|||
|
videoScript.Play("video_login", preparedCallBack, finishCall, isShowMask, isLoop, extType);
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region//公共函数
|
|||
|
/// <summary>
|
|||
|
/// 准备视频
|
|||
|
/// </summary>
|
|||
|
/// <param name="name"></param>
|
|||
|
/// <param name="preparedCallBack"></param>
|
|||
|
/// <param name="finishCall"></param>
|
|||
|
/// <param name="isShowMask"></param>
|
|||
|
/// <param name="isLoop"></param>
|
|||
|
/// <param name="extType"></param>
|
|||
|
public void PrepareVideo(string name, OnPreparedCall preparedCallBack = null, OnFinishCall finishCall = null, bool isShowMask = false, bool isLoop = false, VideoPlayExt extType = VideoPlayExt.Mp4)
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(name))
|
|||
|
return;
|
|||
|
_fileName = name;
|
|||
|
_preparedCallBack = preparedCallBack;
|
|||
|
_finishCallBack = finishCall;
|
|||
|
Initialize();
|
|||
|
if (isShowMask)
|
|||
|
{
|
|||
|
ShowMaskTexture();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_mask.gameObject.SetActive(false);
|
|||
|
}
|
|||
|
_videoPlayer.isLooping = isLoop;
|
|||
|
SetExtName(extType);
|
|||
|
Prepare(name);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
/// <param name="name">视频名字</param>
|
|||
|
/// <param name="type">播放类型</param>
|
|||
|
/// <param name="extType">视频格式</param>
|
|||
|
/// <param name="preparedCallBack">视频准备成功回调</param>
|
|||
|
/// <param name="finishCall">视频播放完毕成功回调</param>
|
|||
|
/// <param name="isShowMask">是否显示背景遮罩</param>
|
|||
|
public void Play(string name, OnPreparedCall preparedCallBack = null, OnFinishCall finishCall = null, bool isShowMask = false, bool isLoop = false, VideoPlayExt extType = VideoPlayExt.Mp4)
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(name))
|
|||
|
return;
|
|||
|
_fileName = name;
|
|||
|
_preparedCallBack = preparedCallBack;
|
|||
|
_finishCallBack = finishCall;
|
|||
|
Initialize();
|
|||
|
if (isShowMask)
|
|||
|
{
|
|||
|
ShowMaskTexture();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_mask.gameObject.SetActive(false);
|
|||
|
}
|
|||
|
_mask.gameObject.SetActive(false);
|
|||
|
_videoPlayer.isLooping = isLoop;
|
|||
|
SetExtName(extType);
|
|||
|
PlayLocal(name);
|
|||
|
}
|
|||
|
|
|||
|
public void StopVideo()
|
|||
|
{
|
|||
|
if (_videoPlayer != null)
|
|||
|
{
|
|||
|
_videoPlayer.Stop();
|
|||
|
//隐藏视频播放节点
|
|||
|
_preparedCallBack = null;
|
|||
|
_finishCallBack = null;
|
|||
|
UnInitialize();
|
|||
|
gameObject.SetActive(false);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool IsPlaying()
|
|||
|
{
|
|||
|
if (_videoPlayer != null)
|
|||
|
{
|
|||
|
return _videoPlayer.isPlaying;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
//点击跳过
|
|||
|
public void Skip()
|
|||
|
{
|
|||
|
//停止视频播放
|
|||
|
if (_videoPlayer != null)
|
|||
|
{
|
|||
|
_videoPlayer.Stop();
|
|||
|
}
|
|||
|
//隐藏视频播放节点
|
|||
|
_preparedCallBack = null;
|
|||
|
_finishCallBack = null;
|
|||
|
gameObject.SetActive(false);
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region//私有函数
|
|||
|
//播放在线视频
|
|||
|
private void PlayOline(string name)
|
|||
|
{
|
|||
|
string url = FixOnlineUrl(name);
|
|||
|
if (string.IsNullOrEmpty(url))
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
StartCoroutine(playVideo(url));
|
|||
|
}
|
|||
|
|
|||
|
//播放本地视频
|
|||
|
private void PlayLocal(string name)
|
|||
|
{
|
|||
|
string path = IsExitVideoFile(name);
|
|||
|
if (string.IsNullOrEmpty(path))
|
|||
|
{
|
|||
|
//本地视频不存在 播放online视频
|
|||
|
PlayOline(name);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
string url = FixLocalUrl(path);
|
|||
|
if (!gameObject.activeSelf)
|
|||
|
gameObject.SetActive(true);
|
|||
|
StartCoroutine(playVideo(url));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void Prepare(string name)
|
|||
|
{
|
|||
|
string url = string.Empty;
|
|||
|
string path = IsExitVideoFile(name);
|
|||
|
if (string.IsNullOrEmpty(path))
|
|||
|
{
|
|||
|
//本地视频不存在
|
|||
|
url = FixOnlineUrl(name);
|
|||
|
if (string.IsNullOrEmpty(url))
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
url = FixLocalUrl(path);
|
|||
|
if (!gameObject.activeSelf)
|
|||
|
gameObject.SetActive(true);
|
|||
|
}
|
|||
|
StartCoroutine(PrepareVideo(url));
|
|||
|
}
|
|||
|
|
|||
|
//判断视频文件是否存在
|
|||
|
private string IsExitVideoFile(string name)
|
|||
|
{
|
|||
|
string ret = string.Empty;
|
|||
|
string streamingPath = string.Empty;
|
|||
|
#if FUNCELL_LAUNCHER
|
|||
|
//获取当前平台
|
|||
|
MyRuntimePlatform runtimePlatform = LauncherManager.Instance.Data.RuntimePlatform;
|
|||
|
switch (runtimePlatform)
|
|||
|
{
|
|||
|
case MyRuntimePlatform.Standalone:
|
|||
|
case MyRuntimePlatform.AndroidEditor:
|
|||
|
case MyRuntimePlatform.IOSEditor:
|
|||
|
case MyRuntimePlatform.StandaloneEditor:
|
|||
|
streamingPath = Application.streamingAssetsPath;
|
|||
|
ret = string.Format("{0}/Assets/GameAssets/Resources/Video/{1}{2}", streamingPath, name, _ext);
|
|||
|
if (!System.IO.File.Exists(ret))
|
|||
|
{
|
|||
|
ret = string.Empty;
|
|||
|
}
|
|||
|
return ret;
|
|||
|
case MyRuntimePlatform.IOS:
|
|||
|
case MyRuntimePlatform.Android:
|
|||
|
streamingPath = string.Format("{0}/StreamingAssets", Application.persistentDataPath);
|
|||
|
ret = string.Format("{0}/Assets/GameAssets/Resources/Video/{1}{2}", streamingPath, name, _ext);
|
|||
|
if (!System.IO.File.Exists(ret))
|
|||
|
{
|
|||
|
ret = string.Empty;
|
|||
|
}
|
|||
|
if (string.IsNullOrEmpty(ret))
|
|||
|
{
|
|||
|
//从apk中查找是否存在该文件
|
|||
|
string relationPath = string.Format("Assets/GameAssets/Resources/Video/{0}{1}", name, _ext);
|
|||
|
if (IsFileInApk(relationPath))
|
|||
|
{
|
|||
|
streamingPath = Application.streamingAssetsPath;
|
|||
|
ret = string.Format("{0}/Assets/GameAssets/Resources/Video/{1}{2}", streamingPath, name, _ext);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
#else
|
|||
|
streamingPath = Application.dataPath;
|
|||
|
ret = string.Format("{0}/GameAssets/Resources/Video/{1}{2}", streamingPath, name, _ext);
|
|||
|
if (!System.IO.File.Exists(ret))
|
|||
|
{
|
|||
|
ret = string.Empty;
|
|||
|
}
|
|||
|
#endif
|
|||
|
return ret;
|
|||
|
}
|
|||
|
|
|||
|
private string FixOnlineUrl(string name)
|
|||
|
{
|
|||
|
string ret = string.Format("{0}/{1}", _url, name);
|
|||
|
return ret;
|
|||
|
}
|
|||
|
private string FixLocalUrl(string path)
|
|||
|
{
|
|||
|
////判断视频本地文件是否存在
|
|||
|
return path.Replace(@"\", "/");
|
|||
|
}
|
|||
|
|
|||
|
private string FixTexturePath(string name)
|
|||
|
{
|
|||
|
//string lan =UnityEngine.Gonbest.MagicCube.FLanguage.Default;
|
|||
|
|
|||
|
string ret = string.Format("GameAssets/Resources/Texture/UI/CH/{0}", name);
|
|||
|
return ret;
|
|||
|
}
|
|||
|
//private void OnGUI()
|
|||
|
//{
|
|||
|
// GUIStyle style = new GUIStyle
|
|||
|
// {
|
|||
|
// border = new RectOffset(10, 10, 10, 10),
|
|||
|
// fontSize = 25,
|
|||
|
// fontStyle = FontStyle.BoldAndItalic,
|
|||
|
// };
|
|||
|
// // normal:Rendering settings for when the component is displayed normally.
|
|||
|
// style.normal.textColor = new Color(200 / 255f, 180 / 255f, 150 / 255f); // 需要除以255,因为范围是0-1
|
|||
|
// //GUI.Label(new Rect(100, 100, 200, 80), , style);
|
|||
|
//}
|
|||
|
|
|||
|
private void SetExtName(VideoPlayExt extType)
|
|||
|
{
|
|||
|
switch (extType)
|
|||
|
{
|
|||
|
case VideoPlayExt.Mov:
|
|||
|
_ext = ".mov";
|
|||
|
break;
|
|||
|
case VideoPlayExt.Mpg:
|
|||
|
_ext = ".mpg";
|
|||
|
break;
|
|||
|
case VideoPlayExt.Mpeg:
|
|||
|
_ext = ".mpeg";
|
|||
|
break;
|
|||
|
case VideoPlayExt.Mp4:
|
|||
|
_ext = ".mp4";
|
|||
|
break;
|
|||
|
case VideoPlayExt.Avi:
|
|||
|
_ext = ".avi";
|
|||
|
break;
|
|||
|
case VideoPlayExt.Asf:
|
|||
|
_ext = ".asf";
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//播放错误回调
|
|||
|
private void PlayErrorRecived(VideoPlayer vp, string msg)
|
|||
|
{
|
|||
|
if (!string.IsNullOrEmpty(msg))
|
|||
|
{
|
|||
|
UnityEngine.Debug.LogError("播放错误播放错误播放错误播放错误播放错误播放错误播放错误");
|
|||
|
if (_preparedCallBack != null)
|
|||
|
{
|
|||
|
_preparedCallBack();
|
|||
|
_preparedCallBack = null;
|
|||
|
}
|
|||
|
if (_finishCallBack != null)
|
|||
|
{
|
|||
|
_finishCallBack();
|
|||
|
_finishCallBack = null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//准备视频
|
|||
|
private IEnumerator PrepareVideo(string url)
|
|||
|
{
|
|||
|
_videoPlayer.url = url;
|
|||
|
_videoPlayer.renderMode = VideoRenderMode.CameraFarPlane;
|
|||
|
_videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
|
|||
|
|
|||
|
_videoPlayer.controlledAudioTrackCount = 1;
|
|||
|
_videoPlayer.SetTargetAudioSource(0, _audioSource);
|
|||
|
|
|||
|
|
|||
|
//这里一定要让以上工作完成后才能开始准备videoPlayer
|
|||
|
_videoPlayer.Prepare();
|
|||
|
|
|||
|
while (!_videoPlayer.isPrepared)
|
|||
|
{
|
|||
|
//Debug.Log("Preparing Video");
|
|||
|
yield return null;
|
|||
|
}
|
|||
|
if (_preparedCallBack != null)
|
|||
|
{
|
|||
|
_preparedCallBack();
|
|||
|
_preparedCallBack = null;
|
|||
|
gameObject.SetActive(false);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private IEnumerator playVideo(string url)
|
|||
|
{
|
|||
|
if (string.Equals(_videoPlayer.url, url))
|
|||
|
{
|
|||
|
//判断视频是否准备好了
|
|||
|
if (_videoPlayer.isPrepared)
|
|||
|
{
|
|||
|
_videoPlayer.Play();
|
|||
|
_audioSource.enabled = true;
|
|||
|
//视频播放成功了隐藏mask
|
|||
|
//_mask.gameObject.SetActive(false);
|
|||
|
yield return null;
|
|||
|
//等待一帧开始播放声音
|
|||
|
//_audioSource.enabled = true;
|
|||
|
_audioSource.Play();
|
|||
|
_mask.gameObject.SetActive(false);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//走正常播放流程
|
|||
|
_videoPlayer.url = url;
|
|||
|
_videoPlayer.renderMode = VideoRenderMode.CameraFarPlane;
|
|||
|
_videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
|
|||
|
|
|||
|
//_videoPlayer.EnableAudioTrack(0, true);
|
|||
|
_videoPlayer.controlledAudioTrackCount = 1;
|
|||
|
_videoPlayer.SetTargetAudioSource(0, _audioSource);
|
|||
|
|
|||
|
|
|||
|
//这里一定要让以上工作完成后才能开始准备videoPlayer
|
|||
|
_videoPlayer.Prepare();
|
|||
|
|
|||
|
while (!_videoPlayer.isPrepared)
|
|||
|
{
|
|||
|
//Debug.Log("Preparing Video");
|
|||
|
yield return null;
|
|||
|
}
|
|||
|
_videoPlayer.Play();
|
|||
|
//_audioSource.enabled = false;
|
|||
|
//视频播放成功了隐藏mask
|
|||
|
//_mask.gameObject.SetActive(false);
|
|||
|
//yield return null;
|
|||
|
//等待一帧开始播放声音
|
|||
|
_audioSource.enabled = true;
|
|||
|
_audioSource.Play();
|
|||
|
if (_preparedCallBack != null)
|
|||
|
{
|
|||
|
_preparedCallBack();
|
|||
|
_preparedCallBack = null;
|
|||
|
}
|
|||
|
_mask.gameObject.SetActive(false);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//显示背景mask遮挡texture
|
|||
|
private void ShowMaskTexture()
|
|||
|
{
|
|||
|
string name = string.Empty;
|
|||
|
int random = Random.Range(0, TEXTURE_COUNT);
|
|||
|
switch (random)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
name = TEX_MASK_0;
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
name = TEX_MASK_1;
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
name = TEX_MASK_2;
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
name = TEX_MASK_3;
|
|||
|
break;
|
|||
|
}
|
|||
|
Texture tex = GetTextureFromCache(name);
|
|||
|
if (tex != null)
|
|||
|
{
|
|||
|
Renderer rd = _mask.GetComponent<Renderer>();
|
|||
|
if (rd != null)
|
|||
|
{
|
|||
|
if (rd.sharedMaterial == null)
|
|||
|
{
|
|||
|
Shader sh = PrefabAssetRuntimeUtil.FindShader("Unlit/Transparent Colored");
|
|||
|
rd.sharedMaterial = new Material(sh);
|
|||
|
}
|
|||
|
rd.sharedMaterial.mainTexture = tex;
|
|||
|
}
|
|||
|
_mask.gameObject.SetActive(true);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//从缓存中获取背景texture
|
|||
|
private Texture GetTextureFromCache(string name)
|
|||
|
{
|
|||
|
Texture tex = null;
|
|||
|
if (_texCache.ContainsKey(name))
|
|||
|
{
|
|||
|
tex = _texCache[name];
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//加载texture
|
|||
|
tex = LoadTexture(name);
|
|||
|
_texCache.Add(name, tex);
|
|||
|
}
|
|||
|
return tex;
|
|||
|
}
|
|||
|
|
|||
|
//加载mask 图片
|
|||
|
private Texture LoadTexture(string name)
|
|||
|
{
|
|||
|
Texture tex = null;
|
|||
|
//获取当前平台
|
|||
|
string path = FixTexturePath(name);
|
|||
|
string streamingPath = string.Empty;
|
|||
|
string filePath = string.Empty;
|
|||
|
#if FUNCELL_LAUNCHER
|
|||
|
MyRuntimePlatform runtimePlatform = LauncherManager.Instance.Data.RuntimePlatform;
|
|||
|
switch (runtimePlatform)
|
|||
|
{
|
|||
|
case MyRuntimePlatform.Standalone:
|
|||
|
case MyRuntimePlatform.AndroidEditor:
|
|||
|
case MyRuntimePlatform.IOSEditor:
|
|||
|
case MyRuntimePlatform.StandaloneEditor:
|
|||
|
filePath = string.Format("{0}/{1}.jpg", Application.dataPath, path);
|
|||
|
//创建文件流
|
|||
|
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
|
|||
|
fileStream.Seek(0, SeekOrigin.Begin);
|
|||
|
//创建文件长度的缓冲区
|
|||
|
byte[] bytes = new byte[fileStream.Length];
|
|||
|
//读取文件
|
|||
|
fileStream.Read(bytes, 0, (int)fileStream.Length);
|
|||
|
//释放文件读取liu
|
|||
|
fileStream.Close();
|
|||
|
fileStream.Dispose();
|
|||
|
fileStream = null;
|
|||
|
|
|||
|
//创建Texture
|
|||
|
int width = 1136;
|
|||
|
int height = 640;
|
|||
|
Texture2D texture2D = new Texture2D(width, height);
|
|||
|
texture2D.LoadImage(bytes);
|
|||
|
//texture2D.Resize(1136, 640);
|
|||
|
tex = texture2D;
|
|||
|
break;
|
|||
|
case MyRuntimePlatform.IOS:
|
|||
|
case MyRuntimePlatform.Android:
|
|||
|
//判断图片是否在转移目录里面
|
|||
|
streamingPath = string.Format("{0}/StreamingAssets", Application.persistentDataPath);
|
|||
|
filePath = string.Format("{0}/Assets/{1}.unity3d", streamingPath, path);
|
|||
|
if (!File.Exists(filePath))
|
|||
|
{
|
|||
|
//如果不在转移目录里面 那么从apk中读取
|
|||
|
string relationPath = path;
|
|||
|
if (IsFileInApk(relationPath))
|
|||
|
{
|
|||
|
streamingPath = Application.streamingAssetsPath;
|
|||
|
filePath = string.Format("{0}/Assets/{1}", streamingPath, path);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
filePath = string.Empty;
|
|||
|
}
|
|||
|
}
|
|||
|
if (!string.IsNullOrEmpty(filePath))
|
|||
|
{
|
|||
|
AssetBundle ab = AssetBundle.LoadFromFile(filePath);
|
|||
|
tex = (Texture)ab.LoadAsset(name);
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
#else
|
|||
|
filePath = string.Format("{0}/{1}.jpg", Application.dataPath, path);
|
|||
|
//创建文件流
|
|||
|
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
|
|||
|
fileStream.Seek(0, SeekOrigin.Begin);
|
|||
|
//创建文件长度的缓冲区
|
|||
|
byte[] bytes = new byte[fileStream.Length];
|
|||
|
//读取文件
|
|||
|
fileStream.Read(bytes, 0, (int)fileStream.Length);
|
|||
|
//释放文件读取liu
|
|||
|
fileStream.Close();
|
|||
|
fileStream.Dispose();
|
|||
|
fileStream = null;
|
|||
|
|
|||
|
//创建Texture
|
|||
|
int width = 1136;
|
|||
|
int height = 640;
|
|||
|
Texture2D texture2D = new Texture2D(width, height);
|
|||
|
texture2D.LoadImage(bytes);
|
|||
|
//texture2D.Resize(1136, 640);
|
|||
|
tex = texture2D;
|
|||
|
#endif
|
|||
|
return tex;
|
|||
|
}
|
|||
|
|
|||
|
private void Update()
|
|||
|
{
|
|||
|
if (_videoPlayer != null && _videoPlayer.isPrepared)
|
|||
|
{
|
|||
|
if ((ulong)_videoPlayer.frame >= _videoPlayer.frameCount)
|
|||
|
{
|
|||
|
if (!_videoPlayer.isLooping)
|
|||
|
{
|
|||
|
//当前播放的视频已经播放完毕了
|
|||
|
//隐藏视频播放节点
|
|||
|
if (_finishCallBack != null)
|
|||
|
{
|
|||
|
_finishCallBack();
|
|||
|
_finishCallBack = null;
|
|||
|
gameObject.SetActive(false);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//设置相机depth
|
|||
|
public void SetCamraDepth(float d)
|
|||
|
{
|
|||
|
if (_camera != null)
|
|||
|
{
|
|||
|
_camera.depth = d;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|