0

こんにちは、2D エンドレス ランナーを作成しています。背景には 2 つのアニメーションがあります - Scroll と stopScroll

  1. 死のアニメーションを有効にする - これは起こっています
  2. タイマーを停止 - 停止すると、すべてのアニメーションが停止します
  3. バックグラウンドのスクロールを停止します - これは、死のアニメーションが終了する前に発生し、最初のフレームに戻る前に発生しますが、発生しています。キャラクターが死亡した場所に対して背景を停止したい。
  4. キャラクターを破壊する - これは起こっていますが、アニメーションが完了する前です。コルーチンを使用する必要があると思いますが、方法がわかりませんか?

助けてください!

提案された私の更新されたコードは次のとおりです

void OnCollisionEnter2D(Collision2D other)
{
    if (other.gameObject.name == "Obstacle(Clone)")
    {
        StartCoroutine (DoMyThings(other.gameObject, this.gameObject, false));
    }
}

IEnumerator DoMyThings(GameObject obstacle, GameObject player, bool ninjaObjBool)
{
    ninjaObj = ninjaObjBool;
    Destroy (obstacle);
    animator.SetBool("dead", true);
    yield return new WaitForSeconds(1.2f);
    Destroy (player);
    Time.timeScale=0;
    //timerIsStopped = true;
    yield break;
}

背景アニメーション 背景のスプライトを複製し、並べて配置しました。RHS スプライトは、階層内の LHS スプライトの子です。次に、LHS bg スプライト -> ウィンドウ -> アニメーションをクリックします。add curve を使用して bg を X 軸上で変換し、無限に動かします。

4

1 に答える 1

1

まず第一に、Update() で gameobject を見つけるのは良い習慣ではありません。そのインスタンスの作成が期待される場合があります。あなたはこれを次のように行うことができます-

private Ninja ninjaClass;
.....
void Awake(){ //You can do it in Start() too if there is no problem it causes
    ninjaClass = GameObject.Find("Ninja").GetComponent<Ninja>();
}

//Now in Update(),

void Update(){
    if(!ninjaClass.ninjaObj){
        animator.SetBool("stopScroll", true);
    }
}

ここで、OnCollisionEnter2D() で Time.timeScale = 0 を設定しています。これは、時間に依存するシーン内のすべてのゲーム オブジェクトを停止します (ゲームを一時停止するのに適しています)。ハプニングを実行するには多くの方法があります (1.2.3.4)。タイマーをアニメーション化して使用する方法を示すコードを提供するとよいでしょう。しかし、コルーチンについて言及したように、例を示します-

float timer = 0.0f;
float bool timeIsStopped = false;
.........
void Update(){
    if(!timeIsStopped){timer += Time.deltaTime;}
}

void OnCollisionEnter2D(Collision2D other){
    if (other.gameObject.name == "Obstacle(Clone)")
    {
        StartCoroutine(DoMyThings(other.gameObject, this.gameObject, false));
    }
}

IEnumerator DoMyThings(GameObject obstacle, GameObject player, bool ninjaObjBool){
    ninjaObj = ninjaObjBool;
    yield return new WaitForSeconds(1.0f);
    animator.SetBool("dead", true);
    yield return new WaitForSeconds(1.5f);
    Destroy(obstacle);
    yield return new WaitForSeconds(2.0f);
    timeIsStopped = true;
    yield return new WaitForSeconds(0.5f);
    Destroy(player);
    yield break;
}

コードを実装する方法を理解するのに役立つことを願っています。

于 2015-02-12T10:46:35.160 に答える