Unity3D脚印2——从脚本开始
admin
2023-01-21 03:21:22
0
按照我之前的惯性思维,这时候应该抛出一个问题,是不是可以不通过界面,直接new一个脚本出来,呵呵(自嘲,这种想法比new一个Scene更不实际,虽然可以实现~,通过写文件在代码里面写一个脚本,然后动态加载进来)   比起new一个脚本,我觉得还是了解一下怎样写一个脚本吧   MonoBehaviour是所有脚本的基类,所有要挂载到GameObject之上的脚本,都需要继承这个类,js脚本自动继承这个类,C#需要显式地继承MonoBehaviour,MonoBehaviour提供了一系列函数给我们重写,这里记录一下最常用的一些函数   三个Update:   Update 在每一帧更新,和游戏逻辑相关的代码,对游戏对象进行旋转,平移的代码在这里实现   LateUpdate 在每一帧的Update调用完之后被调用   FixedUpdate 按照固定的时间间隔调用,不受帧率变化的影响,物理引擎相关的代码在这里实现,例如对对象施加力   Awake 在脚本实例被载入的时候调用   Start 在第一次Update之前调用   Reset 在对象被重置的时候调用   OnGUI 在渲染和处理GUI事件时被调用   OnDestroy 在对象被销毁的时候调用   其他一些OnXXX函数在此不作介绍了,后面自然会用到的   这个网页简单介绍了MonoBehaviour这个类的所有函数,可重写方法,成员变量 http://game.ceeger.com/Script/MonoBehaviour/MonoBehaviour.html   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两个函数用于停止协同函数

 

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...