2015-02-12 119 views
0

嗨,我正在创建一个2D无尽的亚军。 背景有2个动画 - 滚动和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; 
} 

背景动画 我重复BG精灵和侧对准他们一边。 RHS精灵是层次结构中LHS精灵的孩子。然后我点击LHS bg sprite - > windows-> Animation。 使用添加曲线来转换X轴上的bg以使其无限移动。

回答

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

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

+0

这是伟大的,最后我明白了Coroutine,它帮助我完成(1,2和4)。但是我的背景仍然没有停顿在我想要的地方。我想我需要查找实现无限滚动背景的最佳方法。不管怎么说,多谢拉。我将添加有关如何为背景添加动画的细节。 – chintan 2015-02-12 12:52:53

+0

实际上,我删除了背景上的脚本,并通过timeScale停止了时间,现在BG工作得很好。再次感谢。我将更新我的代码,如果您可以查看一次,它会非常友好。 – chintan 2015-02-12 13:08:40

+0

欢迎。当然,我会,只要我得到空闲时间:) – 2015-02-12 13:47:16