public GameSceneState CreateState() { var ballInitState = ballRender.GetRender().CreateState(new Vector2(ballInstantiatePos.x, canvasRect.sizeDelta.y)); var barInitState = barRender.Target.CreateState(); return(new GameSceneState { ballInitState = ballInitState, ballState = new [] { ballInitState }.ToList(), ballGenerator = BallGenerator.RandomPos(100, 200), barState = barInitState, barInitState = barInitState, canvasSize = canvasRect.sizeDelta, uiState = uiRender.Target.CreateState(), }); }
/// <summary> /// ボールの間隔、x座標に関してランダムにボールを生成します。これは、ゲームが実行中のみ機能します。 /// </summary> static GameSceneState MaybeRandomGenerateBall(GameSceneState state) { if (state.gameState != GameState.Playing) { return(state); } var latestBall = GetLast(state.ballState); var nextPos = state.ballGenerator?.MaybeGenerate(state.canvasSize, latestBall); if (nextPos.HasValue) { state.ballGenerator = BallGenerator.RandomPos(50, 300); var ballXPos = state.barState.movePos.GetPos(RandomEnum <BarPosition> .GetRandom()).x; // ボールを生成する(yの相対位置、x方向はランダム) var ballPos = new Vector2(ballXPos, latestBall.position.y + nextPos.Value); var newBall = state.ballInitState; newBall.movesBall = true; newBall.position = ballPos; state.ballState.Add(newBall); } return(state); }