// バー生成NGとボタン表示関数を作る private void CreateButton() { // ノーマルモード if (SaveClass.GetGameMode()) { // バーを生成できなくする SaveClass.SetIsDraw(false); // ボタンを出す Instantiate(loadToNormalGame, canvas.transform); Instantiate(loadToMenu, canvas.transform); } // Infiniteモード else { // バーを生成できなくする SaveClass.SetIsDraw(false); // ボタンを出す Instantiate(loadToInfiniteGame, canvas.transform); Instantiate(loadToMenu, canvas.transform); // CreateInputField(); } }
/// <summary> /// クリックが離された瞬間の処理 /// Normalのときだけ最後にパワーゲージが減少する /// </summary> /// <returns>Lengs(PowerGauge処理に使用)</returns> public void KeyUpMoment() { // バー生成終了ポイント if (Input.GetKeyUp(KeyCode.Mouse0)) { // カメラ座標を入れる MemoryEndPoint = mainCamera.ScreenToWorldPoint(Input.mousePosition); // zを0にそろえる MemoryEndPoint.z = 0.0f; // Debug.Log("MemoryEndPoint:_" + MemoryEndPoint); // バーの生成 var NewChildren = Instantiate(Bar, new Vector3((MemoryEndPoint.x + MemoryStartPoint.x) * 0.5f, (MemoryStartPoint.y + MemoryEndPoint.y) * 0.5f, 0.0f), Quaternion.identity); // EnptyObjectを親にする NewChildren.transform.parent = gameObject.transform; NewChildren.name = "Child"; // ポジションの決定 //NewChildren.transform.position = new Vector3((MemoryEndPoint.x + MemoryStartPoint.x) * 0.5f, (MemoryStartPoint.y + MemoryEndPoint.y) * 0.5f, 0.0f); // 角度の決定 float AngleX = MemoryEndPoint.x - MemoryStartPoint.x; float AngleY = MemoryEndPoint.y - MemoryStartPoint.y; float Angle = Mathf.Atan2(AngleY, AngleX); NewChildren.transform.Rotate(Vector3.forward, Angle * Mathf.Rad2Deg); // スケールの決定 var Lengs = Vector3.Magnitude(MemoryEndPoint - MemoryStartPoint); NewChildren.transform.localScale = new Vector3(Lengs, 0.3f, 1.0f); // ノーマルモード時のみの処理 if (SaveClass.GetGameMode()) { // パワーゲージ減少 powerGauge.ReduceGauge(Lengs); } } }
/// <summary> /// 反射バーの生成 /// </summary> private void CreateReflectionBar() { // ノーマル時のみパワーゲージ制限がある if (SaveClass.GetGameMode()) { // まだパワーゲージが残っていた場合 if (powerGauge.IsRemain) { // バー生成終了ポイント KeyUpMoment(); // バーがあるときの再生成時処理 KeyPushMoment(); } } // Infiniteはパワーゲージ制限なし else { // バー生成終了ポイント KeyUpMoment(); // バーがあるときの再生成時処理 KeyPushMoment(); } }
/// <summary> /// なんちゃってリザルト画面 /// </summary> public void GotoResultScene() { // ゲームモードがNormalの場合 if (SaveClass.GetGameMode()) { // ブロックをすべて消したら if (SaveClass.GetIsClear()) { Destroy(ball.gameObject); // ゲームクリアテキストの表示 gameClearText.GetComponent <Text>().enabled = true; // ボタンを出す CreateButton(); } // 玉が画面外に出たら if (!ball.GetComponent <Renderer>().isVisible) { // 玉を削除 Destroy(ball.gameObject); // ゲームオーバーテキストの表示 gameOverText.GetComponent <Text>().enabled = true; // ボタンを出す CreateButton(); } } // ゲームモードがInfiniteの場合 else { var ResultScore = ball.DeleteCount * 100; bool CanOnlyOnce = false; if (!SaveClass.GetGameOver()) { // 玉が画面外に出たら if (!ball.GetComponent <Renderer>().isVisible&& !CanOnlyOnce) { // 一度きりフラグを折る CanOnlyOnce = true; // ゲームオーバーテキストの表示 gameOverTextInfinite.text = ("Game Over\n\nYour Score:" + ResultScore + "\n\nTap to Retry!!"); gameOverTextInfinite.GetComponent <Text>().enabled = true; } foreach (Transform childTransform in blocks.transform) { // アクティブなブロックが外に出たら if (!childTransform.GetComponent <Renderer>().isVisible&& childTransform.GetComponent <PrefabStatus>().GetIsActive() && !CanOnlyOnce) { // 一度きりフラグを折る CanOnlyOnce = true; // ゲームオーバーテキストの表示 gameOverTextInfinite.text = ("Game Over\n\nYour Score:" + ResultScore + "\n\nTap to Retry!!"); gameOverTextInfinite.GetComponent <Text>().enabled = true; } } } // 一度だけ通ってほしいゲーム終了処理 if (CanOnlyOnce) { SaveClass.SetGameOver(true); // 玉を削除 Destroy(ball.gameObject); // save SaveClass.StorePlayerScore(ResultScore); // 通信中は何も受け付けないように if (!ServerIsBusy) { StartCoroutine(WaitServerProcess()); } } } }
private void LateUpdate() { // カウントダウンが終わったら if (CountdownText.IsGameStart()) { // モード共通失敗処理 ToResult.GotoResultScene(); // 条件を満たしたらResultへ遷移 // ノーマルモードの場合 if (SaveClass.GetGameMode()) { if (BlockCount != DeleteCount) { //埋まったレイの長さ float Check; RaycastHit hit; var BallVectorWork = BallVector; // 物体に衝突したかどうか // 衝突していた場合新しいBallVectorを取得 BallVector = Obj.Reflection(BallTrans, BallVector, out Check, out hit); if (BallVector != BallVectorWork) { while (true) { //BallTrans.position = hit.point- BallVector; var work = BallVector.normalized; BallVectorWork = BallVector; work *= Check; //Debug.Log("Check_:" + Check); BallVector = Obj.Reflection(BallTrans, BallVector, out Check, out hit); if (BallVector == BallVectorWork) { BallTrans.Translate(work); break; } } } else { BallTrans.Translate(BallVector); } } else { // クリアフラグを立てて遷移 SaveClass.SetIsClear(true); DeleteCount = 0; ToResult.GotoResultScene(); } } // Infiniteモードの場合 // クリアはないのでひたすらに壁打ち // @todo 関数にできそう else { //埋まったレイの長さ float Check; RaycastHit hit; var BallVectorWork = BallVector; // 物体に衝突したかどうか // 衝突していた場合新しいBallVectorを取得 BallVector = Obj.Reflection(BallTrans, BallVector, out Check, out hit); if (BallVector != BallVectorWork) { while (true) { //BallTrans.position = hit.point- BallVector; var work = BallVector.normalized; BallVectorWork = BallVector; work *= Check; // Debug.Log("Check_:" + Check); BallVector = Obj.Reflection(BallTrans, BallVector, out Check, out hit); if (BallVector == BallVectorWork) { BallTrans.Translate(work); break; } } } else { BallTrans.Translate(BallVector); } //while (hit.point > BallVector.magnitude) //{ // var work = BallVector.normalized; // work * Check // BallVector = Obj.Reflection(BallTrans, BallVector, out Check); //} //// BallVectorの方向へ移動 //BallTrans.Translate(BallVector); } } }