纳金网

标题: 协同停止解决方案 [打印本页]

作者: 王者再临    时间: 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