Ejemplo n.º 1
0
        // 播放音效
        public uint PlayEffect(GameObject obj, string strEffect, bool bLoop = false)
        {
            if (obj == null)
            {
                return(0);
            }
            CheckAduioListener();


            IAudioSource isource = AssetManager.Instance().CreateAudio(strEffect, obj.transform, null);
            AudioSource  source  = isource.GetSource();

            if (source == null)
            {
                return(0);
            }
            source.loop   = bLoop;
            source.volume = m_fEffectVolume;
            //source.mute = m_bMute;
            source.mute         = me_bMute;
            source.spatialBlend = 0.0f;
            source.Play();

            ++m_uIDSeed;
            m_fxAudio.Add(m_uIDSeed, isource);

            return(m_uIDSeed);
        }
Ejemplo n.º 2
0
        public void PlayMusic(string strMusic, float fDelay = 0.0f)
        {
            if (m_strMusic == strMusic)
            {
                return;
            }

            CheckAduioListener();

            GameObject cam = FindMainCamera();

            if (cam == null)
            {
                return;
            }

            if (m_musicSource != null)
            {
                m_musicSource.Release();
                m_musicSource = null;
            }

            m_musicSource = AssetManager.Instance().CreateAudio(strMusic, cam.transform, null);

            if (m_musicSource == null)
            {
                return;
            }

            AudioSource source = m_musicSource.GetSource();

            if (source != null)
            {
                source.priority    = 10; // 背景音乐优先级较高
                source.loop        = true;
                source.volume      = m_fMusicVolume;
                source.playOnAwake = false;
                //source.mute = m_bMute;
                source.mute = mm_bMute;
                source.PlayDelayed(fDelay);
            }
        }
Ejemplo n.º 3
0
        void OnCreatePrefab(IPrefab obj, object param)
        {
            m_prefab = obj;
            if (m_prefab != null)
            {
                if (m_prefab.GetObj() != null)
                {
                    m_obj = GameObject.Instantiate(m_prefab.GetObj()) as GameObject;
                    RefreshShader(m_obj);
                    AssetManager.Instance().AddGameObjPool(this);

                    if (m_callback != null)
                    {
                        m_callback(this, param);
                    }
                }
            }
            else
            {
                Utility.Log.Error("Create gameobject failed {0}", m_strObjName);
            }
        }
Ejemplo n.º 4
0
 public void CreateGameObject(ref string strObjName, CreateGameObjectEvent callBack, object custumParam = null, TaskPriority ePriority = TaskPriority.TaskPriority_Normal)
 {
     m_callback   = callBack;
     m_strObjName = strObjName;
     m_prefab     = AssetManager.Instance().CreatePrefab(strObjName, OnCreatePrefab, custumParam, ePriority);
 }
Ejemplo n.º 5
0
        public void Update(float dt)
        {
            m_fElapseTime += dt;
            if (m_fElapseTime < 0.5f)
            {
                return;
            }
            {
                Dictionary <string, List <IGameObject> > .Enumerator iter = m_mapRenderObjIdle.GetEnumerator();
                while (iter.MoveNext()) // 缓存池里面有数据
                {
                    List <IGameObject> lstRemove = iter.Current.Value;
                    for (int i = 0, imax = lstRemove.Count; i < imax; ++i)
                    {
                        var item = lstRemove[i];
                        if (item.bCacheForever)
                        {
                            continue;
                        }
                        if (Time.realtimeSinceStartup - item.IdleStartTime > 60)
                        {
                            AssetManager.Instance().RemoveGameObjFromPool(item);
                            lstRemove[i].Destroy(); //一个个慢慢删除避免GC过大造成卡顿
                            lstRemove.RemoveAt(i);
                            break;
                        }
                    }
                }
            }

            {
                // 特效更新时间
                Dictionary <int, IEffect> .Enumerator effectiter = m_mapEffect.GetEnumerator();
                while (effectiter.MoveNext())
                {
                    IEffect e = effectiter.Current.Value;
                    if (e != null)
                    {
                        e.Update();
                    }
                }
                // 移除播放完成的特效
                for (int i = 0, imax = m_lstEffectTodelete.Count; i < imax; i++)
                {
                    IEffect obj = null;
                    if (m_mapEffect.TryGetValue(m_lstEffectTodelete[i], out obj))
                    {
                        if (obj != null)
                        {
                            obj.OnComplete();
                            RemoveEffectObj(obj);
                        }
                    }
                }
                m_lstEffectTodelete.Clear();
                //删除特效
                Dictionary <string, List <IEffect> > .Enumerator effectMaoIter = m_mapEffectObjIdle.GetEnumerator();
                while (effectMaoIter.MoveNext()) // 缓存池里面有数据
                {
                    List <IEffect> lstRemove = effectMaoIter.Current.Value;
                    for (int i = 0, imax = lstRemove.Count; i < imax; ++i)
                    {
                        var item = lstRemove[i];
                        if (item.bCacheForever)
                        {
                            continue;
                        }
                        if (Time.realtimeSinceStartup - item.IdleStartTime > 60)
                        {
                            lstRemove[i].Destroy();
                            lstRemove.RemoveAt(i);
                            break;
                        }
                    }
                }
            }
            m_fElapseTime = 0;
        }