查看: 1025|回复: 1
打印 上一主题 下一主题

[其他] 协同停止解决方案

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-11-29 04:44:34 |只看该作者 |倒序浏览
查找协停止相应地解决方案时候只有这两个:
        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

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-11-29 05:27:10 |只看该作者
Great code thansks!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-4 07:41 , Processed in 0.081595 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部