次の野菜を出現させる
落とした野菜が止まった場合、次の野菜を出現させる処理を作りたいと思います。
今回、まだゲームオーバーを作成していないので、画面から消えた場合にも次の野菜を出現させたいと思います。
野菜の状態をenumで定義する
まず、野菜の状態をenumで定義します。
出現した、動いた、止まった、いなくなった、の4つの状態とします。
VegetableSprite.cs
-略-
//野菜の状態をenumで定義
public enum State { start, move, stop, destroy };
State _state;
public State state {
get {
return _state;
}
set {
_state = value;
}
}
-略-
次にタッチで落とした時に、状態を変更させます。
TouchDisplay.cs
-略-
void pointersReleasedHandler(object sender, PointerEventArgs e) {
touchFlug = false;
if (GameManager.Instance.ButtonClicked == true) {
GameManager.Instance.ButtonClicked = false;
return;
}
//野菜を落とす
GameManager.Instance.VegetableSprite.Rigidbody2d.gravityScale = 1;
//野菜の状態を変える
GameManager.Instance.VegetableSprite.state = VegetableSprite.State.move;
}
-略-
状態によって野菜を生成する
止まったり、画面外へ消えた時、状態を判断しながら、新しく野菜を生成するようにします。
ポイントは、Rigidbody2DのIsSleeping()で、このメソッドでTrueが返ってきたら、止まっていると判断しています。
VegetableSprite.cs
-略-
void OnEnable() {
_state = State.start;
}
void Update(){
if (_state != State.destroy) {
if (_rigidbody2d != null && _state == State.move) {
//止まったら野菜を生成
if (_rigidbody2d.IsSleeping()) {
_state = State.stop;
GameManager.Instance.CreateVegetable();
}
}
//画面外へ消えてしまったら野菜を生成(本来はゲームオーバー)
if (!GetComponent().isVisible && _state == State.move) {
_state = State.destroy;
GameManager.Instance.CreateVegetable();
}
}
}
-略-
今回ここまでですが、このままだと野菜を積んでいっても野菜の生成場所が変わらないので、そちらを修正します。

コメント