// 停止发泡3秒,然后开始切换场景. void StartChangeMap() { if (curMoveWaveState != MoveWaveState.none) { return; } // 记录上一次发泡和锁定的状态. CanonCtrl.Instance.StopFireAndRecordLastLockState(); lerpPercent = 0f; curMoveWaveState = MoveWaveState.stopFire; // 在第一阶段就禁止玩家发泡(3秒的禁炮才能实现) changingWave = true; }
// 开始切换场景. void ChangeMap() { // 下一次和上一次图片的id. curTexIndex += 1; if (curTexIndex >= TexAndGrass.Count) { curTexIndex = 0; } if (curTexIndex <= 0) { lastTexIndex = TexAndGrass.Count - 1; } else { lastTexIndex = curTexIndex - 1; } lerpPercent = 0f; curMoveWaveState = MoveWaveState.moveInViewport; // 播放海浪声音. waveAudio.Play(); // 随机播放一个tip. Transform _tip = tips[UnityEngine.Random.Range(0, tips.Count)]; if (_tip != null) { Quaternion _rot; // 如果符合旋转条件,就对tip进行旋转生成. if (CanonCtrl.Instance.turn_screen == true && CanonCtrl.Instance.turn_screen_on_of) { _rot = new Quaternion(0.0f, 0.0f, 1.0f, 0.0f); } else { _rot = new Quaternion(); } Transform _temp = Factory.Create(_tip, uiCam.ViewportToWorldPoint(tipShowUpViewport), _rot); _temp.parent = tipCache.transform; _temp.localScale = Vector3.one; } // 两张背景图打开. ShowTheUsingBGTex(true, true); // 通过两张背景图片层级关系决定这次切换背景使用哪一个作为背景. if (upObj.GetComponent <UIPanel>().depth > downObj.GetComponent <UIPanel>().depth) { upObjInUp = true; downObj.GetComponent <UIPanel>().depth = -5; downPanel.clipOffset = new Vector2(0f, 0f); upObj.GetComponent <UIPanel>().depth = 20; upPanel.clipOffset = new Vector2(-1500f, 0f); upBgTex.mainTexture = TexAndGrass[curTexIndex].tex; } else { upObjInUp = false; downObj.GetComponent <UIPanel>().depth = 20; downPanel.clipOffset = new Vector2(-1500f, 0f); upObj.GetComponent <UIPanel>().depth = -5; upPanel.clipOffset = new Vector2(0f, 0f); downBgTex.mainTexture = TexAndGrass[curTexIndex].tex; } }
void Update() { // AjustCam(); UpdateGrass(); switch (curMoveWaveState) { // 停止发泡等待3秒. case MoveWaveState.stopFire: lerpPercent += Time.deltaTime; if (lerpPercent > 3f) { lerpPercent = 0f; ChangeMap(); curMoveWaveState = MoveWaveState.moveInViewport; } break; // 波浪从 wavePos[0] 移动到 wavePos[1]. case MoveWaveState.moveInViewport: // 1f/0.1f. lerpPercent += Time.deltaTime * moveSpeed * 10f; if (CanonCtrl.Instance.turn_screen == true && CanonCtrl.Instance.turn_screen_on_of) { waveTrans.position = Vector3.Lerp(wavePos[4], wavePos[5], lerpPercent); } else { waveTrans.position = Vector3.Lerp(wavePos[0], wavePos[1], lerpPercent); } if (lerpPercent >= 1f) { lerpPercent = 0f; curMoveWaveState = MoveWaveState.moveWithMask; } break; // 波浪从 wavePos[1] 移动到 wavePos[2]. 与此同时两个背景图片开始做遮罩. case MoveWaveState.moveWithMask: lerpPercent += Time.deltaTime * moveSpeed; // mask. if (upObjInUp) { float _offset = Mathf.Lerp(upOffset.x, upOffset.y, lerpPercent); Vector2 temp = upPanel.clipOffset; temp.x = _offset; upPanel.clipOffset = temp; float _offset2 = Mathf.Lerp(downOffset.x, downOffset.y, lerpPercent); Vector2 temp2 = downPanel.clipOffset; temp2.x = _offset2; downPanel.clipOffset = temp2; } else { float _offset = Mathf.Lerp(upOffset.x, upOffset.y, lerpPercent); Vector2 temp = downPanel.clipOffset; temp.x = _offset; downPanel.clipOffset = temp; float _offset2 = Mathf.Lerp(downOffset.x, downOffset.y, lerpPercent); Vector2 temp2 = upPanel.clipOffset; temp2.x = _offset2; upPanel.clipOffset = temp2; } // wave. if (CanonCtrl.Instance.turn_screen == true && CanonCtrl.Instance.turn_screen_on_of) { waveTrans.position = Vector3.Lerp(wavePos[5], wavePos[6], lerpPercent); } else { waveTrans.position = Vector3.Lerp(wavePos[1], wavePos[2], lerpPercent); } if (lerpPercent >= 1f) { curMoveWaveState = MoveWaveState.moveOutViewport; lerpPercent = 0f; // record last map fish. FishCtrl.Instance.RecordLastMapFish(); ClearLastMapFish(); waveAudio.Stop(); } break; // 波浪从 wavePos[2] 移动到 wavePos[3]. case MoveWaveState.moveOutViewport: // 1f/0.3f; lerpPercent += Time.deltaTime * moveSpeed * 3.33f; if (CanonCtrl.Instance.turn_screen == true && CanonCtrl.Instance.turn_screen_on_of) { waveTrans.position = Vector3.Lerp(wavePos[6], wavePos[7], lerpPercent); } else { waveTrans.position = Vector3.Lerp(wavePos[2], wavePos[3], lerpPercent); } if (lerpPercent >= 1f) { curMoveWaveState = MoveWaveState.none; ResetSortingLayer(); // 移动完了只显示当前使用的背景图. if (upObjInUp) { ShowTheUsingBGTex(true, false); } else { ShowTheUsingBGTex(false, true); } // 播放下一首背景歌曲. AudioCtrl.Instance.NextBG(); // 关闭海浪. waveTrans.gameObject.SetActive(false); // 恢复发泡和锁定状态. CanonCtrl.Instance.ResumeFireAndResumeLockState(); } break; } }