关于unity3d的协程,很是的好用,好比等待几秒执行,等待下一帧执行等!this
可是也有潜在的问题:线程
1.协程是单线程的,在主线程中完成3d
2.若是发现yield, 那么这一帧会结束,那么等下一帧调用此脚本的时候继续执行!协程
若是同一个协程方法被两个方法在相对短的时间内都进行调用,那么就会出现逻辑上的错误!这个时候须要用锁来锁定!ip
我举例以下:it
using UnityEngine;
using System.Collections; pip
public class YieldScpipt : MonoBehaviour { io
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
} for循环
public void RunContinue()
{
StartCoroutine(run());
} class
IEnumerator run()
{
print("1");
//yield return 0;
print("2");
//yield return 0;
print("3");
yield return 0;
}
}
在另外一个类中用Test方法进行调用
public class Test : MonoBehaviour {
public YieldScpipt ys;
// Use this for initialization
void Start () {
for(int i=0;i<3;i++)
{
ys.RunContinue();
}
}
// Update is called once per frame
void Update () {
}
}
那么会打印以下:1,2,3,1,2,3.。。。预期的顺序
若是把注释去掉
IEnumerator run()
{
print("1");
yield return 0;
print("2");
yield return 0;
print("3");
yield return 0;
}
那么打印的顺序就不能保证了,这就是我遇到的问题!
固然,我不是用for循环这样引发的,我是不经意间写错了逻辑,致使在很短的时间内,这个方法被两次或者屡次调用,致使了逻辑错误!
有什么问题请指出!欢迎与广州老龙联系!