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

Coroutine协程的开启和关闭

法一:

private IEnumerator ie;
	void Update () {
		if (Input.GetKeyDown(KeyCode.Space))
		{
			ie = Fade();
			StartCoroutine(ie);//实现白到红的渐变
		}
		if (Input.GetKeyDown(KeyCode.S))
		{
			StopCoroutine(ie);//跟上面的调用方式一致,才能关闭(这里都用ie来开启和关闭)
		}
		
	}
//下面是Fade()的代码,未写

法二:

void Update () {
		if (Input.GetKeyDown(KeyCode.Space))
		{
			
			StartCoroutine("Fade");
		}
		if (Input.GetKeyDown(KeyCode.S))
		{
			
			StopCoroutine("Fade");
		}
		
	}

 

[展开全文]

关闭协程的时候要和开启时相一致

()内如果是方法名,关闭时也要用方法名

如果是ienumerator,关闭时也要用ienumerator

两个必须相互对应

[展开全文]

协程

IEnumerator Fade

{

 

}

 

void Update()

   if(input.GetkeyDown(keycode.Space))

  {

       //单独调用获取Ienumerator

       ie = Fade();

       //开启携程

       StartCoroutine(ie)

  }

   if(input.GetkeyDown(KeyCode.S))

   {

        //StopCoroutine(协程 的Ienumerator)  停止指定协程

        //StopAllCoroutine  

       StopCoroutine(ie)

   }

}

 

[展开全文]

协程开启和关闭

StartCoroutine

StopCoroutine.暂停不住。

StopAllCoroutine

开启的时候使用方法名,关闭的时候就要使用方法名,

开启的时候使用方法名(),关闭的时候也一样。

成对。

方法1.定义一个ie,接受一下协程方法。

开的时候StartCoroutine(ie);可以传多个参数

关的时候StopCoroutine(ie);

方法2.

StartCoroutine("Function");只能传一个参数

StopCoroutine("Function");

[展开全文]

 private IEnumerator ie;

IEnumerator Fabe()

 ie = Fabe(); 

StartCoroutine(ie); :开启协程;

StopCoroutine(ie); :关闭协程;

[展开全文]

StartCoroutine

StopAllCoroutine

StopCoroutine

[展开全文]

StopCoroutine()与StartCoroutine()的内容必须相同.

private IEnumerator ie;
    void Update()

    {
        
        if (Input.GetKeyDown(KeyCode.Space))
        {ie = Fade();
            StartCoroutine(ie);
           
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            StopCoroutine(ie);
        }

    }
    IEnumerator Fade()
    {
        while (true)
        {

        
            // cube.GetComponent<MeshRenderer>().material.color = new Color(i, i, i,i);
            Color color = cube.GetComponent<MeshRenderer>().material.color;
            Color newColor = Color.Lerp(color,Color.red,0.02f);
            cube.GetComponent<MeshRenderer>().material.color = newColor;

            yield return new WaitForSeconds(0.02f);
            print(1);
            if (Mathf.Abs(Color.red.g-newColor.g)<=0.01f)
            {
                break;
            }
        }
    }

[展开全文]

StopCoroutine(暂停携程的IEnumertor)

private IEnumerator ie;

StartCoroutine(ie);

StopCoroutine(ie);

StopAllCoroutines暂停所有的携程;

[展开全文]

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(需要调用的协程方法的名字);

4暂停yield return new WaitForSeconds(需要暂停的时间);

例如:

IEnumerator Method(){

内容;

yied return null;

}

StartCoroutine();开启协程

StopCoroutine();关闭协程

StopAllCoroutine();

 

[展开全文]