コード例 #1
0
        protected IEnumerator LoadWigetAsync <T>(string path, bool dontDestroyOnLoad, System.Action <T> action)
            where T : WidgetBase
        {
            PrefabResource resource = null;

            yield return(Global.ResourceMgr.CreateUIResourceAsync(path, ePath.UI, dontDestroyOnLoad,
                                                                  o => { resource = o; }));

            WidgetBase widget = null;

            if (resource != null)
            {
                widget = ComponentFactory.GetComponent <T>(GameObject.Instantiate(resource.ResourceData) as GameObject,
                                                           IfNotExist.ReturnNull);
            }

            if (widget != null)
            {
                InitWidget(path, widget, null);

                AddWidget(path, widget, dontDestroyOnLoad);
            }

            action(widget as T);
        }
コード例 #2
0
    private IResource CreateResource(eResourceType eType, string name, string assetpath, Object objresource, bool isAssetBundle)
    {
        IResource resource = null;

        switch (eType)
        {
        //case E_ResourceType.Actor:
        case eResourceType.UI:
        case eResourceType.Prefab:
        case eResourceType.Text:
            resource = new PrefabResource(objresource, eType, isAssetBundle);
            break;

        case eResourceType.Sound:
            resource = new SoundResource(objresource, isAssetBundle);
            break;
        }
        resource.InitLoad(name, assetpath);

        Dictionary <int, IResource> dicRes = GetDicResource(eType);

        if (dicRes.ContainsKey(resource.GetHashCode()))
        {
            //           LogManager.GetInstance().LogDebug("CreateResource name error" + name);
        }
        else
        {
            dicRes.Add(resource.GetHashCode(), resource);
        }

        return(resource);
    }
コード例 #3
0
ファイル: PuzzleItem.cs プロジェクト: llisper/PolyGame
 void ReleaseRes()
 {
     if (null != tex2d)
     {
         GameObject.Destroy(tex2d);
         tex2d = null;
     }
     if (null != snapshotPrefab)
     {
         snapshotPrefab.Release();
         snapshotPrefab = null;
     }
 }
コード例 #4
0
        private IResource CreateResource(eResourceType eType, string name, string assetpath, Object objresource, bool isAssetBundle)
        {
            IResource resource = null;

            switch (eType)
            {
            //case E_ResourceType.Actor:
            case eResourceType.UI:
            case eResourceType.Prefab:
                resource = new PrefabResource(objresource, eType, isAssetBundle);
                break;

            //                 case E_ResourceType.UnitySprite:
            //                     resource = new SpriteResource(objresource);
            //                     break;
            case eResourceType.Script:
                resource = new ScriptResource(objresource, isAssetBundle);
                break;

            case eResourceType.SpriteAsset:
                SpritePackerAsset spritePackerAsset = (SpritePackerAsset)objresource;
                resource = new SpriteAssetResource(spritePackerAsset.AllSprites, isAssetBundle);
                break;

            case eResourceType.Scriptable:
                resource = new ScriptableResource(objresource, isAssetBundle);
                break;

            case eResourceType.Texture:
                resource = new TextureResouce(objresource, isAssetBundle);
                break;

            case eResourceType.Sound:
                resource = new SoundResource(objresource, isAssetBundle);
                break;
            }
            resource.InitLoad(name, assetpath);

            Dictionary <int, IResource> dicRes = GetDicResource(eType);

            if (dicRes.ContainsKey(resource.GetHashCode()))
            {
                //           LogManager.GetInstance().LogDebug("CreateResource name error" + name);
            }
            else
            {
                dicRes.Add(resource.GetHashCode(), resource);
            }

            return(resource);
        }
コード例 #5
0
ファイル: PuzzleItem.cs プロジェクト: llisper/PolyGame
        public void Load()
        {
            if (showAllCtrl.selectedIndex == 1)
            {
                return;
            }

            string path = Paths.SnapshotSave(graphName);

            if (File.Exists(path))
            {
                byte[] bytes = File.ReadAllBytes(path);
                if (null == tex2d)
                {
                    tex2d = new Texture2D(2, 2);
                }
                tex2d.LoadImage(bytes);
                loader.texture = new NTexture(tex2d);
            }
            else
            {
                if (null == snapshotPrefab)
                {
                    snapshotPrefab = PrefabLoader.Load(string.Format(
                                                           "{0}/{1}/{1}_{2}",
                                                           Paths.Artworks,
                                                           graphName,
                                                           Paths.Snapshot));

                    if (null != snapshotPrefab)
                    {
                        snapshotPrefab.KeepReference();
                    }
                }

                if (null != snapshotPrefab)
                {
                    var prefabObject = (GameObject)snapshotPrefab.Object;
                    var holder       = prefabObject.GetComponent <PuzzleSnapshotHolder>();
                    if (null != holder && null != holder.texture)
                    {
                        loader.texture = new NTexture(holder.texture);
                    }
                    else
                    {
                        GameLog.LogError("PuzzleSnapshotHolder missing or texture missing: " + graphName);
                    }
                }
            }
        }
コード例 #6
0
ファイル: UICacheManager.cs プロジェクト: wuhuolong/MaxBooks
        public IEnumerator InitNewMarkerGameObject()
        {
            PrefabResource res = new PrefabResource();

            yield return(ResourceLoader.Instance.load_prefab(UINEWMARKER, res, true));

            GameObject obj = res.obj_;

            obj.name = obj.name.Replace("(Clone)", "");
            obj.SetActive(false);
            obj.transform.SetParent(root.transform, false);
            obj.transform.localPosition = new Vector3();
            obj.transform.localScale    = Vector3.one;
            obj.transform.localRotation = new Quaternion();
            mNewMarkerObj = obj;
        }
コード例 #7
0
ファイル: FactoryManager.cs プロジェクト: yabos/SaveTheQueen
        private GameObject LoadPrefab(ePath path, string prefabName)
        {
            if (string.IsNullOrEmpty(prefabName))
            {
                return(null);
            }

            PrefabResource resource = Global.ResourceMgr.CreatePrefabResource(prefabName, path);

            if (resource != null)
            {
                return(resource.ResourceGameObject);
            }

            return(null);
        }
コード例 #8
0
ファイル: UICacheManager.cs プロジェクト: wuhuolong/MaxBooks
        public IEnumerator InitPreviewBackgroundMat()
        {
            PrefabResource res = new PrefabResource();

            yield return(ResourceLoader.Instance.load_prefab(PreviewTextureBackground, res, true));

            GameObject obj = res.obj_;

            if (obj == null)
            {
                Debug.LogError(string.Format("the res {0} does not exist", PreviewTextureBackground));
                yield break;
            }
            obj.name = obj.name.Replace("(Clone)", "");
            obj.SetActive(false);
            obj.transform.SetParent(root.transform, false);

            m_previewTextureBackground = obj;
        }
コード例 #9
0
        protected T LoadWiget <T>(string path, bool dontDestroyOnLoad) where T : WidgetBase
        {
            PrefabResource resource = Global.ResourceMgr.CreateUIResource(path, ePath.UI, dontDestroyOnLoad);

            T widget = null;

            if (resource != null)
            {
                widget = ComponentFactory.GetComponent <T>(GameObject.Instantiate(resource.ResourceData) as GameObject,
                                                           IfNotExist.ReturnNull);
            }

            if (widget != null)
            {
                InitWidget(path, widget, null);

                AddWidget(path, widget, dontDestroyOnLoad);
            }

            return(widget);
        }
コード例 #10
0
    /// <summary>
    /// 加载节点的资源,有可能直接从缓存中加载
    /// </summary>
    /// <returns></returns>
    IEnumerator Load()
    {
        QuadTreeSceneManager.Instance.AddListener(this);
        isLoading = true;

        if (QuadTreeSceneManager.Instance.TryHitCache(this))
        {
            scenePart.gameObject.SetActive(true);
        }
        else
        {
            PrefabResource pr = new PrefabResource();
            yield return(StartCoroutine(ResourceLoader.Instance.load_prefab(scenePartPath, pr)));

            pr.obj_.transform.position = Vector3.zero;
            scenePart = pr.obj_.GetComponent <QuadtreeScenePart>();
            QuadTreeSceneManager.Instance.AddToCache(this);
        }

        QuadTreeSceneManager.Instance.RemoveListener(this);
        isLoading = false;
    }
コード例 #11
0
ファイル: UICacheManager.cs プロジェクト: wuhuolong/MaxBooks
        public IEnumerator InitRedPointGameObject()
        {
            PrefabResource res = new PrefabResource();

            yield return(ResourceLoader.Instance.load_prefab(UIREDPOINT, res, true));

            GameObject obj = res.obj_;

            obj.name = obj.name.Replace("(Clone)", "");
            obj.SetActive(false);
            obj.transform.SetParent(root.transform, false);
            obj.transform.localPosition = new Vector3();
            obj.transform.localScale    = Vector3.one;
            obj.transform.localRotation = new Quaternion();
            mRedPointObj = obj;
            RectTransform redPoint_rectTransform = mRedPointObj.GetComponent <RectTransform>();

            if (redPoint_rectTransform != null)
            {
                mRedPointObjSize = redPoint_rectTransform.sizeDelta;
            }
        }
コード例 #12
0
        //load a prefab from pool, it not found in pool, return null
        //notice: if you got object by this method, you should call RecyclePrefab() after using it.
        public IEnumerator LoadPrefab(string assetPath, ObjCachePoolType poolType, string poolKey, ObjectWrapper prefab)
        {
            if (poolKey == null)
            {
                poolKey = assetPath;
            }
            if (!mDicObjPools.ContainsKey(poolType))
            {
                Debug.LogError(string.Format("ObjCachePoolMgr::LoadPrefab pool type {0} is not defined!", poolType));
                yield break;
            }
            ObjectCachePool dstPool = mDicObjPools[poolType];

            //try load from pool
            GameObject obj = dstPool.try_hit_cache(poolKey) as GameObject;

            if (obj == null)
            {
                PrefabResource pr = new PrefabResource();
                yield return(StartCoroutine(ResourceLoader.Instance.load_prefab(string.Format("Assets/Res/{0}.prefab", assetPath), pr)));

                obj = pr.obj_;
                if (obj == null)
                {
                    yield break;
                }

                PoolGameObject pg = obj.AddComponent <PoolGameObject>();
                pg.poolType = poolType;
                pg.key      = poolKey;
            }
            else
            {
                obj.transform.SetParent(null, false);
                obj.SetActive(true);
            }
            obj.transform.position = new Vector3(0, -1000, 0);
            prefab.obj             = obj;
        }
コード例 #13
0
ファイル: FactoryManager.cs プロジェクト: yabos/SaveTheQueen
        private IEnumerator LoadActorAsysc(ePath path, string prefabName, System.Action <GameObject> action)
        {
            if (string.IsNullOrEmpty(prefabName))
            {
                if (action != null)
                {
                    action(null);
                }

                yield break;
            }

            PrefabResource prefabResource = null;

            yield return(Global.ResourceMgr.CreatePrefabResourceAsync(path, prefabName, resource =>
            {
                if (action != null)
                {
                    prefabResource = resource;
                    action(prefabResource != null ? resource.ResourceGameObject : null);
                }
            }));
        }
コード例 #14
0
ファイル: LocalPlayer.cs プロジェクト: wuhuolong/MaxBooks
    /// <summary>
    /// 加载指定路径下的特效资源
    /// </summary>
    /// <param name="effect_path"></param>
    /// <param name="effect_cache_path"></param>
    /// <param name="bind_node"></param>
    /// <returns></returns>
    IEnumerator LoadEffect(string effect_path, string effect_cache_path, string bind_node)
    {
        GameObject go = ObjCachePoolMgr.Instance.LoadFromCache(ObjCachePoolType.SFX, effect_cache_path) as GameObject;

        if (go == null)
        {
            PrefabResource ar_prefab = new PrefabResource();
            yield return(ResourceLoader.Instance.load_prefab(effect_path, ar_prefab));

            if (ar_prefab.obj_ == null)
            {
                yield break;
            }

            go = ar_prefab.obj_;

            //将加载的gameobject放入内存池中
            PoolGameObject pg = go.AddComponent <PoolGameObject>();
            pg.poolType = ObjCachePoolType.SFX;
            pg.key      = effect_cache_path;
            GameObject.DontDestroyOnLoad(go);
        }

        var succ = OnEffectResLoad(go, bind_node);

        if (!succ)
        {
            ObjCachePoolMgr.Instance.RecyclePrefab(go, ObjCachePoolType.SFX, effect_path);
        }
        else
        {
            // 等待2s之后将特效放回内存池中
            yield return(new WaitForSeconds(2.0f));

            ObjCachePoolMgr.Instance.RecyclePrefab(go, ObjCachePoolType.SFX, effect_path);
        }
    }
コード例 #15
0
        /// <summary>
        /// 设置Prefab协程函数
        /// </summary>
        /// <param name="targetObject"></param>
        /// <param name="prefabInfo"></param>
        /// <returns></returns>
        static private IEnumerator CoSetObjectPrefab(GameObject targetObject, Neptune.NodePrefabInfo prefabInfo, System.Action finishCallback)
        {
            PrefabResource prefabRes = new PrefabResource();
            string         path      = "Assets/" + prefabInfo.PrefabFile;

            yield return(MainGame.HeartBehavior.StartCoroutine(SGameEngine.ResourceLoader.Instance.load_prefab(path, prefabRes)));

            if (prefabRes == null || prefabRes.obj_ == null)
            {
                GameDebug.LogError("Set object prefab " + path + " error, can not load prefab!");
                yield break;
            }

            if (targetObject != null && prefabInfo != null)
            {
                Transform trans = prefabRes.obj_.transform;
                trans.parent        = targetObject.transform;
                trans.localPosition = prefabInfo.LocalPosition;
                trans.localScale    = prefabInfo.LocalScale;
                trans.localRotation = prefabInfo.LocalRotation;

                CollectionObjectBehaviour collectionObjectBehaviour = targetObject.GetComponent <CollectionObjectBehaviour>();
                if (collectionObjectBehaviour != null)
                {
                    collectionObjectBehaviour.OnResLoaded();
                }

                if (finishCallback != null)
                {
                    finishCallback();
                }
            }
            else
            {
                GameDebug.LogError("Set object prefab " + path + " error, target object is null!");
            }
        }
コード例 #16
0
ファイル: XComponent.cs プロジェクト: wuhuolong/MaxBooks
        IEnumerator LoadReflectionPlane(string path, int inst_id, Vector3 pos)
        {
            PrefabResource pr = new PrefabResource();

            yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_prefab(path, pr)));

            GameObject obj = pr.obj_;

            if (obj != null)
            {
                SetCurrentObject(inst_id, obj);
            }

            m_IsLoadingRes = false;

            if (m_IsShow)
            {
                if (obj != null)
                {
                    obj.SetActive(true);
                    obj.transform.position = pos;
                }
            }
        }
コード例 #17
0
ファイル: UICacheManager.cs プロジェクト: wuhuolong/MaxBooks
        public IEnumerator InitCachedItems()
        {
            PrefabResource res = new PrefabResource();

            yield return(ResourceLoader.Instance.load_prefab(UIGOODSITEM, res, true));

            GameObject obj = res.obj_;

            obj.name = obj.name.Replace("(Clone)", "");

            UIItemNewSlot.Bind(obj);

            obj.SetActive(false);
            cachedItems = new TemplateCache();
            cachedItems.Init(obj, "UINewGoodsItem", 0, this.root, 50);

            obj.transform.SetParent(cachedItems.root.transform, false);

            obj.transform.localPosition = new Vector3();
            obj.transform.localScale    = Vector3.one;
            obj.transform.localRotation = new Quaternion();

            cachedItems.AddGameObjects(30);
        }
コード例 #18
0
        /// <summary>Initializes a new instance of the UnityAvatar class</summary>
        /// <param name="id">Avatar identifier</param>
        /// <param name="resource">Unity prefab resource</param>
        /// <param name="states">List of available states</param>
        /// <param name="defaultState">Default state</param>
        public UnityAvatar(string id, PrefabResource resource, AvatarState[] states, string defaultState)
            : base(id, resource, states)
        {
            this.GameObject = (GameObject)UnityEngine.Object.Instantiate(this.Prefab.NativeResource);
            if (UnityAvatar.Parent != null)
            {
                this.GameObject.transform.parent = UnityAvatar.Parent;
            }
            else
            {
                Log.Warning("UnityAvatar.Parent has not been set. All avatars will be created in the root of the scene.");
            }

            this.animator     = this.GameObject.GetComponent <Animator>(true);
            this.CurrentState = this.States[defaultState];

            if ((this.Collider = this.GameObject.GetComponent <Collider>(true)) != null)
            {
                this.Collider.isTrigger = true;
            }
            else
            {
                Log.Error("Avatar prefab '{0}' missing required Collider component!", resource.Id);
            }

            if ((this.rigidbody = this.GameObject.GetComponent <Rigidbody>(true)) != null ||
                (this.rigidbody = this.GameObject.AddComponent <Rigidbody>()) != null)
            {
                this.rigidbody.useGravity  = false;
                this.rigidbody.isKinematic = true;
            }
            else
            {
                Log.Error("Avatar prefab '{0}' missing required Rigidbody component!", resource.Id);
            }
        }
コード例 #19
0
ファイル: MainGame.cs プロジェクト: wuhuolong/MaxBooks
        public static IEnumerator EnterGame()
        {
            // 预加载资源
            ControlServerLogHelper.Instance.PostPlayerFollowRecord(PlayerFollowRecordSceneId.PreloadResStart, "", false);

#if UNITY_EDITOR
            MikuLuaProfiler.HookLuaSetup.OnStartGame();
#endif

            // 创建Core物体
            mCoreObject = new GameObject("Core");
            GameObject.DontDestroyOnLoad(mCoreObject);

            // 实例化Game
            Game mGame = Game.GetInstance();
            mHeartBehavior = mCoreObject.AddComponent <Heart>();
            AssemblyBridge.Instance.TimelinePlayableEmployee = new TimelinePlayableEmployee();

            ClientEventMgr.GetInstance();

            // 增加各种Component
            var resource_loader = mCoreObject.AddComponent <ResourceLoader>();
            resource_loader.BundleVersion    = NewInitSceneLoader.Instance.BundleVersion;
            resource_loader.ServerBundleInfo = NewInitSceneLoader.Instance.g_server_bundle_info;

            mCoreObject.AddComponent <ResourceUtilEx> ();
            ResourceLoader.Instance.init();
            mCoreObject.AddComponent <ObjCachePoolMgr>();

            // 因为部分表格资源放在bundle资源中,因此要尽早进行加载
            yield return(GlobalMono.StartCoroutine(DBTableManager.Instance.Preload()));

            mCoreObject.AddComponent <ActorManager>();
            HttpRequest.Instance = mCoreObject.AddComponent <HttpRequest>();
            mCoreObject.AddComponent <QuadTreeSceneManager>();
            mCoreObject.AddComponent <PushManager>();
            xc.RedPointDataMgr.GetInstance();   //小红点实例化
            xc.LockIconDataMgr.GetInstance();
            xc.NewMarkerDataMgr.GetInstance();  //New标记
#if !DISABLE_LUA
            //mCoreObject.AddComponent<LuaClient>().Init();
            LuaClient luaClient = mCoreObject.AddComponent <LuaClient>();
            yield return(GlobalMono.StartCoroutine(luaClient.InitRoutine()));
#endif

#if (TEST_HOST && !PERFORMANCE_TEST) || HD_RESOURCE
            //mCoreObject.AddComponent<DebugFPS>();// 因为gc的问题暂时屏蔽
            mDebugUI = mCoreObject.AddComponent <DebugUI>();
            mDebugUI.UnsubscribeAllProcessCmd();
            mDebugUI.SubscribeProcessCmd(DebugCommand.OnProcessCmd);
            //测试环境打开DebugWindow,取消仅在编辑器打开的判断
            //#if UNITY_EDITOR
            var window = GameObject.Instantiate(Resources.Load <GameObject>("Debug/DebugWindow"));

            GameObject.DontDestroyOnLoad(window);
            debugWindow = window.AddComponent <DebugWindow>();
            //#endif
#endif

            CullManager.Instance.Factor = 1.0f;

            QualitySetting.DeviceAdaptation();

            AssetResource ar = new AssetResource();
            // 加载混音设置
            yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_asset("Assets/Res/Sound/AudioMixer.mixer", typeof(UnityEngine.Object), ar)));

            AudioManager.Instance.InitMixer(ar.asset_ as AudioMixer);
            AudioSource audio = mCoreObject.AddComponent <AudioSource>();
            audio.playOnAwake           = true;
            audio.loop                  = true;
            audio.outputAudioMixerGroup = AudioManager.Instance.GetAudioMixerGroup("Music");


            BackGroundAudio backAudio = mCoreObject.AddComponent <BackGroundAudio>();
            backAudio.Init();

            if (Const.Language != LanguageType.SIMPLE_CHINESE)
            {
                string localizeData = LocalizeManager.Instance.GetLocalizationDataPath(Const.Language);
                yield return(GetGlobalMono().StartCoroutine(GameLocalizeHelper.CoLoadLocalizeFile(localizeData)));
            }

            // 加载Font
            ar = new AssetResource();
            yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_asset("Assets/Res/UI/Textures/Emoji/Output/emoji.txt", typeof(UnityEngine.Object), ar)));

            mEmojiTxt = ar.asset_;
            if (mEmojiTxt == null)
            {
                Debug.LogError("emmoji.txt load failed.");
            }
            ar = new AssetResource();
            yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_asset(EmojiText.GetEmojiTextName(EmojiText.EmojiMaterialType.EquipTips), typeof(UnityEngine.Object), ar)));

            mEmojiTxt_equipTips = ar.asset_;
            if (mEmojiTxt_equipTips == null)
            {
                Debug.LogError("emoji_equipTips.txt load failed.");
            }

            // 加载UIMain,程序中只加载一次
            PrefabResource pr = new PrefabResource();
            yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_prefab("Assets/Res/UI/Widget/Preset/UIRoot.prefab", pr, false)));

            pr.obj_.transform.position = new Vector3(0, 1000.0f, 0);
            GameObject.DontDestroyOnLoad(pr.obj_);
            mGame.Init();

            // 加载Start场景
            if (Game.Instance.IsSkillEditorScene)
            {
                var scene_asset_path = string.Format("Assets/Res/Map/scenes/{0}.unity", GlobalConst.DefaultTestScene);
                yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_scene(scene_asset_path, GlobalConst.DefaultTestScene, null)));
            }

            // destroy initscenloader
            GameObject.DestroyImmediate(NewInitSceneLoader.Instance.gameObject, true);

            // 初始化Game的状态机
            mGame.InitFSM();
            mGame.mIsInited = true;

            Application.targetFrameRate = Const.G_FPS;

            var fps_respond = mCoreObject.AddComponent <FPSRespond>();
            fps_respond.FPSUpdateWaitTime = 15.0f;

            var fps_notice = mCoreObject.AddComponent <FPSNotice>();

            // 预加载资源
            ControlServerLogHelper.Instance.PostPlayerFollowRecord(PlayerFollowRecordSceneId.PreloadResEnd);
            ControlServerLogHelper.Instance.PostCloudLadderEventAction(CloudLadderMarkEnum.load_res);

            // 向后台请求渠道信息列表和服务器列表
#if !UNITY_IPHONE
            ControlServerLogHelper.Instance.GetChannelList();
#endif
            ControlServerLogHelper.Instance.GetServerList();
        }
コード例 #20
0
ファイル: UIMainCtrl.cs プロジェクト: wuhuolong/MaxBooks
        /// <summary>
        /// 加载UI资源
        /// </summary>
        /// <param name="wndName"></param>
        /// <param name="baseWin"></param>
        /// <returns></returns>
        public IEnumerator CreateWindowFromPrefab(string wndName, UIBaseWindow baseWin)
        {
            float start_time = Time.unscaledTime;

            if (delay > 0)
            {
                yield return(new WaitForSeconds(delay));
            }

            bool _reserve_asset = (wndName == UIManager.MainPanelName); // 是否保存ui界面的assetbundle资源

            // 根据窗口类型设置不同的挂点
            UIType    type         = UIHelper.GetUITypeByWindowName(wndName);
            Transform parent_trans = null;

            switch (type)
            {
            case UIType.Hud:
            {
                parent_trans = mHudRoot;
                break;
            }

            case UIType.Pop:
            {
                parent_trans = mPopRoot;
                break;
            }

            case UIType.Normal:
            {
                parent_trans = mNormalRoot;
                break;
            }

            default:
            {
                //只有loading
                parent_trans = mLoadingRoot;
                break;
            }
            }

            // 加载ui界面
            PrefabResource pr         = new PrefabResource();
            var            res_prefix = UIResPrefix;

            //             if (Const.Language == LanguageType.KOREAN)
            //             {
            //                 res_prefix = UIKoreanResPrefix;
            //             }
#if UNITY_IPHONE
            if (string.IsNullOrEmpty(baseWin.mPrefabName) == false && SDKHelper.GetSDKWinList().Contains(baseWin.mPrefabName))
            {
                res_prefix = UICopyBagResPrefix;
            }
#endif
            if (baseWin.mPrefabName != null)
            {
                yield return(StartCoroutine(ResourceLoader.Instance.load_prefab(string.Format("{0}{1}.prefab", res_prefix, baseWin.mPrefabName), pr, false, _reserve_asset, parent_trans)));
            }
            else
            {
                yield return(StartCoroutine(ResourceLoader.Instance.load_prefab(string.Format("{0}{1}.prefab", res_prefix, wndName), pr, false, _reserve_asset, parent_trans)));
            }

            GameObject obj = pr.obj_;
            if (obj == null)
            {
                yield break;
            }

            //设置Canvas组件的参数
            Canvas canvas = obj.GetComponent <Canvas>();
            if (canvas == null)
            {
                Debug.LogError("ui not have canvas " + wndName);
                canvas = obj.AddComponent <Canvas>();
            }

            //canvas.pixelPerfect = true;
            canvas.renderMode  = RenderMode.ScreenSpaceCamera;
            canvas.worldCamera = mCam;
            //canvas.additionalShaderChannels = AdditionalCanvasShaderChannels.None;// AdditionalCanvasShaderChannels.TexCoord1;// | AdditionalCanvasShaderChannels.Tangent;
            canvas.sortingLayerName = "Default";

            // 检查GraphicRaycaster组件
            var ray_caster = obj.GetComponent <GraphicRaycaster>();
            if (ray_caster == null)
            {
                Debug.LogError("ui not have canvas raycaster " + wndName);
                obj.AddComponent <GraphicRaycaster>();
            }

            // 设置CanvasScaler组件的参数
            var canvas_scaler = obj.GetComponent <CanvasScaler>();
            if (canvas_scaler == null)
            {
                Debug.LogError("ui not have canvas scalar " + wndName);
                canvas_scaler = obj.AddComponent <CanvasScaler>();
            }

            canvas_scaler.uiScaleMode            = CanvasScaler.ScaleMode.ScaleWithScreenSize;
            canvas_scaler.referencePixelsPerUnit = 100;
            float currency_scale = 1;
            currency_scale = canvas_scaler.referenceResolution.x / 1920;
            if (canvas_scaler.referenceResolution.x != 1920 && canvas_scaler.referenceResolution.x != 1334)
            {
                canvas_scaler.referenceResolution = new Vector2(1280, 720);
            }
            if (Screen.width / (float)Screen.height > 1.778f)
            {
                canvas_scaler.matchWidthOrHeight = 1;
            }
            else
            {
                canvas_scaler.matchWidthOrHeight = 0;
            }
            baseWin.CurrencyScale = currency_scale;

            // 设置界面的外部参数
            string param1_str = "";
            if (baseWin.ShowParam != null && baseWin.ShowParam.Length > 0 && baseWin.ShowParam[0] != null)
            {
                param1_str = baseWin.ShowParam[0].ToString();
            }
            baseWin.Param1_str = param1_str;

            obj.transform.localPosition = Vector3.zero;
            obj.transform.localScale    = Vector3.one;
            if (!obj.activeSelf)
            {
                obj.SetActive(true);
            }
            obj.name          = obj.name.Replace("(Clone)", "");
            baseWin.mUIObject = obj;
            //从ui加载出来的原始prefab有标志Atlas资源是否可以被回收的作用,不能删除,详见host_res_to_gameobj的代码
            //GameObject.Destroy(obj);

            float cost_time = Time.unscaledTime - start_time;

            // 创建界面的货币栏
            if (mCurrencyRes == null)
            {
                mCurrencyRes = new PrefabResource();
                yield return(StartCoroutine(ResourceLoader.Instance.load_prefab("Assets/Res/UI/Widget/Preset/UICurrencyWindow.prefab", mCurrencyRes, true)));

                if (mCurrencyRes.obj_ == null)
                {
                    yield break;
                }

                mCurrencyRes.obj_.SetActive(false);
            }
            CreateAndCheckMoneyBar(baseWin, obj, wndName, currency_scale, true);

            if (Const.Region == RegionType.KOREA)
            {
                //创建概率展示按钮
                if (mProbabilityRes == null)
                {
                    mProbabilityRes = new PrefabResource();
                    yield return(StartCoroutine(ResourceLoader.Instance.load_prefab(
                                                    "Assets/Res/UI/Widget/Preset/UIProbabilityPublish.prefab", mProbabilityRes, true)));

                    if (mProbabilityRes.obj_ == null)
                    {
                        yield break;
                    }
                    mProbabilityRes.obj_.SetActive(false);
                }
                CreateAndCheckProbabilityBtn(baseWin, obj, wndName, currency_scale, true);

                //创建七日退款按钮
                if (mRefundRes == null)
                {
                    mRefundRes = new PrefabResource();
                    yield return(StartCoroutine(ResourceLoader.Instance.load_prefab(
                                                    "Assets/Res/UI/Widget/Preset/UIPolicyStatement.prefab", mRefundRes, true)));

                    if (mRefundRes.obj_ == null)
                    {
                        yield break;
                    }
                    mRefundRes.obj_.SetActive(false);
                }
                CreateAndCheckRefundBtn(baseWin, obj, wndName, currency_scale, true);
            }

            //Debug.LogError("load window " + wndName + " cost: " + cost_time);
            xc.ClientEventManager <ClientEventType.ugui.UICoreEvent> .Instance.FireEvent(ClientEventType.ugui.UICoreEvent.UILOADDONE, new xc.ClientEventBaseArgs(baseWin));
        }
コード例 #21
0
ファイル: AudioManager.cs プロジェクト: wuhuolong/MaxBooks
        /// <summary>
        /// 加载音效资源
        /// </summary>
        /// <returns></returns>
        IEnumerator LoadAudio_dynamic(DynamicAudioItem item)
        {
            if (item == null)
            {
                yield break;
            }
            if (item.is_destroy)
            {
                yield break;
            }

            GameObject go = ObjCachePoolMgr.Instance.LoadFromCache(ObjCachePoolType.SMALL_PREFAB, UISoundTemplate) as GameObject;

            if (go == null)
            {
                PrefabResource ar_prefab = new PrefabResource();

                yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_prefab(UISoundTemplate, ar_prefab)));

                if (ar_prefab.obj_ == null)
                {
                    StopAudio_dynamic(item.unique_id);
                    yield break;
                }

                GameObject obj = ar_prefab.obj_;
                if (item.is_destroy)
                {
                    GameObject.DestroyImmediate(obj);
                    yield break;
                }

                PoolGameObject pg = obj.AddComponent <PoolGameObject>();
                if (pg != null)
                {
                    pg.poolType = ObjCachePoolType.SMALL_PREFAB;
                    pg.key      = UISoundTemplate;
                }
                go = obj;
            }

            item.audioSource = go.GetComponent <AudioSource>();
            if (item.audioSource == null)
            {
                item.audioSource = go.AddComponent <AudioSource>();
            }
            go.SetActive(true);
            Camera cam = Camera.main;

            if (cam == null)
            {
                cam = GameObject.FindObjectOfType(typeof(Camera)) as Camera;
            }
            if (cam != null)
            {
                item.audioSource.transform.SetParent(cam.transform);
                item.audioSource.transform.localScale       = Vector3.one;
                item.audioSource.transform.localPosition    = Vector3.zero;
                item.audioSource.transform.localEulerAngles = Vector3.zero;
            }

            AssetResource ar = new AssetResource();

            yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_asset(item.res_path, typeof(Object), ar)));

            if (ar.asset_ == null)
            {
                GameDebug.LogError(string.Format("the res {0} does not exist", item.res_path));
                StopAudio_dynamic(item.unique_id);
                yield break;
            }
            if (item.is_destroy)
            {
                ar.destroy();
                yield break;
            }
            AudioClip audio_clip = ar.asset_ as AudioClip;

            if (audio_clip == null)
            {
                GameDebug.LogError(string.Format("the res {0} is not audio clip", item.res_path));
                ar.destroy();
                yield break;
            }

            item.clip             = audio_clip;
            item.audioSource.clip = item.clip;
            item.audioSource.loop = item.is_loop;
            float volume = GlobalSettings.GetInstance().SFXVolume;

            item.audioSource.volume = volume * item.volume;
            item.audioSource.mute   = GlobalSettings.GetInstance().SFXMute;
            item.audioSource.Play();
            UnityAction cbFunc = () =>
            {
                if (item != null)
                {
                    StopAudio_dynamic(item.unique_id);
                }
            };

            if (item.is_loop == false)
            {
                xc.MainGame.GetGlobalMono().StartCoroutine(DelayedCallback(item.clip.length, cbFunc));
            }
        }