• Unity3D脚印2——从脚本开始 深圳


    按照我之前的惯性思维,这时候应该抛出一个问题,是不是可以不通过界面,直接new一个脚本出来,呵呵(自嘲,这种想法比new一个Scene更不实际,虽然可以实现~,通过写文件在代码里面写一个脚本,然后动态加载进来)
     
    比起new一个脚本,我觉得还是了解一下怎样写一个脚本吧
     
    MonoBehaviour是所有脚本的基类,所有要挂载到GameObject之上的脚本,都需要继承这个类,js脚本自动继承这个类,C#需要显式地继承MonoBehaviour,MonoBehaviour提供了一系列函数给我们重写,这里记录一下最常用的一些函数
     
    三个Update:
     
    Update 在每一帧更新,和游戏逻辑相关的代码,对游戏对象进行旋转,平移的代码在这里实现
     
    LateUpdate 在每一帧的Update调用完之后被调用
     
    FixedUpdate 按照固定的时间间隔调用,不受帧率变化的影响,物理引擎相关的代码在这里实现,例如对对象施加力
     
    Awake 在脚本实例被载入的时候调用
     
    Start 在第一次Update之前调用
     
    Reset 在对象被重置的时候调用
     
    OnGUI 在渲染和处理GUI事件时被调用
     
    OnDestroy 在对象被销毁的时候调用
     
    其他一些OnXXX函数在此不作介绍了,后面自然会用到的
     
    这个网页简单介绍了MonoBehaviour这个类的所有函数,可重写方法,成员变量
     
    MonoBehaviour还有其他一些有意思的东西:
     
    useGUILayout,当你不使用GUI.Window和GUILayout的时候,果断设置为false,这个玩意儿默认是开启的,设置为false最好在Awake回调里面进行设置
     
    Invoke系列方法:
     
    Invoke系列方法相当于计时器,在指定的时间点上调用指定的函数
     
    void Invoke(string methodName, float time);        //在time秒后调用methodName
    void Invoke(string methodName, float time, float repeatRate);     //在time秒后开始以repeatRate秒为间隔重复调用方法
    void IsInvoking(string methodName);        //判断某个方法是否在等待调用
    void CancelInvoke();        //取消所有的计时器调用
    void CancelInvoke(string methodName)        //取消某个计时器调用
     
    如果我想Invoke一个带参数的方法,咋整呢?
     
    Coroutine系列方法:
     
    协同方法相当于多线程吧,可以让程序同时做多件事情,通过StartCoroutine传入一个函数,将异步执行这个函数,StartCoroutine有三种用法,对应几种不同类型的参数。需要注意的一个东西是yield,这是一个特殊的返回类型,它确保函数从yield语句的下一行继续执行。
     
    yield是一种特殊的return,就像c++里面的sleep,短暂的sleep可以交出线程的时间片,让其他线程先执行,而yield会返回到父类继续执行,yield后面可以返回一个null,也可以返回一个特殊的函数,当函数成立的时候,才执行接下来的语句(函数包括WaitForSeconds,WaitForFixedUpdate,Coroutine,StartCoroutine这四个继承于YieldInstruction的指令)
     
    yield return null;        //让出时间片,让父进程先执行
     
    yield return new WaitForSeconds(1);            //在程序执行到1秒时才执行接下来的代码
     
    yield return new WaitForFixedUpdate();        //在FixedUpdate调用之后才执行接下来的代码
     
    yield return new WaitForEndOfFrame();        //在这一帧结束之后才执行接下来的代码
     
    yield return new StartCoroutine("xxx");        //在xxx协同执行完之后才执行接下来的代码
     
    StartCoroutine的三种调用方法:
     
    StartCoroutine("Coroutine0", 1);
    StartCoroutine("Coroutine1");
    StartCoroutine(Coroutine2());
     
    //带一个object参数,返回值无视
    int Coroutine0(int i)
    {
    print(i);
    return i;
    }
     
    //不带参数
    void Coroutine1()
    {
    print("Coroutine test");
    }
     
    //调用yield返回IEnumerator类型的函数,可带任意参数
    IEnumerator Coroutine2()
    {
    yield return new WaitForSeconds(2);
    print("WaitForSeconds" + Time.time);
    }
     
    另外,有StopCoroutine和StopAllCoroutines两个函数用于停止协同函数
     
     
  • 相关阅读:
    mysql中的乱码总结之mysql5中四个设置字符集的系统变量
    在Flash中添加“设为首页”“加为收藏”
    解决Flash影片中的图片抖动锯齿
    Mysql时间格式转换
    PHP 判断常量,变量和函数是否存在
    电子商务专业课内容及就业方向和情况
    商业化与非商业化
    KMP算法与一个经典概率问题
    KMP算法
    libevent 在window环境编译
  • 原文地址:https://www.cnblogs.com/ybgame/p/2812345.html
Copyright © 2020-2023  润新知