Unity 流程控制

异步函数:调用 (Invoke)
在一个方法执行时调用另一个方法。
而被调用的方法或者其中的某些语句不是立刻执行,而是过一段时间后才执行。
MonoBehavior 提供了两种异步方法:
调用:(Invoke)
协程:(协同 ,协同程序,Coroutine)
Invoke 代码测试:
public class InvokeDemo : MonoBehaviour {
    void Start () {
        Invoke("Show",2f); //游戏运行2s后调用一次Show方法
        InvokeRepeating("Show", 3f, 2f); //游戏运行3s后调用第一次,以后每隔2s调用一次
        Debug.Log(IsInvoking("Show")); //此时打印true 检测此MonoBehaviour是否有调用在等候
        CancelInvoke("Show"); //停止此脚本上的Invoke,没有参数就是清除所有的Invoke,有参数清除指定参数,执行后上面两种方法都会停止。
        Debug.Log(IsInvoking("Show")); //此时为false,表示上面的停止方法起作用了
    } 
    void Show()
    {
        //创建了一个标准立方体
    GameObject.CreatePrimitive(PrimitiveType.Cube);
    }
}

注:Invoke是不能接受有参数的方法的;

Invoke是受Time.timeScale的影响,所以当 Time.timeScale = 0;的时候Invoke是无效的。因为它根本调用不到,,,无论Invoke可所对应的物体或者组件状态改为未激活(active = false;enable = false;),也无法停止Invoke。除非它所依附的gameObject被销毁(Destroy)。

协程(coroutine)

主程序运行的同时,开启另一段逻辑处理,来协同当前的程序一同执行处理,(协程并不是线程)

Unity中的线程:

所需要的函数类型需要一个返回的迭代器(IEnumerator)需要函数中有挂起yield return

一个协同程序在执行过程中,可以在任意位置使用yield return的返回值控制何时恢复协同向下执行

yield 是一种特殊类型的return(返回)语句,他可以确保函数下一次被执行时,不是从头开始,而是从yield 语句处开始。

public class Coroutine : MonoBehaviour {

    void Start () {
        StartCoroutine("Show"); //使用字符串方式,开启协程
        StartCoroutine("Show", 5); //第二个参数是Show()方法的参数 最多可传一个参数
        StartCoroutine(Show()); //使用IEnumerator类型参数 进行协程调用
        StartCoroutine(Show(10,2));//此方法可以传无限参数
    }
    // Update is called once per frame
    void Update () {
    StartCoroutine("Show");
    StopCoroutine("Show"); //遇到yield return就不再执行 只能停止字符串传参得函数
    StopCoroutine("Show"); //遇到yield return就不再执行
    //StopCoroutine(Show()); //目前测试此方法无效
    StopAllCoroutines(); //此方法可以停止两种协程
    }
    IEnumerator Show()
    {
        print("befor");
        yield return new WaitForSeconds(2f); //2s后继续执行协程
        print("after");
        yield return new WaitForSeconds(1f);//1s后继续执行协程
        print("final");
    }
    IEnumerator Show(int i)
    {
        print("befor "+ i);
        yield return null;
    }
    IEnumerator Show(int i ,int j)
    {
        print(j + i);
        yield return null;
    }
}
对比:
Invoke 是在开启的时候给一个时间告诉几秒后调用,而coroutine是直接调用方法中去处理等待时间,Coroutine在处理上时间更灵活
Invoke将物体激活关闭们不会停止调用,Coroutine将物体激活关闭,将不能调用
Invoke不支持传参数 Coroutine支持
 
SendMessage 发送消息
GameObject.SendmessageUpwards // 向上发送消息 向其物体的所有父级及本身
GameObject.BroadcastMessage // 广播消息,,向其物体的所有子级及本身发消息
GameObject.SentMessage //发送消息 ,
SendMessageOptions //发送消息选项
SendMessage是一个非常强大的消息推送机制
 
目的为: 只要调用了此方法,同时持有某个类的引用.则可以向这个类本身,或者其子类,或其父类传递消息,而达到执行指定的某个函数方法
这个过程非常方便的实现了某个引用,从而大大简化了开发过程中的复杂程度
GameObject.SendMessage(string methodName)会搜索这个GameObject上所有的Component中所有叫做methodName的方法,并调用这些个方法
三种方法使用方式完全一样,只是使用用途,或者说使用对象有所不同
使用的方法利用反射的机制来检索所有游戏对象身上是否存在发送消息的目标,所以很占用资源,空间 开发中并不常用,,,方法虽然很强大,但执行效率并不高
注:此函数是跨语言的,例如JavaScript可以调用C#中的函数,,还有就是目标本身所有同名方法都会被执行一次(即如果Demo1,Demo2中有同名函数,就各执行一次)
 
### 回答1: Android Unity车门控制是指使用安卓操作系统和Unity游戏引擎来实现对车辆车门的控制。 首先,我们需要在Unity中创建一个虚拟场景来模拟车辆的环境。可以在场景中添加一个车辆模型和车门的可视化对象。然后,在Unity中编写脚本来控制车门的开启和关闭。可以使用Unity的C#脚本来实现这一功能。 在安卓平台上,我们需要在Unity中编译并导出一个安卓应用程序。可以使用Unity的内置工具来完成这个过程。导出的应用程序可以安装在安卓设备上。 在安卓设备上,我们可以使用安卓的触摸屏或者虚拟按键来模拟车门的开关。可以编写一个安卓应用程序的代码来实现与Unity交互的功能。 在安卓应用程序中,我们可以响应用户的输入事件,比如点击按钮或者滑动触摸屏,来控制车门的开关。当用户操作安卓设备时,可以通过与Unity通信的方式来告知Unity应用程序用户的操作。 在Unity中,我们可以根据安卓应用程序传递的消息来控制车门的状态。根据用户的操作,我们可以通过改变车门的模型的状态、角度或者运动来模拟车门的开关。 总的来说,Android Unity车门控制需要在Unity中创建虚拟场景和编写C#脚本来实现车门的控制功能。然后,在安卓设备上安装导出的应用程序,并通过与Unity通信的方式来实现与用户的交互。通过这种方式,我们可以在安卓设备上实现对虚拟车辆的车门控制。 ### 回答2: Android Unity车门控制是指使用Android系统和Unity游戏引擎来实现对汽车车门进行控制的一种技术。通过该技术,用户可以使用手机或其他Android设备来远程控制汽车的车门开闭。 实现这一功能的关键是将Android设备与汽车进行连接和通信。可以通过建立蓝牙、Wi-Fi或其他无线通信方式来实现设备与汽车的连接。一旦连接建立,就可以使用Unity游戏引擎来编写相应的代码逻辑,实现车门控制功能。 在Unity中,通过编写脚本来处理Android设备发送的指令并将其转化为相应的车门控制操作。可以根据具体需求,编写不同的脚本来实现车门的开、闭、上锁、解锁等功能。通过使用Unity开发工具,可以直观地为这些功能编写相应的代码逻辑,并进行测试和调试。 另外,为了提高用户体验,可以在Android设备上开发一个简易的用户界面,通过该界面可以实现车门控制。用户可以通过点击界面上的按钮来发送指令,同时可以实时获得车门的状态反馈。 总之,Android Unity车门控制是一种基于Android系统和Unity游戏引擎的汽车智能化控制技术。通过利用这种技术,用户可以方便远程控制汽车的车门开闭,提高了汽车的便利性和智能化程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈言必行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值