Unityで何かを作ってみる その11

Unity

一旦判明しているバグの修正

これまで製作してきた中で、若干バグを出してしまっているので、そちらを修正します。
・最後に落とした野菜以外が画面外に落ちても、ゲームオーバー扱いにならない。
・最後に積んだ野菜の高さが積んでいる最大の高さより低かった場合、次の野菜の生成位置が最後に積んだ野菜の高さを基準としているため、低くなってしまう。
上記2点のバグについて修正を行います。
最後に落とした野菜以外が画面外に落ちても、ゲームオーバー扱いにならないのは何故かというと、ゲームオーバー判定の扱いを、「動いていてかつ画面画に落ちる」という条件としており、それは良いのですが、一旦止まって再度動き出した野菜のステータスを変更しておりませんでした。
VegetableSprite.cs

-略-
void Update(){
-略-
    if (!GetComponent().isVisible && _state == State.move) {
        _state = State.destroy;
        GameManager.Instance.GameOver();
    }
-略-
}
-略-

これを以下のように変更しました。
VegetableSprite.cs

-略-
void Update(){
-略-
    if (!GetComponent().isVisible && !_rigidbody2d.IsSleeping()) {
        _state = State.destroy;
        GameManager.Instance.GameOver();
    }
-略-
}
-略-

これで、どの野菜が画面外に落ちてもゲームオーバー判定になるようになりました。
次に、次の野菜の生成位置が最後に積んだ野菜の高さを基準としてしまっている件は、保持している最大高さを、積んだ野菜の高さが越えなければ更新しないという処理にすることによって解決しました。
VegetableSprite.cs

-略-
void Update(){
    if (_state != State.destroy) {
        if (_rigidbody2d != null && _state == State.move) {
            if (_rigidbody2d.IsSleeping()) {
                _state = State.stop;
                //一番高い高さを越えている時のみ最大の高さを変更する
                if (GameManager.Instance.MaxHeight < gameObject.transform.localPosition.y){ GameManager.Instance.MaxHeight = gameObject.transform.localPosition.y; } //カメラの移動 if (gameObject.transform.localPosition.y > 1) {
                    Camera.main.transform.localPosition = new Vector3(0, gameObject.transform.localPosition.y, -10);
                }
                GameManager.Instance.CreateVegetable();
            }
        }
-略-
    }
}
-略-

この修正を行うことで、一番高く積み上がっている野菜の高さを基準に、次の野菜が生成されるようになりました。
ここまで来るとかなり遊べるようなものになってきました!
次回はスコアを表示します。

Unity
スポンサーリンク
northprintをフォローする
おおよそ北の方向から

コメント