玩家死亡动画结束后停止背景滚动

时间:2015-02-12 01:54:23

标签: c# unity3d unity3d-2dtools

您好我正在创建一个2D无尽的跑步者。 背景有2个动画 - Scroll和stopScroll 当角色碰撞并死亡时,我想做以下

  1. 启用死亡动画 - 这种情况正在发生
  2. 停止计时器 - 如果我这样做,则所有动画停止
  3. 停止背景滚动 - 虽然它发生在死亡动画结束之前并且它跳回到第一帧,但这种情况正在发生。我希望背景相对于角色死亡的位置停止。
  4. 摧毁角色 - 这是在动画完成之前发生的。 我想我需要使用Coroutine但不知道怎么做?
  5. 请帮助!

    这是我建议的更新代码

    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;
    }
    

    背景动画 我复制了一个bg精灵并将它们并排排列。 RHS精灵是层次结构中LHS精灵的子代。然后我点击LHS bg sprite - > Windows的>动画。 使用添加曲线转换X轴上的bg以使其无限移动。

1 个答案:

答案 0 :(得分: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;
}

希望它能帮助您了解如何实施代码。