using System; using UnityEngine; using UnityEngine.Gonbest.MagicCube; /// /// 组合纹理的相关数据类 /// public class UISutureTextureData { #region//私有变量 //名字 private string _name; private string _leftName; private string _rightName; //左边纹理 private Texture2D _left; //右边纹理 private Texture2D _right; //是否使用自定义加载 private bool _useCustomLoad = false; //是否使用流文件 private bool _isFromStreamFile = false; //扩展名 private string _fileExt = ".png"; //加载完成回调 private Action _onLoadFinished; #endregion #region//属性定义 //当前纹理数据是否有效 public bool IsValid { get { return _left != null && _right != null; } } public Texture2D Left { get { return _left; } set { _left = value; } } public Texture2D Right { get { return _right; } set { _right = value; } } public string Name { get { return _name; } } public bool UseCustomLoad { get { return _useCustomLoad; } } public string LeftName { get { return _leftName; } } public string RightName { get { return _rightName; } } public bool IsFromStreamFile { get { return _isFromStreamFile; } set { _isFromStreamFile = value; } } public string FileExt { get { return _fileExt; } set { _fileExt = value; } } #endregion #region//构造函数 public UISutureTextureData() { _useCustomLoad = false; } public UISutureTextureData(bool useCustomLoad) { _useCustomLoad = useCustomLoad; } public UISutureTextureData(string name, Texture2D left, Texture2D right) { _name = name; _leftName = _name + "_l"; _rightName = _name + "_r"; _left = left; _right = right; } #endregion #region//公共接口 public void Load(string name, Action loadFinished) { if (_name != name) { //Debug.Log("UISutureTextureData:Load:" + name); UnLoad(); _name = name; _leftName = _name + "_l"; _rightName = _name + "_r"; _onLoadFinished = loadFinished; if (!String.IsNullOrEmpty(_name)) { if (!_useCustomLoad) { if (_isFromStreamFile) { OnLoadFromStreamFile(); } else { OnLoadFromResource(); } OnLoadFinishedCallBack(true); } else { OnCustomLoadImp(); } } } } public void UnLoad() { if (!String.IsNullOrEmpty(_name)) { if (!_useCustomLoad) { #if !UNITY_EDITOR if (_left != null) { GameObject.Destroy(_left); Resources.UnloadAsset(_left); } if (_right != null) { GameObject.Destroy(_right); Resources.UnloadAsset(_right); } #endif } else { OnCustomUnLoadImp(); } _left = null; _right = null; _name = null; _leftName = null; _rightName = null; _onLoadFinished = null; } } private void OnLoadFromResource() { _left = Resources.Load(_leftName); _right = Resources.Load(_rightName); } private void OnLoadFromStreamFile() { try { AppManager.Instance.ReadBytesAsync(_leftName + _fileExt, bytes => { Debug.Log("OnLoadFromStreamFile:" + _leftName + _fileExt + " Is Exist: " + (bytes != null).ToString()); if (bytes != null) { _left = new Texture2D(256, 256, TextureFormat.RGBA32, false); _left.LoadImage(bytes); _left.wrapMode = TextureWrapMode.Clamp; _left.filterMode = FilterMode.Bilinear; } }); AppManager.Instance.ReadBytesAsync(_rightName + _fileExt, bytes => { Debug.Log("OnLoadFromStreamFile:" + _rightName + _fileExt + " Is Exist:" + (bytes != null).ToString()); if (bytes != null) { _right = new Texture2D(256, 256, TextureFormat.RGBA32, false); _right.LoadImage(bytes); _right.wrapMode = TextureWrapMode.Clamp; _right.filterMode = FilterMode.Bilinear; } }); } catch(Exception ex) { Debug.LogError("读取图片文件失败!" + _leftName + "::" + _rightName); Debug.LogException(ex); } } #endregion #region//子类继承处理 和调用 protected virtual void OnCustomLoadImp() { } protected virtual void OnCustomUnLoadImp() { } protected void OnLoadFinishedCallBack(bool loaded) { if (_onLoadFinished != null) _onLoadFinished(loaded); } #endregion }