From 77b443f8e85782362e4b2f92daf8deef46f5a4f7 Mon Sep 17 00:00:00 2001 From: kimura Date: Mon, 25 Jul 2022 12:07:54 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=B8=88=E3=81=BF=E3=82=B9?= =?UTF-8?q?=E3=83=86=E3=83=BC=E3=82=B8=E7=A0=B4=E6=A3=84=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scenes/MiniGame/Scripts/StageManager.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageManager.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageManager.cs index 6b604e50..e3f00863 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageManager.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageManager.cs @@ -29,6 +29,15 @@ namespace MyGame.Scenes.MiniGame.Scripts fenceSubject.AddTo(this); difficulty.AddTo(this); } + + /* + * ステージ自動生成 + * タイマーによってCurrentDifficulteyが切り替わると生成コース変更 + * 生成単位を3コース先など指定可能(分けて生成したほうが負荷が低そう?調査次第) + * Difficultyでゲームスピード切り替え + * ゲームスピード切り替えではdeltaTimeを倍にする + * deltaTime以外の影響はプレイヤーのAnimatorのSpeed(倍速と連動) + */ public void SetBeginStages(Transform[] newStages) { @@ -54,7 +63,6 @@ namespace MyGame.Scenes.MiniGame.Scripts var xPos = x.transform.position.x; minPos = Mathf.Min(minPos, xPos); maxPos = Mathf.Max(maxPos, xPos); - // 落とし穴があった場合通知 if (x.ItemType != StageItem.Type.Hole) { return; @@ -67,13 +75,15 @@ namespace MyGame.Scenes.MiniGame.Scripts stage.SetPositionX(stageEndXPos - minDiff); // endPos更新 stageEndXPos = stage.position.x + maxDiff + partsToPartsOffset; + var cacheStageEndPos = stageEndXPos; // ステージの破棄 Observable.Interval(TimeSpan.FromSeconds(.5f)) - .Where(_ => stageEndXPos < cacheTargetXPos) - .Subscribe(_ => + .First(_ => cacheStageEndPos < cacheTargetXPos) + .Subscribe(_ => { }, () => { Destroy(stage.gameObject); - }).AddTo(this); + }).AddTo(stage.gameObject); + // 落とし穴があった場合通知 if (holePos > float.MinValue) { Observable.NextFrame().Subscribe(_ => fenceSubject.OnNext(stage.position.x + holePos - xPos)).AddTo(this); @@ -84,7 +94,7 @@ namespace MyGame.Scenes.MiniGame.Scripts public void UpdatePos(float targetXPos) { cacheTargetXPos = targetXPos; - if (stageEndXPos - targetXPos <= stageGenerateDistance) + if (stageEndXPos - partsToPartsOffset - targetXPos <= stageGenerateDistance) { GenerateStage(); }