玩家死亡动画结束后停止背景滚动
Stop background scrolling after player death animation has finished
您好,我正在创建一个 2D 无尽跑道。
背景有 2 个动画 - Scroll 和 stopScroll
当角色碰撞并死亡时我想做以下事情
- 启用死亡动画 - 这正在发生
- 停止计时器 - 如果我这样做,所有动画都会停止
- 停止背景滚动 - 虽然它发生在死亡动画结束之前并跳回第一帧,但它正在发生。我希望背景相对于角色死亡的位置停止。
- 销毁角色 - 这是在动画完成之前发生的。
我想我需要使用 Coroutine 但不知道如何使用?
请帮忙!
这是我根据建议更新的代码
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 sprite 是层次结构中 LHS sprite 的子项。然后我点击 LHS bg sprite -> windows->Animation。
使用add curve在X轴上变换bg使其无限移动。
首先,在 Update() 中查找游戏对象不是一个好的做法。可能会创建它的一个实例。你可以这样做-
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;
}
希望它能帮助您了解如何实现您的代码。
您好,我正在创建一个 2D 无尽跑道。 背景有 2 个动画 - Scroll 和 stopScroll 当角色碰撞并死亡时我想做以下事情
- 启用死亡动画 - 这正在发生
- 停止计时器 - 如果我这样做,所有动画都会停止
- 停止背景滚动 - 虽然它发生在死亡动画结束之前并跳回第一帧,但它正在发生。我希望背景相对于角色死亡的位置停止。
- 销毁角色 - 这是在动画完成之前发生的。 我想我需要使用 Coroutine 但不知道如何使用?
请帮忙!
这是我根据建议更新的代码
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 sprite 是层次结构中 LHS sprite 的子项。然后我点击 LHS bg sprite -> windows->Animation。 使用add curve在X轴上变换bg使其无限移动。
首先,在 Update() 中查找游戏对象不是一个好的做法。可能会创建它的一个实例。你可以这样做-
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;
}
希望它能帮助您了解如何实现您的代码。