/// <summary> /// ステージクリア時の処理です。 /// </summary> public void OnStageComplete() { // すでにゲームをクリアしているかゲームオーバーならば何もしません。 if ((int)this.phase > (int)StagePlayPhase.Playing) { return; } // フェーズをプレイ中からステージクリア時に変更します。 this.phase = StagePlayPhase.StageComplete; // ボールを停止させます。 coBall.ChangePauseFlag(true); // バーを停止させます。 coBar.ChangePauseFlag(true); // 効果音を再生 Util.PlayAudioClip(this.seStageComplete, Camera.main.transform.position, 1.0f); // 現在のステージの状態を「クリア済み」にします。 string keyStageStatus = StageButton.prefixKeyStageStatus + UnityEngine.SceneManagement.SceneManager.GetActiveScene().name; PlayerPrefs.SetInt(keyStageStatus, (int)StageButton.StageStatus.Cleared); // 次のステージが設定されている場合 if (string.IsNullOrEmpty(this.nameNextStage) == false) { // 次のステージのステータスが「選択不可」ならば「選択可能」にします。 string keyNextStageStatus = StageButton.prefixKeyStageStatus + this.nameNextStage; if (PlayerPrefs.GetInt(keyNextStageStatus) == (int)StageButton.StageStatus.Locked) { PlayerPrefs.SetInt(keyNextStageStatus, (int)StageButton.StageStatus.Unlocked); } } else { // 次のステージがない場合は、[Next Stage]の UI は無効、非表示にします。 this.goNextStage.SetActive(false); } // ステージクリア時のパネルを有効にします。 panelOnStageComplete.SetActive(true); }
/// <summary> /// ゲームオーバー時の処理です。 /// </summary> public void OnGameover() { // すでにゲームをクリアしているかゲームオーバーならば何もしません。 if ((int)this.phase > (int)StagePlayPhase.Playing) { return; } // フェーズをプレイ中からゲームオーバー時に変更します。 this.phase = StagePlayPhase.Gameover; // ボールを停止させます。 coBall.ChangePauseFlag(true); // バーを停止させます。 coBar.ChangePauseFlag(true); // 効果音を再生 Util.PlayAudioClip(this.seGameover, Camera.main.transform.position, 1.0f); // ステージクリア時のパネルを有効にします。 panelOnGameover.SetActive(true); }
/// <summary> /// ポーズ中に表示されているパネルにタッチした直後のイベント。 /// </summary> public void OnPausePanelPointerDown() { // タッチされた座標をスクリーン座標からワールド座標に変換します。 // ボールやバーの位置をワールド座標で扱っているため、同じくワールド座標にします。 Vector3 wPointerDownOnPause = Camera.main.ScreenToWorldPoint(Input.mousePosition); // ステージ開始直後、プレイ前のポーズ中の場合 if (this.phase == StagePlayPhase.Before) { // ゲーム開始時のみタップした方向にボールの移動方向を設定します。 // Vector2.Angle は from - (0, 0) - to の成す角度を計算するので、目標位置をボールの位置からひきます。 float deg = Vector2.Angle(Vector2.right, wPointerDownOnPause - coBall.gameObject.transform.position); this.coBall.ChangeDirection(deg); // フェーズをプレイ中に変更します this.phase = StagePlayPhase.Playing; } // ボールのコンポーネントのポーズ状態を解除します。 this.coBall.ChangePauseFlag(false); // バーのポーズ状態を解除します。 coBar.ChangePauseFlag(false); // ポーズ時のパネルを無効、非表示にします。 this.panelOnPause.SetActive(false); }