纳金网
标题:
协同停止解决方案
[打印本页]
作者:
王者再临
时间:
2014-11-29 04:44
标题:
协同停止解决方案
查找协停止相应地解决方案时候只有这两个:
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
作者:
hyui
时间:
2014-11-29 05:27
Great code thansks!!
欢迎光临 纳金网 (http://www.narkii.com/club/)
Powered by Discuz! X2.5