예제 #1
0
        void Start()
        {
            transform.Find("Text").GetComponent <Text>().text = Text + "\n\n";
            EZR.MemorySound.PlaySound("e_error");

            var option = UserSaveData.GetOption();

            // 找毛玻璃
            var frostedGlass = transform.Find("FrostedGlass").gameObject;

            frostedGlass.SetActive(option.FrostedGlassEffect);
        }
예제 #2
0
        void Start()
        {
            // 读取设置
            var option = UserSaveData.GetOption();

            PlayManager.PanelPosition  = option.PanelPosition;
            PlayManager.TargetLineType = option.TargetLineType;
            PlayManager.JudgmentOffset = option.JudgmentOffset;

            // 初始化面板
            var panel = Instantiate(Resources.Load <GameObject>("Skin/Panel/" + PanelResource));

            panel.transform.SetParent(GameObject.Find("Canvas").transform, false);
            // 面板位置
            panel.transform.localPosition = new Vector3(
                (int)PlayManager.PanelPosition,
                panel.transform.localPosition.y,
                0
                );

            // 初始化音符
            var noteType = Resources.Load <NoteType>("Skin/Note/" + NoteResource);

            notes        = noteType.Notes;
            NoteUseScale = noteType.UseScale;
            NoteSize     = noteType.NoteSize[PlayManager.NumLines - 4];
            var target = Instantiate(noteType.Target[PlayManager.NumLines - 4]);

            target.transform.SetParent(panel.transform.Find("Target"), false);
            noteTargetAnim = target.GetComponent <Animation>();

            // 判定线偏移
            target.transform.parent.localPosition = new Vector3(
                target.transform.parent.localPosition.x,
                target.transform.parent.localPosition.y + (int)PlayManager.TargetLineType,
                0);

            // 节奏线
            measureLine = panel.GetComponent <Panel>().MeasureLine;

            // 初始化对象池
            for (int i = 0; i < PlayManager.NumLines; i++)
            {
                switch (notes[PlayManager.NumLines - 4].NotePrefab[i].GetComponent <NoteInLine>().Type)
                {
                case NoteInLine.NoteType.A:
                    if (notePoolA == null)
                    {
                        notePoolA = new ObjectPool();
                        for (int j = 0; j < 20; j++)
                        {
                            var note = Instantiate(notes[PlayManager.NumLines - 4].NotePrefab[i]);
                            note.GetComponent <NoteInLine>().Recycle(notePoolA);
                        }
                    }
                    break;

                case NoteInLine.NoteType.B:
                    if (notePoolB == null)
                    {
                        notePoolB = new ObjectPool();
                        for (int j = 0; j < 15; j++)
                        {
                            var note = Instantiate(notes[PlayManager.NumLines - 4].NotePrefab[i]);
                            note.GetComponent <NoteInLine>().Recycle(notePoolB);
                        }
                    }
                    break;

                case NoteInLine.NoteType.C:
                    if (notePoolC == null)
                    {
                        notePoolC = new ObjectPool();
                        for (int j = 0; j < 10; j++)
                        {
                            var note = Instantiate(notes[PlayManager.NumLines - 4].NotePrefab[i]);
                            note.GetComponent <NoteInLine>().Recycle(notePoolC);
                        }
                    }
                    break;

                default: continue;
                }
            }
            if (measureLinePool == null)
            {
                measureLinePool = new ObjectPool();
                for (int i = 0; i < 2; i++)
                {
                    var line = Instantiate(measureLine);
                    line.GetComponent <MeasureLine>().Recycle(measureLinePool);
                }
            }

            // 找节奏灯
            grooveLightAnim = panel.transform.Find("Groove").GetComponent <Animation>();
            // 找HP
            HP       = (RectTransform)panel.transform.Find("HP");
            HPHeight = HP.sizeDelta.y;

            // 找按键动画
            linesUpdate = new bool[PlayManager.NumLines];
            linesAnim   = new Animation[PlayManager.NumLines];
            for (int i = 0; i < PlayManager.NumLines; i++)
            {
                linesAnim[i] = panel.transform.Find("Lines/" + PlayManager.NumLines + "/Line" + (i + 1)).GetComponent <Animation>();
            }

            // 选择正确的按键ui
            for (int i = 4; i <= PlayManager.MaxLines; i++)
            {
                var lines = panel.transform.Find("Lines/" + i).gameObject;
                if (i == PlayManager.NumLines)
                {
                    lines.SetActive(true);
                }
                else
                {
                    lines.SetActive(false);
                }
            }

            // 找音符节点
            noteArea = (RectTransform)panel.transform.Find("NoteArea");

            // 初始化按键火花特效
            flarePlayList     = new FlareAnimCTL[PlayManager.NumLines];
            longflarePlayList = new FlareAnimCTL[PlayManager.NumLines];
            for (int i = 0; i < PlayManager.NumLines; i++)
            {
                var flare     = Instantiate(noteType.Flare);
                var longFlare = Instantiate(panel.GetComponent <Panel>().LongFlare);
                flarePlayList[i]     = flare.GetComponent <FlareAnimCTL>();
                longflarePlayList[i] = longFlare.GetComponent <FlareAnimCTL>();
                flare.transform.SetParent(panel.transform, false);
                longFlare.transform.SetParent(panel.transform, false);
                var panelTarget = panel.transform.Find("Target");
                flare.transform.position     = new Vector3(linesAnim[i].transform.position.x, panelTarget.GetChild(0).position.y, 0);
                longFlare.transform.position = new Vector3(linesAnim[i].transform.position.x, panelTarget.GetChild(0).position.y, 0);
            }

            // 初始化判定字动画
            judgmentAnim = panel.transform.Find("Judgment").GetComponent <JudgmentAnimCTL>();
            judgmentAnim.transform.Find("FastSlow").gameObject.SetActive(option.ShowFastSlow);

            // 找连击计数器
            comboCounter = panel.transform.Find("Combo/ComboCounter").GetComponent <ComboCounter>();
            scoreText    = panel.GetComponent <Panel>().ScoreText;
            maxComboText = panel.GetComponent <Panel>().MaxComboText;

            // 生成Lines
            currentIndex = new int[PlayManager.NumLines];
            noteInLines  = new Queue <NoteInLine> [PlayManager.NumLines];
            for (int i = 0; i < PlayManager.NumLines; i++)
            {
                noteInLines[i] = new Queue <NoteInLine>();
            }

            viveMediaDecoder = GameObject.Find("Canvas").transform.Find("BGA").GetComponent <HTC.UnityPlugin.Multimedia.ViveMediaDecoder>();
            videoPlayer      = GameObject.Find("Canvas").transform.Find("BGA").GetComponent <VideoPlayer>();

            string bgaUrl;

            if (PlayManager.GameType == GameType.EZ2ON || PlayManager.GameType == GameType.EZ2DJ)
            {
                bgaUrl = Path.Combine(
                    Master.GameResourcesFolder,
                    "EZ2Series", "Ingame",
                    SongList.List[SongList.CurrentIndex].bgaName + ".mp4"
                    );
            }
            else
            {
                bgaUrl = Path.Combine(
                    Master.GameResourcesFolder,
                    PlayManager.GameType.ToString(),
                    "Ingame",
                    SongList.List[SongList.CurrentIndex].bgaName + ".mp4"
                    );
            }
            string genericBgaUrl = Path.Combine(Master.GameResourcesFolder, "GenericBGA.mp4");

            if (File.Exists(bgaUrl))
            {
                // 初始化BGA
                if (Master.IsOldWin)
                {
                    Destroy(videoPlayer);
                    viveMediaDecoder.initDecoder(bgaUrl);
                }
                else
                {
                    videoPlayer.GetComponent <RawImage>().material = null;
                    Destroy(viveMediaDecoder);
                    videoPlayer.url = bgaUrl;
                    videoPlayer.Prepare();
                }
            }
            else if (File.Exists(genericBgaUrl))
            {
                // fallback通用bga
                if (Master.IsOldWin)
                {
                    Destroy(videoPlayer);
                    viveMediaDecoder.initDecoder(genericBgaUrl);
                    viveMediaDecoder.onVideoEnd.AddListener(() =>
                    {
                        viveMediaDecoder.replay();
                    });
                }
                else
                {
                    videoPlayer.GetComponent <RawImage>().material = null;
                    Destroy(viveMediaDecoder);
                    videoPlayer.url = genericBgaUrl;
                    videoPlayer.Prepare();
                    videoPlayer.isLooping = true;
                }
            }
            else
            {
                Destroy(videoPlayer);
                Destroy(viveMediaDecoder);
            }

            // 找毛玻璃
            var frostedGlass = panel.transform.Find("FrostedGlass").gameObject;

            frostedGlass.SetActive(option.FrostedGlassEffect);

            // 找 auto play 对象
            autoObj = panel.transform.Find("Auto").gameObject;
        }