- 最后登录
- 2016-8-29
- 注册时间
- 2012-8-25
- 阅读权限
- 90
- 积分
- 23585
- 纳金币
- 20645
- 精华
- 62
|
查找协停止相应地解决方案时候只有这两个:
StopCoroutine();
StopAllCoroutines();
这两种解决方案并不能很好地解决遇到的[color=rgb(85, 85, 85) !important]问题,所以有了以下解决方案。
需要实现的功能是播放动画A时候,如果动画B在播放,停止动画B,同时停止动画B播放时候相应地声音,粒子效果等。
以下是个简单实现:
//======================================================>
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour
{
bool mShouldPlayAnimAppear;
bool mShouldPlayAnimDisappear;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
// StartCoroutine(AnimAppear());
// StartCoroutine(AnimDisappear());
}
IEnumerator AnimAppear ()
{
ShouldPlayAnimAppear = true;
ShouldPlayAnimDisappear = false;
while (ShouldPlayAnimAppear == false) {
yield break;
}
while (true) {
yield return new WaitForEndOfFrame ();
}
//DoSomething
}
IEnumerator AnimDisappear ()
{
ShouldPlayAnimDisappear = true;
ShouldPlayAnimAppear = false;
while (ShouldPlayAnimDisappear == false) {
yield break;
}
while (true) {
yield return new WaitForEndOfFrame ();
}
//DoSomething
}
public bool ShouldPlayAnimAppear {
get {
return mShouldPlayAnimAppear;
}
set {
mShouldPlayAnimAppear = value;
}
}
public bool ShouldPlayAnimDisappear {
get {
return mShouldPlayAnimDisappear;
}
set {
mShouldPlayAnimDisappear = value;
}
}
}
//<======================================================
bool mShouldPlayAnimAppear;
bool mShouldPlayAnimDisappear;
主要原理是在协同执行时候添加一全局变量,如果变量被置为false,就yield break。
例如协同方法A和B有冲突,就在A协同执行时候置B协同为false
|
|