Unity3D动画游戏设计算法 --脚本生命周期
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动画游戏设计算法 --脚本生命周期相关推荐
- Unity3D动画游戏设计算法--序列化与反序列化
1.实验的目的和要求 掌握序列化与反序列化的概念,掌握BinaryFormatter类,能够编写代码实现游戏对象的序列化与反序列化. 2.实验内容 在Unity脚本中,通过Serialize与Dese ...
- Unity3D动画游戏设计算法--查找游戏物体
1.实验的目的和要求 掌握Unity脚本的主要内容,通过游戏物体索引方法,查找相关信息的游戏物体. 2.实验内容 (1)设定多个游戏物体的血量值,利用Object类的方法查找血量最少的游戏物体,标为红 ...
- Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的
前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...
- Unity3D基础31:脚本生命周期
前文:https://blog.csdn.net/Jaihk662/article/details/86751079(C#脚本) 一.脚本生命周期 脚本的生命周期,就是挂载到的游戏物体"从出 ...
- unity 脚本中 调用另一个脚本_Unity 2019.4 脚本生命周期
脚本生命周期流程图 加载第一个场景 场景开始时将调用以下函数(为场景中的每个对象调用一次). Awake:始终在任何 Start 函数之前并在实例化预制件之后调用此函数.(如果游戏对象在启动期间处于非 ...
- Unity脚本生命周期与执行顺序
目录 脚本生命周期 MonoBehavior生命周期图 脚本执行顺序 自定义执行顺序 @(文章目录) 在Unity中,脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码.必须绑定在游戏对象 ...
- Unity脚本(2) --- 脚本生命周期以及脚本的控制台调试
1.什么是脚本生命周期? 首先什么是脚本 --- 脚本的本质其实就是类,而脚本生命周期其实就是脚本对应的那个类从开始工作到最后销毁这么一个周期 (或者说是Unity脚本从唤醒到销毁的过程) (消息,必 ...
- unity3d中脚本生命周期(MonoBehaviour lifecycle)
自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必 ...
- 论网站按钮的设计艺术与生命周期
一.饮水思源 "生命周期"一词基本上就是几个月前D2前端论坛的仅有的几个收获之一.老实讲,这次的D2收获很少,颇失望.最让我耿耿于怀的就是上午沙龙的那个主持人,每每听到关键处,就被 ...
最新文章
- 大话设计模式(四 业务的封装)
- Verilog中wire与reg类型的区别
- esxi 7.0 封装瑞昱网卡驱动_小科普 | 无线网卡怎么选?
- Java学习之向上、下转型
- 【亲测有效】装了双系统后在ubuntu下耳机没有声音的解决方法
- 如何充分利用好大数据的价值
- 19年北理考研计算机复试分数多少钱,2019年北京理工大学考研复试分数线已出现...
- 客户价值分析—RFM模型及变形
- Linux 命令执行流程
- ALV 行、列、单元格颜色设置
- C++视频教程资源链接合集
- BeyondCompare4破解最佳实践
- 丢失MSVCR120.dll
- 网康NGFW下一代防火墙远程命令执行漏洞复现
- excel如何用超链接直接打开文件
- 你真的了解牛顿第一定律吗
- Python-qqbot实现QQ群翻译机器人
- UE4 让材质的UV动起来
- 使用 Kubernetes 和 Istio 进行基于容器的全面服务监控
- @MapKey的使用