Destroy(object , float time):time时间之后销毁object类型
Destroy(this.gameObject, 3.5f);
Invoke:延迟函数,通过方法名延迟调用对应函数
注意:当此脚本或者当前脚本所在的游戏物体失活,延迟函数依然会执行;
但是当前脚本或者游戏物体被销毁,延迟函数就不会执行
void Update()
{
Invoke("AliveInvoke", 5.2f);
if (Input.GetKeyDown(KeyCode.A))
{
transform.gameObject.SetActive(false);
}
if (Input.GetKeyDown(KeyCode.B))
{
Destroy(gameObject);
}
if (Input.GetKeyDown(KeyCode.C))
{
Destroy(this);
}
}
void AliveInvoke()
{
transform.gameObject.SetActive(true);
Debug.Log("Alive");
}
CancelInvoke():取消延迟函数
如果不传参数,那么就会取消当前代码内的所有延迟函数
如果传参数,就是取消对应函数延迟调用
InvokeRepeating(string methodName, float time, float repeatRate)
延迟重复调用,Time时间之后调用methodName方法,每隔repeatRate秒之后再调用一次methodName方法
InvokeRepeating("TimeInvoke", 3, 2);
不会引起代码阻塞
协程不是多线程,是假的“多线程”
应用场景1.www加载网络数据;2.异步加载资源,场景
1.协程声明函数
public IEnumerator PrintA()
{
//yield是IEnumerator的返回值
//new WaitForSeconds(3.0f);代表等待3s,然后继续从此开始
yield return new WaitForSeconds(3.0f);
Debug.Log("printA.ing");
//协程里面嵌套一个协程
StartCoroutine("PrintB");
}
public IEnumerator PrintB()
{
yield return new WaitForSeconds(2.0f);
Debug.Log("printB.ing");
}
2.启动协程函数
1.StartCoroutine("PrintA");
2.StartCoroutine(PrintA()); (这个方法开启的协程只能通过Stop AllCoroutines关闭)
3.IEnumerator ie = PrintA();
StartCoroutine(ie);
3.协程的关闭(关闭的形式要和启动的形式相对应)
1.StopCoroutine("PrintB");
2.StopCoroutine(ie);
3.StopAllCoroutines();
private IEnumerator ie;
// Start is called before the first frame update
void Start()
{
Debug.Log(1);
//StartCoroutine(PrintA());
ie = PrintA();
StartCoroutine(ie);
Debug.Log(2);
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
Debug.Log(1);
StopCoroutine(ie);
}
if (Input.GetKeyDown(KeyCode.B))
{
Debug.Log(2);
StopAllCoroutines();
}
}
public IEnumerator PrintA()
{
//yield是IEnumerator的返回值
//new WaitForSeconds(3.0f);代表等待3s,然后继续从此开始
yield return new WaitForSeconds(3.0f);
Debug.Log("printA.ing");
//协程里面嵌套一个协程
StartCoroutine("PrintB");
StopCoroutine("PrintB");
}
public IEnumerator PrintB()
{
yield return new WaitForSeconds(2.0f);
Debug.Log("printB.ing");
}
4.协程是否失效:
当协程开启后,当前代码组件失活,不影响协程继续执行
当协程开启后,当前代码组件销毁,协程就不继续执行
当协程开启后,当前代码组件在游戏物体失活,协程不继续执行
所以以后协程的代码不能挂在经常失活或者激活的游戏物体上
协程返回值
//new WaitForSeconds(3.0f);代表等待3s,然后继续从此开始
yield return new WaitForSeconds(3.0f);
//运行到当前帧最后执行
yield return new WaitForEndOfFrame();
//等待设置的fixtime的时间0.02
yield return new WaitForFixedUpdate();
//等一帧
yield return null;
//直接跳出协程
协程加载Resource资源
ResourceRequest rr = null;
IEnumerator ResourcesLoad(string path)
{
rr = Resources.LoadAsync(path);
yield return rr;
}
Unity的特殊文件夹
Resource:资源文件夹,可以通过路劲直接用API Resources 进行加载;工程文件打包时,不在特殊文件夹内时,跟其他文件都没有依赖关系时,此资源不会打进包;但是Resources文件内所有资源,无论是否跟其他资源有关系,都会打进包;为了减小包体大小,Resources不能乱放资源
Standard Assets:默认文件夹,此文件内资源会被优先编译,代码
Plugins:插件一般放这个文件夹;还有一些android和ios平台区分的文件
Editor:存放Unity工具类,这个文件夹内所有资源都不会打进包
Application.persistentDataPath:固定数据路劲