1.实验的目的和要求

掌握脚本生命周期的概念,掌握MonoBehavior类,理解各个事件的含义、执行条件、执行过程,能够熟练利用各个事件实现相应的功能。

2.实验内容

编写相关代码,测试脚本生命周期的主要事件。

3.主要代码

脚本更新
Unity只支持单线程,但是可以通过C#来模拟多线程。
举例来说:现在需要每1秒就创建一个游戏对象,可以通过协程的概念,使用for循环来写。使用StartCoroutine()方法即可启用一个协程任务。在循环中,使用yield return 来告诉unity需要等待多久才执行下一个循环。

//每隔一秒新建一个cube

public class Script_04_04 : MonoBehaviour

{

// Start is called before the first frame update

void Start()

{

StartCoroutine(CreateCube());

}

IEnumerator CreateCube()

{

for(int i = 0; i < 10; i++)

{

GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = Vector3.one * i;

yield return new WaitForSeconds(1f);

}

}

}

停止协程任务
在协程任务启动的过程中,如果需要重新启动它,必须停掉之前的协程。使用StartCoroutine()返回这个协程对象,需要停止的时候使用StopCoroutine()。

//每隔一秒新建一个cube

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Script_04_04 : MonoBehaviour

{

IEnumerator CreateCube()

{

for(int i = 0; i < 10; i++)

{

GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = Vector3.one * i;

yield return new WaitForSeconds(1f);

}

}

private Coroutine m_Coroutine = null;

private void OnGUI()

{

if (GUILayout.Button("startcoroutine"))

{

if (m_Coroutine != null)

{

StopCoroutine(m_Coroutine);

}

m_Coroutine = StartCoroutine(CreateCube());

}

if (GUILayout.Button("stopcoroutine"))

{

if (m_Coroutine != null)

{

StopCoroutine(m_Coroutine);

}

}

}

}

使用OnGUI显示FPS
FPS的含义就是一秒钟Update被执行了多少次。所以只需要在Update()中获取每一秒所执行的次数,最终在OnG()方法中将FPS打印在平面左上角。

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Script_04_06 : MonoBehaviour

{

public float updateInterval = 0.5F;

private float accum = 0;

private int frames = 0;

private float timeleft;

private string stringFps;

void Start()

{

timeleft = updateInterval;

}

void Update()

{

timeleft -= Time.deltaTime;//deltaTime为运行一帧所需要的时间

accum += Time.timeScale / Time.deltaTime;//timeScale为运行速度

++frames;

if (timeleft <= 0.0)

{

float fps = accum / frames;

string format = System.String.Format("{0:F2} FPS", fps);

stringFps = format;

timeleft = updateInterval;

accum = 0.0f;

frames = 0;

}

}

private void OnGUI()

{

GUIStyle gUIStyle = GUIStyle.none;

gUIStyle.fontSize = 30;

gUIStyle.normal.textColor = Color.red;

gUIStyle.alignment = TextAnchor.UpperLeft;

Rect rt = new Rect(40, 0, 100, 100);

GUI.Label(rt, stringFps, gUIStyle);

}

}

4.实验结果

Unity3D动画游戏设计算法 --脚本生命周期相关推荐

  1. Unity3D动画游戏设计算法--序列化与反序列化

    1.实验的目的和要求 掌握序列化与反序列化的概念,掌握BinaryFormatter类,能够编写代码实现游戏对象的序列化与反序列化. 2.实验内容 在Unity脚本中,通过Serialize与Dese ...

  2. Unity3D动画游戏设计算法--查找游戏物体

    1.实验的目的和要求 掌握Unity脚本的主要内容,通过游戏物体索引方法,查找相关信息的游戏物体. 2.实验内容 (1)设定多个游戏物体的血量值,利用Object类的方法查找血量最少的游戏物体,标为红 ...

  3. Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的

    前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...

  4. Unity3D基础31:脚本生命周期

    前文:https://blog.csdn.net/Jaihk662/article/details/86751079(C#脚本) 一.脚本生命周期 脚本的生命周期,就是挂载到的游戏物体"从出 ...

  5. unity 脚本中 调用另一个脚本_Unity 2019.4 脚本生命周期

    脚本生命周期流程图 加载第一个场景 场景开始时将调用以下函数(为场景中的每个对象调用一次). Awake:始终在任何 Start 函数之前并在实例化预制件之后调用此函数.(如果游戏对象在启动期间处于非 ...

  6. Unity脚本生命周期与执行顺序

    目录 脚本生命周期 MonoBehavior生命周期图 脚本执行顺序 自定义执行顺序 @(文章目录) 在Unity中,脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码.必须绑定在游戏对象 ...

  7. Unity脚本(2) --- 脚本生命周期以及脚本的控制台调试

    1.什么是脚本生命周期? 首先什么是脚本 --- 脚本的本质其实就是类,而脚本生命周期其实就是脚本对应的那个类从开始工作到最后销毁这么一个周期 (或者说是Unity脚本从唤醒到销毁的过程) (消息,必 ...

  8. unity3d中脚本生命周期(MonoBehaviour lifecycle)

    自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必 ...

  9. 论网站按钮的设计艺术与生命周期

    一.饮水思源 "生命周期"一词基本上就是几个月前D2前端论坛的仅有的几个收获之一.老实讲,这次的D2收获很少,颇失望.最让我耿耿于怀的就是上午沙龙的那个主持人,每每听到关键处,就被 ...

最新文章

  1. 大话设计模式(四 业务的封装)
  2. Verilog中wire与reg类型的区别
  3. esxi 7.0 封装瑞昱网卡驱动_小科普 | 无线网卡怎么选?
  4. Java学习之向上、下转型
  5. 【亲测有效】装了双系统后在ubuntu下耳机没有声音的解决方法
  6. 如何充分利用好大数据的价值
  7. 19年北理考研计算机复试分数多少钱,2019年北京理工大学考研复试分数线已出现...
  8. 客户价值分析—RFM模型及变形
  9. Linux 命令执行流程
  10. ALV 行、列、单元格颜色设置
  11. C++视频教程资源链接合集
  12. BeyondCompare4破解最佳实践
  13. 丢失MSVCR120.dll
  14. 网康NGFW下一代防火墙远程命令执行漏洞复现
  15. excel如何用超链接直接打开文件
  16. 你真的了解牛顿第一定律吗
  17. Python-qqbot实现QQ群翻译机器人
  18. UE4 让材质的UV动起来
  19. 使用 Kubernetes 和 Istio 进行基于容器的全面服务监控
  20. @MapKey的使用

热门文章

  1. RBAC模型概述以及功能权限数据权限设计思路
  2. 一键安装docker
  3. 在线投稿审稿管理系统mysql_学术会议投稿审稿功能怎么用系统实现?
  4. 餐饮小程序给行业带来什么价值?
  5. maven项目如何生成war文件并部署到tomcat
  6. eclipse整合ssm运行初体验
  7. 计算机二级word文字处理参考样式怎么看,计算机二级Msoffice-文字处理答案(解题步骤)资料...
  8. 微信公众号如何上传视频
  9. 自动化测试工具Airtest的使用
  10. Android中接入微信客户端