Beispiel #1
0
    /// <summary>
    /// 加载部件资源
    /// </summary>
    /// <param name="path">部件资源地址</param>
    /// <param name="callback">加载回调</param>
    protected void LoadPrefabFromPool(string assetAddress, UnityAction <GameObject> callback)
    {
        UnityAction <GameObject> callbackFun = callback;

        AssetUtil.LoadAssetAsync(assetAddress,
                                 (pathOrAddress, returnObject, userData) =>
        {
            //忽略关闭之后的加载回调
            if (!Opened)
            {
                return;
            }

            if (returnObject != null)
            {
                GameObject prefab = (GameObject)returnObject;

                prefab.CreatePool(pathOrAddress);

                callbackFun?.Invoke(prefab);

                InstallScrollController();
            }
            else
            {
                Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
            }
        });
    }
    /// <summary>
    /// 加载环境
    /// </summary>
    private void LoadEnvirontment()
    {
        uint   reloadID = m_ReloadID;
        string path     = m_EnvironmentPath;

        AssetUtil.LoadAssetAsync(path,
                                 (pathOrAddress, returnObject, userData) =>
        {
            if (returnObject != null)
            {
                GameObject prefab = (GameObject)returnObject;
                if (reloadID == m_ReloadID && path.Equals(m_EnvironmentPath) && m_ModelInfoArray != null && m_ModelInfoArray.Length > 0)
                {
                    prefab.CreatePool(1, path);
                    m_LightEnvirontment = prefab.Spawn();
                    m_LightEnvirontment.SetActive(false);

                    ModelBox = m_LightEnvirontment.transform.Find("UI3DBox");
                    ModelBox.localEulerAngles = Vector3.zero;
                    ModelBox.localScale       = Vector3.one;

                    LoadModel(0);
                }
            }
            else
            {
                Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
            }
        });
    }
        public void RequestInitialize(MapController owner, AreaInfo areaInfo)
        {
            m_AreaRoot = new GameObject(Constants.AREA_GAMEOBJECT_NAME_STARTWITHS + areaInfo.Uid).transform;
            m_AreaRoot.SetPositionAndRotation(Vector3.zero, areaInfo.Rotation);
            m_IsReleasing = false;
            m_Owner       = owner;
            m_AreaInfo    = areaInfo;
            DoUpdate_AreaRoot(true);
            string areaDetailInfoAddressableKey = string.Format(Constants.AREA_DETAIL_INFO_FILENAME_FORMAT
                                                                , owner.GetMapUid()
                                                                , areaInfo.Uid);

            m_AreaDetailLoaderHandle = AssetUtil.LoadAssetAsync(areaDetailInfoAddressableKey, OnLoadAreaDetailInfoCompleted);
        }
Beispiel #4
0
        public void RequestInitialize(uint mapUid, System.Action OnReadyToPlayCallback = null)
        {
            DebugUtility.Log(Constants.LOG_TAG, string.Format("Map({0}) Request Initialize", mapUid));

            m_MapUid = mapUid;
            m_ForReadyToPlayCallback = new ForReadyToPlayCallback();
            m_ForReadyToPlayCallback.OnReadyToPlayCallback = OnReadyToPlayCallback;

            m_State = State.LoadingMap;

            m_ExpiredAreaControllers = new BetterList <AreaController>(4);

            // 加载新Map
            AssetUtil.LoadAssetAsync(Constants.MAP_INFO_ADDRESSKEY_STARTWITHS + mapUid, OnLoadMapInfoCompleted);
        }
Beispiel #5
0
    public override void OnHide(object msg)
    {
        base.OnHide(msg);
        m_AnimatorController.OnAnimationEvent -= OnAnimationEvent;
        ServerTimeUtil.Instance.OnTick        -= OnUpdate;
        m_OpenEnd              = false;
        m_SwitchMapEnd         = false;
        m_LoadingPanelParamere = null;
        WwiseUtil.PlaySound((int)SoundID.LoadEnd, false, null);
        //如果全加载过了
        //随机选一个 并且return
        if (m_AllImageLoaded)
        {
            m_Index = Random.Range(IMAGE_INDEX_MIN, IMAGE_INDEX_MAX);
            return;
        }
        //选一个没加载过的
        int index;

        while (true)
        {
            index = Random.Range(IMAGE_INDEX_MIN, IMAGE_INDEX_MAX);
            Sprite sprite;
            if (!m_LoadList.TryGetValue(index, out sprite))
            {
                m_Index = index;
                break;
            }
        }
        //加载并且存一个id
        //如果数量都加载了 就标记m_AllImageLoaded 为true
        string m_BgAddress = string.Format(LOADING_ADDRESS, m_Index);

        AssetUtil.LoadAssetAsync(m_BgAddress,
                                 (pathOrAddress, returnObject, userData) =>
        {
            if (returnObject != null)
            {
                Texture2D texture = (Texture2D)returnObject;
                m_LoadList.Add(m_Index, Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero));
                m_AllImageLoaded = m_LoadList.Values.Count == IMAGE_INDEX_MAX - IMAGE_INDEX_MIN;
            }
            else
            {
                Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
            }
        });
    }
Beispiel #6
0
    /// <summary>
    /// 加载列表模板
    /// </summary>
    /// <param name="assetAddress">资源路径</param>
    private void LoadListTemplate(string assetAddress)
    {
        string path = assetAddress;

        if (m_TemplateStates.ContainsKey(path))
        {
            return;
        }

        m_TemplateStates[path] = false;

        AssetUtil.LoadAssetAsync(assetAddress,
                                 (pathOrAddress, returnObject, userData) =>
        {
            //忽略关闭之后的加载回调
            if (!m_Scroller)
            {
                return;
            }
            //忽略重复的加载
            if (m_Templates.ContainsKey(path))
            {
                return;
            }

            if (returnObject != null)
            {
                GameObject prefab = (GameObject)returnObject;
                prefab.CreatePool(pathOrAddress);
                m_Templates[path]      = prefab;
                m_TemplateStates[path] = true;
            }
            else
            {
                if (m_Templates.ContainsKey(path))
                {
                    m_Templates.Remove(path);
                }

                Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
            }

            ResetListTemplate();
        });
    }
Beispiel #7
0
    /// <summary>
    /// 显示通讯列表
    /// </summary>
    /// <param name="groupId"></param>
    private void ShowVideoPhoneList(int index)
    {
        if (!m_Root.gameObject.activeSelf)
        {
            m_Root.gameObject.SetActive(true);
        }
        if (m_PlayParameter.npcId > 0)
        {
            m_Name.text = m_CfgEternityProxy.GetNpcByKey(m_PlayParameter.npcId).Name;
        }
        else
        {
            m_Name.text = TableUtil.GetLanguageString(string.Format("video_phone_name_{0}", m_VideoPhones[index].Value.Id));
        }
        UIUtil.SetIconImage(m_Icon, (uint)m_VideoPhones[index].Value.Icon);

        if (m_SoundPlayObj != null)
        {
            GameObject.DestroyImmediate(m_SoundPlayObj.GetComponent <AK.Wwise.TAkGameObjEventMonitor>());
            WwiseUtil.PlaySound(m_VideoPhones[index].Value.Voice, false, m_SoundPlayObj.transform, OnPlayEnd, new UserEndData(m_VideoPhones.GetHashCode(), index));
        }

        // m_Coroutine = UIManager.Instance.StartCoroutine(Excute(2f, (int tindex) =>
        //{
        //    Debug.LogError("---------------> play  hasdId = " + m_VideoPhones.GetHashCode() + " tindex = " + tindex);
        //     //m_Index = tindex;
        //     WwiseUtil.PlaySound(11, false, m_SoundPlayObj.transform, OnPlayEnd, new UserEndData(m_VideoPhones.GetHashCode(), tindex));
        //}, index));

        AssetUtil.LoadAssetAsync(m_VideoPhones[index].Value.VoiceEffect,
                                 (pathOrAddress, returnObject, userData) =>
        {
            if (returnObject != null)
            {
                Material audio         = (Material)returnObject;
                m_Audio.material       = audio;
                m_RepeatAudio.material = audio;
            }
            else
            {
                Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
            }
        });
    }
 public override void OnInitialize(ISpacecraftAvatarProperty property)
 {
     m_Property        = property;
     m_RendererVisible = new List <int>((int)ChangeSpacecraftVisibilityEvent.VisibilityType.Count);
     m_EternityProxy   = GameFacade.Instance.RetrieveProxy(ProxyName.CfgEternityProxy) as CfgEternityProxy;
     m_GameplayProxy   = GameFacade.Instance.RetrieveProxy(ProxyName.GameplayProxy) as GameplayProxy;
     AssetUtil.LoadAssetAsync(property.GetModelName(),
                              (pathOrAddress, returnObject, userData) =>
     {
         if (returnObject != null)
         {
             OnLoadModel((GameObject)returnObject, property.GetModelName());
         }
         else
         {
             Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
         }
     });
 }
Beispiel #9
0
 /// <summary>
 /// 加载资源
 /// </summary>
 /// <param name="path"></param>
 private void LoadAssetAsync(string path)
 {
     AssetUtil.LoadAssetAsync(path,
                              (pathOrAddress, returnObject, userData) =>
     {
         if (returnObject != null)
         {
             GameObject prefab = returnObject as GameObject;
             if (prefab.CountPooled() < 10)
             {
                 prefab.CreatePool(10, path);
             }
         }
         else
         {
             Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
         }
     });
 }
    /// <summary>
    /// 播放下一个消息
    /// </summary>
    private void PlayNextMessage()
    {
        if (m_MessageList.Count > 0)
        {
            m_MessageList.Sort((a, b) => { return(b.priority - a.priority); });

            m_CurrentMessage = m_MessageList[0];

            m_MessageList.RemoveAt(0);

            AssetUtil.LoadAssetAsync(m_CurrentMessage.prefabPath,
                                     (pathOrAddress, returnObject, userData) =>
            {
                if (!m_RootNode)
                {
                    return;
                }

                if (returnObject != null)
                {
                    GameObject prefab = (GameObject)returnObject;

                    prefab.CreatePool(pathOrAddress);

                    m_CurrentMessageView = prefab.Spawn(m_RootNode).transform;
                    m_CurrentMessageView.gameObject.SetActive(true);

                    m_CurrentAnimationEvent = FindComponent <UIAnimationEvent>(m_CurrentMessageView, "Content/Message");
                    m_CurrentAnimationEvent.OnAnimationEvent -= OnMessagePlayComplete;
                    m_CurrentAnimationEvent.OnAnimationEvent += OnMessagePlayComplete;

                    InitializeMessageAnimation();
                }
                else
                {
                    Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));

                    PlayNextMessage();
                }
            }
                                     );
        }
    }
        /// <summary>
        /// 特效的初始化
        /// </summary>
        /// <param name="effectPath"></param>
        /// <param name="poolGroup"></param>
        public void Initialize(string effectPath, string poolGroup = "", OnEffectLoaded OnEffectLoaded = null, System.Object usedata = null)
        {
            m_OnEffectLoaded += OnEffectLoaded;
            this.usedata      = usedata;
            m_AssetName       = effectPath;
            m_Status          = EffectStatus.Playing;
            m_EffectID        = EffectID();

            MyName = "EffectController_" + m_AssetName + "_" + m_EffectID;
            name   = MyName;

            LoadData d = new LoadData();

            d.effectID  = m_EffectID;
            d.assetName = m_AssetName;
            if (!string.IsNullOrEmpty(m_AssetName) && effectPath != "None")
            {
                m_AssetLoadHandler = AssetUtil.LoadAssetAsync(effectPath, OnEffectLoadComplete, Loader.AssetLoaderPriority.Default, null, d);
            }
        }
Beispiel #12
0
    /// <summary>
    /// 加载部件资源
    /// </summary>
    /// <param name="path">部件资源地址</param>
    /// <param name="parent">部件资源挂点</param>
    protected void LoadViewPart(string assetAddress, Transform parent)
    {
        UnloadViewPart();

        m_AssetPath = assetAddress;

        string path = assetAddress;

        AssetUtil.LoadAssetAsync(assetAddress,
                                 (pathOrAddress, returnObject, userData) =>
        {
            //忽略关闭之后的加载回调
            if (!Opened)
            {
                return;
            }

            //忽略已经失效的加载回调
            if (!string.Equals(m_AssetPath, path))
            {
                return;
            }

            if (returnObject != null)
            {
                GameObject prefab = (GameObject)returnObject;

                prefab.CreatePool(pathOrAddress);

                m_Transform = prefab.Spawn(parent).transform;

                OnViewPartLoaded();
            }
            else
            {
                m_Transform = null;

                Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
            }
        });
    }
Beispiel #13
0
 public void ChangeMaterial(string name, Color color = default(Color), float rate = 0)
 {
     AssetUtil.LoadAssetAsync(name,
                              (pathOrAddress, uObj, userData) =>
     {
         UnityEngine.Material cMaterial = uObj as UnityEngine.Material;
         cMaterial.SetColor("_Frenel", color);
         /// 变化范围1-0-1-0-1...
         cMaterial.SetFloat("_Fre", 1);
         cMaterial.SetFloat("_Vertex", 0);
         if (m_MeshRenderer)
         {
             m_MeshRenderer.material = cMaterial;
             if (rate > 0)
             {
                 m_Rate = rate;
             }
         }
     }
                              );
 }
Beispiel #14
0
    public void CreateEffectsPools(string effectPrefabAddress)
    {
        if (effectPrefabAddress.Length == 0)
        {
            return;
        }

        if (m_EffectsPoolTable.ContainsKey(effectPrefabAddress))
        {
            return;
        }

        AssetUtil.LoadAssetAsync(effectPrefabAddress,
                                 (pathOrAddress, returnObject, userData) =>
        {
            if (returnObject != null)
            {
                GameObject go = (UnityEngine.GameObject)returnObject;
                Assert.IsNotNull(go, effectPrefabAddress);
                if (m_EffectsPoolTable.ContainsKey(effectPrefabAddress))
                {
                    return;
                }
                go.CreatePool(10, effectPrefabAddress);
                go.name = effectPrefabAddress;
                if (!m_EffectsPoolTable.ContainsKey(effectPrefabAddress))
                {
                    m_EffectsPoolTable.Add(effectPrefabAddress, go);
                }
            }
            else
            {
                Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
            }
        });
    }
Beispiel #15
0
    /// <summary>
    /// 加载光照组
    /// </summary>
    private void LoadPrefab()
    {
        if (m_Lighting != null)
        {
            LoadModel();
        }
        else if (!m_LightingLoading)
        {
            m_LightingLoading = true;

            string path = GetLightPrefabPath();

            AssetUtil.LoadAssetAsync(path,
                                     (pathOrAddress, returnObject, userData) =>
            {
                if (returnObject != null)
                {
                    if (pathOrAddress.Equals(path))
                    {
                        GameObject prefab = (GameObject)returnObject;
                        prefab.CreatePool(1, pathOrAddress);
                        m_Lighting = prefab.Spawn();
                        m_Lighting.gameObject.SetActive(false);
                        m_LightingLoading = false;
                        m_ModelRoot       = m_Lighting.transform.Find("UI3DBox");

                        LoadModel();
                    }
                }
                else
                {
                    Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
                }
            });
        }
    }
Beispiel #16
0
    /// <summary>
    /// 加载模型
    /// </summary>
    /// <param name="i">索引</param>
    private void LoadModel(int i)
    {
        if (m_ModelInfoArray != null && i < m_ModelInfoArray.Length)
        {
            uint reloadID = m_ReloadID;

            int    index = i;
            string path  = m_ModelInfoArray[i].perfab;

            if (!string.IsNullOrEmpty(path))
            {
                AssetUtil.LoadAssetAsync(path,
                                         (pathOrAddress, returnObject, userData) =>
                {
                    if (reloadID != m_ReloadID)
                    {
                        return;
                    }
                    if (m_LightEnvirontment == null)
                    {
                        return;
                    }
                    if (m_ModelInfoArray == null)
                    {
                        return;
                    }
                    if (index >= m_ModelInfoArray.Length)
                    {
                        return;
                    }
                    if (!path.Equals(m_ModelInfoArray[index].perfab))
                    {
                        return;
                    }

                    WarShipRotate autoMoveAndRotate = ModelBox.GetOrAddComponent <WarShipRotate>();
                    if (autoMoveAndRotate != null)
                    {
                        autoMoveAndRotate.IsRotate = ModelRotate;
                    }

                    GameObject prefab = returnObject as GameObject;
                    prefab.CreatePool(pathOrAddress);

                    if (ModelArray == null)
                    {
                        ModelArray = new GameObject[m_ModelInfoArray.Length];
                    }

                    ModelArray[index] = prefab.Spawn(ModelBox);
                    ModelArray[index].SetActive(true);
                    ModelArray[index].transform.localEulerAngles = m_ModelInfoArray[index].rotation;
                    ModelArray[index].transform.localPosition    = m_ModelInfoArray[index].position;
                    ModelArray[index].transform.localScale       = m_ModelInfoArray[index].scale;

                    if (index < ModelArray.Length - 1)
                    {
                        LoadModel(index + 1);
                    }
                    else
                    {
                        RebuildModelBounds();

                        if (!string.IsNullOrEmpty(EffectPerfab))
                        {
                            LoadEffect();
                        }
                        else
                        {
                            InstallModelAndEffect();
                        }
                    }
                });
            }
        }
    }
Beispiel #17
0
    /// <summary>
    /// 加载模型
    /// </summary>
    private void LoadModel()
    {
        if (m_Model != null)
        {
            m_Model.Recycle();
            m_Model     = null;
            m_ModelPath = null;
        }

        string path = m_ModelPathNext;

        if (string.IsNullOrEmpty(path))
        {
            return;
        }

        AssetUtil.LoadAssetAsync(path,
                                 (pathOrAddress, returnObject, userData) =>
        {
            if (returnObject != null)
            {
                GameObject prefab = (GameObject)returnObject;

                if (path.Equals(m_ModelPathNext))
                {
                    m_ModelPath     = m_ModelPathNext;
                    m_ModelPathNext = null;

                    prefab.CreatePool(1, path);
                    m_Model = prefab.Spawn(m_ModelRoot);
                    m_Model.transform.rotation      = Quaternion.Euler(GetBaseRotation() + m_Rotation);
                    m_Model.transform.localPosition = GetBasePosition() + m_Position;
                    m_Model.transform.localScale    = m_Scale;

                    m_RenderTexture = m_RenderTexture != null ? m_RenderTexture : new RenderTexture(GetTextureSize(), GetTextureSize(), 24, RenderTextureFormat.ARGB32);

                    m_ModelCamera = m_Lighting.GetComponentInChildren <Camera>();
                    if (m_ModelCamera != null)
                    {
                        m_ModelCamera.targetTexture = m_RenderTexture;
                    }

                    m_RawImage = GetComponent <RawImage>();
                    if (m_RawImage != null)
                    {
                        m_RawImage.texture = m_RenderTexture;
                        m_RawImage.gameObject.SetActive(true);
                        if (m_ModelCamera != null)
                        {
                            RectTransform rect   = m_RawImage.GetComponent <RectTransform>();
                            m_ModelCamera.aspect = rect.rect.width / rect.rect.height;
                        }
                    }

                    m_Lighting.gameObject.SetActive(true);

                    SetToLayer(m_Lighting, true);
                    CheckCharacterRotationComponent();
                    if (m_Lookat)
                    {
                        SetTarget();
                    }
                }
            }
            else
            {
                Debug.LogError(string.Format("资源加载成功,但返回null,  pathOrAddress = {0}", pathOrAddress));
            }
        });
    }