unity3d coroutine、invoke的应用

本文深入探讨Unity中的异步调用技术,包括Coroutine和Invoke类的使用方法、特点及示例代码,帮助开发者理解并有效应用这些技术进行游戏开发。
提供了两种异步方式的调用
(1) coroutine(协程) 应该是untity对c#多线程的一种封装吧(内部不是很了解),调用的函数需标示IEnumerator迭代配合yield return xxx使用
yield标示着是否暂停迭代,yield return true;继续下面代码,否则将挂起.


(2)invoke 类似于as/js的setTimeout,指定延迟时间后执行一个方法,不同于coroutine,调用时不可加参数




InvokeInvokes the method methodName in time seconds.
在time秒调用methodName方法;简单说,根据时间调用指定方法名的方法
InvokeRepeatingInvokes the method methodName in time seconds.
在time秒调用methodName方法;简单说,每隔指定时间调用指定方法名的方法
CancelInvokeCancels all Invoke calls on this MonoBehaviour.
取消这个MonoBehaviour上的所有调用。
IsInvokingIs any invoke on methodName pending?
某指定函数是否在等候调用。
StartCoroutineStarts a coroutine.
开始协同程序。
StopCoroutineStops all coroutines named methodName running on this behaviour.
停止这个动作中名为methodName的所有协同程序
StopAllCoroutinesStops all coroutines running on this behaviour.
停止所有动作的协同程序


eg:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	void Start() {
	print("Starting " + Time.time);
		StartCoroutine(WaitAndPrint(2.0F));
		print("Before WaitAndPrint Finishes " + Time.time);
	}
	IEnumerator WaitAndPrint(float waitTime) {
		yield return new WaitForSeconds(waitTime);
		print("WaitAndPrint " + Time.time);
	}
}

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	public Rigidbody projectile;
	void LaunchProjectile() {
		Rigidbody instance = Instantiate(projectile);
		instance.velocity = Random.insideUnitSphere * 5;
	}
	public void Awake() {
		InvokeRepeating("LaunchProjectile", 2, 0.3F);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值