unity小游戏设计 Unity在协程(Coroutines)内开启线程(Threading )

您所在的位置:网站首页 unity结束协程 unity小游戏设计 Unity在协程(Coroutines)内开启线程(Threading )

unity小游戏设计 Unity在协程(Coroutines)内开启线程(Threading )

2022-05-28 01:45| 来源: 网络整理| 查看: 265

孙广东 2017.6.13

为什么要在泛型中进入线程, 因为这些之后我们是必须轮询执行完成后回到主线程的。然后主线程在再次执行后续的操作。

首先,Unity官方也提及过《

我的应用为什么需要使用泛型而不是协程?

go 协程 线程_unity 协程和线程区别_go 线程 多少 协程

先说协程, 协程方法可以一段接一段时间执行,但所有进程一直由一个主线程完成。 如果一个协程尝试执行耗时的操作,整个应用程序暂时停止。

主要是因为创建线程是一个开销非常大的操作。

更重要的是线程是危险的,所以需要特别小心同步的东西! 您还必须牢记,Unity API本身就不是线程安全的,因而所有调用Unity API都必须从主线程完成。

当你计算一些高收入的或大量的操作,线程一直可以是首选。 这方面的举例有:

下面是协程的一个例子:

usingSystem.Collectons;usingUnityEngine; class TestScript : MonoBehaviour {class Config {publicstring Version;publicstring AssetsUrl;} void Start(){ StartCoroutine(LoadConfig());} IEnumerator LoadConfig(){// 第一帧加载配置string json = File.ReadAllText("/path/to/config.json"); // 等待直到第二帧yieldreturnnull; // 在第二帧解析配置 Config config = JsonUtility.FromJsonConfig>(json); // 等待直到第三帧yieldreturnnull; // 在第三帧使用配置 Debug.Log("Version: "+ config.Version+"nAssets URL: "+ config.AssetsUrl);}}

上面协程将任务划分为三方法,加载json,解析成Config对象unity 协程和线程区别unity 协程和线程区别,使用配置。

但是Load 加载可能是个耗时的操作, 我们 在“Load”步骤中不在使用File.ReadAllText,我们可能会打开一个FileStream,并每一帧只加载文件的一部分。 它将迅速变得非常复杂,但是我们可以加载更大的JSON文件,同时将工作扩展至几帧。

usingSystem.Collections;usingSystem.IO;usingSystem.Text;usingUnityEngine; publicclass TestScript : MonoBehaviour {class Config {publicstring Version;publicstring AssetsUrl;} void Start(){ StartCoroutine(LoadConfig());} IEnumerator LoadConfig(){// 每帧加载1 Kb 大小,直到加载完成。 MemoryStream jsonStream =new MemoryStream();byte[] buffer =newbyte[1024];using(FileStream fileStream = File.OpenRead("/path/to/config.json")){while(true){int numBytesRead = fileStream.Read(buffer, 0, buffer.Length);if(numBytesRead ==0){break;} jsonStream.Write(buffer, 0, numBytesRead);yieldreturnnull;}} // 等到下一帧解析字符串yieldreturnnull;string json = Encoding.UTF8.GetString(jsonStream.ToArray()); // 等到下一帧 转成 Config 对象yieldreturnnull; Config config = JsonUtility.FromJsonConfig>(json); // 等到下一帧 使用配置yieldreturnnull; Debug.Log("Version: "+ config.Version+"nAssets URL: "+ config.AssetsUrl);}}


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3