关闭协程的时候要和开启时相一致
()内如果是方法名,关闭时也要用方法名
如果是ienumerator,关闭时也要用ienumerator
两个必须相互对应
关闭协程的时候要和开启时相一致
()内如果是方法名,关闭时也要用方法名
如果是ienumerator,关闭时也要用ienumerator
两个必须相互对应
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");
}
}
协程开启和关闭
StartCoroutine
StopCoroutine.暂停不住。
StopAllCoroutine
开启的时候使用方法名,关闭的时候就要使用方法名,
开启的时候使用方法名(),关闭的时候也一样。
成对。
方法1.定义一个ie,接受一下协程方法。
开的时候StartCoroutine(ie);可以传多个参数
关的时候StopCoroutine(ie);
方法2.
StartCoroutine("Function");只能传一个参数
StopCoroutine("Function");
StopCoroutine(暂停携程的IEnumertor)
private IEnumerator ie;
StartCoroutine(ie);
StopCoroutine(ie);
StopAllCoroutines暂停所有的携程;
StartCoroutine
StopAllCoroutine
StopCoroutine
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();
private IEnumerator ie;
IEnumerator Fabe()
ie = Fabe();
StartCoroutine(ie); :开启协程;
StopCoroutine(ie); :关闭协程;
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;
}
}
}
协程
IEnumerator Fade
{
}
void Update()
{
if(input.GetkeyDown(keycode.Space))
{
//单独调用获取Ienumerator
ie = Fade();
//开启携程
StartCoroutine(ie)
}
if(input.GetkeyDown(KeyCode.S))
{
//StopCoroutine(协程 的Ienumerator) 停止指定协程
//StopAllCoroutine
StopCoroutine(ie)
}
}