如何在Unity中使用Cortine [使用样品]

它是异步处理,在游戏中非常向下和裁缝。例如,在后台屏幕中加载信息在后台屏幕中
在游戏屏幕中,各种元素被交错,例如改变特定处理完成时的行为。
有很多人有头脑。
所以这次它是一个统一的异步过程。我会解释一下激动人心。

游戏是异步的

嗯,在首先考虑游戏的内容时,它是异步处理的一个游行。
例如,如果游戏的所有移动停止在暂停屏幕上停止,或者当计时器变为零时,游戏会自动执行。
许多元素总是受到主要游戏逻辑分开的一些因素的影响。
因此,条件分支太复杂,并且每个对象都密集耦合。
例如,如果没有计时器,则如果计时器变为零,则可以执行以下处理

    Update() {
        --timer; 
        // timerがゼロになったら実行してほしいロジック
        if (timer > 0) {
            // いろいろな処理
        } 
    }

如果该条件增加(例如改变改变音乐在30秒或更短的音乐的效果),则加速度增加。
Unity Nature,对象必须将处理写入更新功能,因此它取决于Gutsuri更新的功能,如↑
难以将过程拆分下面。

采取游戏开发性质,并尝试创造 - > 遊ぶ ->由于规范由变化的周期进行并开发,
如果您不考虑稍后对象的配置,则会严重绝望。

顺便说一下,如果是我的经验,可以创建类似于非华处理系统的内容,该系统包括观察到的观察者模式和枚举,
根据游戏的逻辑,当您输入游戏逻辑更改时,它从未如此逃生。

统一激动

它是一个激动人心,它在这个游戏开发的斗争中放了一个手术刀。
Cortine是一种特殊功能,其在特定点中止处理并恢复使用下一个帧的处理。

让我们实际使用使用定时器实现的方法。

使用普通

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class timer : MonoBehaviour {

	// Use this for initialization
	void Start () {
        // コルーチンを実行
		StartCoroutine("testtimer",10);		
	}
	
	// Update is called once per frame
	void Update () {

	}

	IEnumerator testtimer (int lefttime) {		
		while(lefttime >= 0){
			// 残り時間が0以上の場合はタイマーを更新 
			yield return new WaitForSeconds(1.0f);
			Debug.Log(lefttime);
			--lefttime;
		}
		Debug.Log("end");
	}
}

如果您在合适的游戏对象上粘贴↑并执行

我将以表格计数。

此激动功能是以下部分。

	IEnumerator testtimer (int inittime) {		
		// 残り時間が0以上の場合はタイマーを更新 
		while(inittime >= 0){
			// タイマーを更新してフレームを中断
            yield return new WaitForSeconds(1.0f);
            // 次のフレームでここから再開
			Debug.Log(inittime);
			--inittime;
		}
		Debug.Log("end");
	}
}

让我们详细解释一下。
Cortine函数包括以下元素,

  • 返回值是Ienumerator
  • 指定返回值使用符合yeild的运算符
  • 处理恢复条件由yiled后的返回位置确定
  • 只有这个。

    首先是一个关于一个

    	IEnumerator testtimer (int inittime) {		
    

    ↑↑的ienumerator是关于返回值的。这是第一次的条件。
    通过使用此功能,这定义了一种使用Cortine的函数。

    因此,伊索运营商,即第二条件,即

    			yield return new WaitForSeconds(1.0f); // ここで処理を中断
                // 次のフレームでここから処理を再開する。
    

    它将是一部分通过指定此返回值,帧处理被中断并在下一个帧中
    恢复处理。
    并指定要恢复的条件,您可以通过将特定值返回到此返回值来指定要恢复处理的条件。
    在这种情况下,由于它将在1秒后恢复处理,因此它给出1.0f到一个对象,该对象将在WaitForefonds的特定时间后恢复处理。

    最后执行Coroutin函数,

    	// Use this for initialization
    	void Start () {
            // コルーチンを実行
    		StartCoroutine("testtimer",10);// 実行		
    	}
    

    将函数名称和函数参数传递给名为startcoroutine的函数。

    关于产量的返回值

    Corchin的Kimo是中断和恢复处理的时机,
    我想我一直在知道解释。
    因此,我们将解释激动人机的返回值和效果,这取决于现在的时间。

    暂停框架的处理

        yield return null;
    

    如果返回值为上述返回值为null,则它将该帧中的处理中止并恢复使用下一个帧的处理。

    Corcing Cortine.

        yield break;
    

    在特定时序退出运行的Cortine。
    在这种情况下,不会发生处理。例如,如果它是计时器的示例

    	IEnumerator testtimer (int inittime) {		
    		while(inittime >= 0){
    			// 残り時間が0以上の場合はタイマーを更新 
    			yield return new WaitForSeconds(1.0f);
    			Debug.Log(inittime);
    			--inittime;
    			if(inittime == 5) {
    				yield break;// この時点でコルーチンが終了する
    			}
    		}
    		Debug.Log("end");
    	}
    

    计时器将停止运行6秒钟。

    等待特定的时间

        yiled return new WaitForSeconds(3.0f); // 3秒間待つ
    

    这是一个名为unity准备的waitforseconds的对象。
    您可以调整在代码中的值等待的时间。

    暂停条件

    正如您可以看到返回值的评论,您可以通过返回值调整时间来恢复,如您所见。
    因此,UNITITE S4也提供了自定义时间来自制恢复其的能力。
    这是纯粹的indielDindintintintintrity。

    让我们看看这个例子。这是官方主页代码的一点点,并在按下时恢复处理。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ButtonWait : MonoBehaviour {
    
    	// Use this for initialization
    	void Start () {
    		StartCoroutine("routine");
    	}
    	
    	// Update is called once per frame
    	void Update () {
    		
    	}
    
    	IEnumerator routine(){
    		yield return new PushAButton();
    		Debug.Log("A button has push");
    	}
    }
    
    class PushAButton : CustomYieldInstruction{
    
    	public override bool keepWaiting{
    		get {
    			return !Input.GetKeyDown(KeyCode.A);
    		}
    	}
    
    	public PushAButton(){
    		Debug.Log("waiting for press A button");
    	}
    }
    
    

    自定义事件在以下部分中定义。

    class PushAButton : CustomYieldInstruction{
    
    public override bool keepWaiting{
    	get {
    
    		return !Input.GetKeyDown(KeyCode.A); // ここで再開する条件を記述する
    	}
    }
    
    public PushAButton(){
    	Debug.Log("waiting for press A button"); //コルーチンの処理中断直後の処理はここに書く
    }
    }
    
    

    自定义Cortine事件包括以下条件:

  • 在一个新课堂上inshitiT upaseyieldInstruction
  • class PushAButton : CustomYieldInstruction{
    
  • 覆盖保留
  • 在布尔的真实时保持恢复
  • public override bool keepWaiting{
    	get {
    		return !Input.GetKeyDown(KeyCode.A);
    	}
    }
    
  • 使用构造函数中断定义处理
  • public PushAButton(){
    	Debug.Log("waiting for press A button");
    }
    

    实际上尝试制作(褪色)

    让我们创建一个实际在实际版本中使用的东西。
    我认为视觉效果更容易理解,所以淡出过渡效果

    逻辑

    首先,让我们了解逻辑。

    1.将特定的精灵对象放在相机前面
    2.逐渐减少精灵颜色的α值

    只有这个。

    这一次,我将在2中使用一部分用皮质旋转。

    准备

    首先,让我们准备一个对象。
    首先,准备要在整个相机上显示的图像。
    使用UI面板。

    像图像ui->从面板生成面板对象并传递它。

    让我们将脚本粘贴到该面板上的对象中。

    执行

    好吧,让我们实际上编写源代码。

    由于此属性用于制作精灵颜色,
    您可以使用它来实现。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    
    public class Fade : MonoBehaviour {
    
    	public Image fadeTarget;// fadeoutするスプライトの対象
    
    	// Use this for initialization
    	void Start () {
    		StartCoroutine("fadeout",3);
    	}
    	
    	// Update is called once per frame
    	void Update () {
    		
    	}
    
    	IEnumerator fadeout (int fadeValuePerSeconds) {		
    		float alpha = 1f;
    		while(alpha >= 0){
    			// 残り時間が0以上の場合はタイマーを更新 
    			yield return new WaitForSeconds(0.3f);
    			alpha -= 0.03f;
    			Color nextColor = new Color(fadeTarget.color.r,fadeTarget.color.g,fadeTarget.color.b, alpha);
    			this.fadeTarget.color = nextColor;
    		}
    		Debug.Log("end");
    	}
    }
    

    如果将此粘贴到合适的对象中并附加一个对象以将其逐渐消失给公共图像fadetarget,
    它可以证实它会随着时间的推移而褪色。

    这次我在适当的时候褪色,
    例如,在这种情况下,它是一个触发器,按钮与自定义皮质导入组合
    你也可以褪色,
    如果您在Cortine淡出部分中创建功能“第二秒钟”,
    它可以用作简单的资产。
    此外,虽然这是一个谨慎,但由于它被写入以简化这一次,淡入淡出不顺畅。
    因此,如果要调整这些,请确保使用称为LERP的函数顺畅。

    概括

    游戏是蜗牛 - >実際に遊ぶ->問題点を洗い出す ->它包括再次制作的循环。
    并且因为周期的数量直接连接到游戏的质量,因此不可能花时间尽可能地制作零件,
    让我们编写可以轻松更改的代码,这些代码可以使用诸如考文录等技术。

    给这篇文章的人

    assa

    我正在京都做工程师。记得阿萨或八个。 主要业务是网络中的爱好。好的