29606人加入学习
(126人评价)
Unity API常用方法和类详细讲解(基于Unity5.6)
价格 免费
承诺服务

什么是协程、它是如何执行的

协程(Coroutine):

  1. 不会阻塞当前方法的运行
  2. 自身可以暂停运行
  3. 返回值为IEnumerator
  4. 返回参数的时候使用yield return null/0
  5. 协程方法的调用:StartCoroutine(method())
public class CoroutineCS : MonoBehaviour {
	public GameObject cube;
	// Use this for initialization
	void Start () {
		print("hahahahah");
		StartCoroutine(ChangeColor());//通过协程,调用ChangeColor方法,调用之后,start和ChangeColor同步进行
		print("dcdd");
	}
	
	// Update is called once per frame
	void Update () {
		
	}
	/// <summary>
	/// 不会阻塞当前方法的运行
	/// 自身可以暂停运行
	/// 返回值为IEnumerator
	/// 返回参数的时候使用yield return null/0
	/// 协程方法的调用:StartCoroutine(method())
	/// </summary>
	/// <returns></returns>
	IEnumerator ChangeColor()
	{
		print("color");
		cube.GetComponent<MeshRenderer>().material.color = Color.blue;
		print("aaaaacolor");
		yield return null;
	}
}

 

[展开全文]

1、

如果执行的是一个普通方法,那么会等这个方法执行完,然后继续往下执行。

如果调用的是协程方法,不会等这个方法执行完再往下执行 ,可以设置暂停。

2、协程的规则

 

[展开全文]

协程方法Coroutines

方法遇到协程方法时,两个方法一起执行,与普通方法不同,普通方法会等待这个普通方法执行完后继续向下进行

协程自身可以暂停

返回值:IEnumerator

返回参数: yield return

调用:在方法内使用StartCoroutine(协程名());

[展开全文]

执行普通方法:

普通方法执行完,继续向下执行

协程方法:

调用完协程方法后,不会等这个方法执行完就继续向下执行了

 

[展开全文]

   

             协程 格式

IEnumerator 方法名a()

{

    代码块

   yield return xx;返回

 

 

IEnumerator 方法名a()

{

    代码块

  

   yield return new WaitForSenconds(float xx秒)

 协程的等待时间 

 

 

 

         

调用

StartCoroutine(方法名a())

 

[展开全文]

coroutines == 協程 (會和前一個執行序同時向下執行,不會等待)

IEnumerator == 有返回值的協程

 

StartCoroytine(要執行的method名稱())

[展开全文]

协程,

普通方法调用从上到下。

1.一起执行,不会等。同步执行,

2.可以暂停,

IEnumerator changeColor()

{

yield return null;

}

StartCoroutine("方法名");

StartCoroutine(changecolor());

[展开全文]

协程方法    Coroutine;

1:返回值:IEnumerator;

2:返回参数:yield return null; 

3:协程方法的调用StartCoroutine(method() );

如果调用是一个普通方法,那么会等这个普通方法执行完继续向下执行;

如果调用是一个协程方法,那么调用完协程方法后,不会等这个方法执行完就继续向下执行了;(方法和后面的语句同步执行);

 

[展开全文]

如果调用的是普通方法,会等普通方法执行完后向下执行。

调用的是协程方法,调用后就会继续运行。

[展开全文]
coroutine methods

public GameObject cube;

void start() {

StartCoroutine(changeColor());

}

IEnumerator changeColor(){

cube.GetComponent<MeshRenderer>().material.color = Color.blue;

yield return null;

}

 

 

[展开全文]

IEnumerator//协程

IEnumerator fun()

{

   XXXXXX;

yield return;

}

void Start()

{

  StartCoroutine( fun());

}

[展开全文]

普通方法:等普通方法执行完.

协程方法:不等协程方法执行完,就继续向下执行.

Coroutines

1.返回值是IEnumerator

2.返回参数的时候用yield return null/0

3,协程方法的调用,StartCoroutine(method())

 

 

 

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

public class API08Coroutines : MonoBehaviour
{
    public GameObject cube;
    // Start is called before the first frame update
    void Start()
    {
        print("haha1");
       StartCoroutine( ChangeColor());
        print("haha2");
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    IEnumerator ChangeColor() 
    {
        print("hahacolor1");
        cube.GetComponent<MeshRenderer>().material.color = Color.red;
        print("hahacolor2");
        yield return null;

    }
}

[展开全文]

协程  同主线一起进行的支线  和主线一起执行

StarCoroutine(方法());

IEnumerator  方法()

{

yield return null;

}

[展开全文]

1.创建游戏物体f的三种方法
new GameObject();括号里可以添加想要创建的物体类型例如
new GameObject("Cube");创建出一个正方体
GameObject.Instantiate();
实例化Prefabs或实例化游戏物体
GameObject.CreatePrimitive();
创建原始图形如:.GameObject.CreatePrimitive(PrimitiveType.Cube);
2.通过代码给游戏物体添加组件
 private GameObject object;
object.AddComponent<Rigidbody>();
通过代码给游戏物体j添加脚本
object.AddComponent<脚本名>();
3.GameObject游戏物体的常用类
GameObject.activeInHierarchy 物体是否处于激活状态(包括自身及子物体)
4.UnityEngine下Object的静态方法
Object.Destroy:
Destroy(gameobject,time);
Object.DontDestroyOnLoad:
DontDestroyOnLoad(transform.gameObject);(在进行场景之间转换时不会被销毁,会被带到下一个场景中)
Object.FindObjectOfType:
Object   a =FindObjectOfType(typeof(组件名))
Rigidbody  a=FindObjectOfType<Rigidbody>();
只返回第一个被检测到含有此组件的物体。不查找未激活的游戏物体
Object.FindObjectsOfType:
Object   a =FindObjectsOfType(typeof(组件名))
Rigidbody a=FindObjectsOfType<Rigidbody>();
将检测到的所有的含有此组件的物体都存在数组中。不查找未激活的游戏物体
5.查找方法
Find(比较耗费性能)
FindGameObjectsWithTag返回所有是次标签的物体返回数组
FindWithTag只返回第一个检测到的物体。
6.游戏物体间消息的发送和接收
GameObject.BroadcastMessage();包括其自身及其子物体
GameObject.SendMessage(); 不包括子物体
GameObject.SendMessageUpwards();包括其自身及其父物体
7.得到组件的各种方法函数

GetComponent;只会得到在游戏物体身上的第一个检测到的组件

GetComponent;会得到物体上所有的组件

GetComponentInChildren;会得到其自身及其子物体身上第一个检测到的相应的组件

GetComponentInParent;会得到其自身及其父物体身上第一个检测到的相应的组件

GetComponentsInChildren;会得到其自身及其子物体身上所有检测到的相应的组件

GetComponentsInParent;会得到其自身及其父物体身上所有检测到的相应的组件

8.Public Functions

Invoke;

Public void Invoke(string methodName,float time );可延时调用方法

CancelInvoke;取消所有调用的方法(仅适用于当前脚本,不影响其他脚本中相同方法的调用)

InvokeRepeating;重复调用方法

IsInvoking;判断方法是否正在被调用

协程:

1.返回值是IEnumerator

2.返回参数时使用yield return null/0。

3协程方法的调用:使用StartCoroutine(需要调用的协程方法的名字);

例如:

IEnumerator Method(){

内容;

yied return null;

}

 

[展开全文]