首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >玩家死亡动画完成后停止后台滚动

玩家死亡动画完成后停止后台滚动
EN

Stack Overflow用户
提问于 2015-02-12 01:54:22
回答 1查看 1K关注 0票数 0

嗨,我正在创造一个2D无止境的跑步。背景有两个动画--滚动和stopScroll,当角色碰撞和死亡时,我想做以下操作

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

请帮帮忙!

这是我建议的更新代码

代码语言:javascript
代码运行次数:0
运行
复制
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精灵->窗口->动画。用加法曲线对X轴上的bg进行变换,得到它的无限运动。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-12 10:46:35

首先,在Update()中查找游戏对象不是一个好做法。创建它的一个实例可能是预期的。你可以这样做-

代码语言:javascript
代码运行次数:0
运行
复制
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)。如果您提供代码来显示您是如何动画和使用计时器,这将是更好的。但正如你提到的,我会给你举个例子-

代码语言:javascript
代码运行次数:0
运行
复制
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;
}

希望它能帮助你了解如何实现你的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28467966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档