Unity基本语法
2013-10-23 17:42
281 查看
Update()/FixedUpdate()/LateUpdate
Update()每帧调用;FixedUpdate() 以指定频率被调用。
可以在 Edit -> project settings -> Time -> Fixed Timestep 中设定该频率。FixedUpdate() 可以用来执行不受帧率影响的处理。
LateUpdate()是在所有Update函数调用后被调用。
这可用于调整脚本执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。LateUpdate是晚于所有Update执行的。例如:游戏中有2个脚步,脚步1含有Update和LateUpdate,脚步2含有Update,那么当游戏执行时,每一帧都是把2个脚步中的Update执行完后才执行LateUpdate 。虽然是在同一帧中执行的,但是Update会先执行,LateUpdate会晚执行。
现在假设有2个不同的脚本同时在Update中控制一个物体,那么当其中一个脚本改变物体方位、旋转或者其他参数时,另一个脚步也在改变这些东西,那么这个物体的方位、旋转就会出现一定的反复。如果还有个物体在Update中跟随这个物体移动、旋转的话,那跟随的物体就会出现抖动。 如果是在LateUpdate中跟随的话就会只跟随所有Update执行完后的最后位置、旋转,这样就防止了抖动。
Mathf.Clamp 限制
static function Clamp (value : float, min : float, max : float) : float限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value
StartCoroutine
StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程。在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的。这个时候可以使用协程来完成。使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况。下面通过一个简单的例子来说明使用协程的好处:[csharp] view
plaincopy
float result1;
void GetResult1()
{
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 100000; j++)
{
result1 += (i + j);
}
}
}
这个方法就是直接计算结果,由于运算量比较大,所以界面会卡死,这样就可以体现出用协程的好处了。
[csharp] view
plaincopy
float result;
IEnumerator GetResult()
{
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 100000; j++)
{
result += (i + j);
}
if(i%100==0)
yield return 1;
}
}
这个方法是协程的写法,在C#中协程要定义为IEnumerator 这个类型,javascript中不需要。
yield return 1;这句话表示返回1帧的结果。在i为100的整数时,就返回一次结果,这样可以避免大量的计算卡死。
[csharp] view
plaincopy
void OnGUI()
{
GUI.Label(new Rect(0, 0, 200, 50), "测试1:" + result);
if (GUI.Button(new Rect(0, 100, 100, 50), "开启协程"))
{
StartCoroutine(GetResult());
}
GUI.Label(new Rect(200, 0, 200, 50), "测试2:" + result1);
if (GUI.Button(new Rect(200, 100, 100, 50), "无协程测试"))
{
GetResult1();
}
}
上面的代码表示在GUI中定义2个label和按钮,一个按钮启动协程计算,另一个直接计算结果。由于2个方法都是计算同样的结果,计算量比较大,所以直接计算出现了暂时的卡死情况。
这个方法是协程的写法,在C#中协程要定义为IEnumerator 这个类型,javascript中不需要。
yield return 1;这句话表示返回1帧的结果。在i为100的整数时,就返回一次结果,这样可以避免大量的计算卡死。
使用IEnumerator 这个类型时,必须用yield return来返回结果,参数为数字时表示为帧数。
如yield return 1 表示每一帧返回一次结果。
相关文章推荐
- Unity Shader基础【二】- HLSL基本语法
- unity开发 --------- c# 基本语法 008
- unity开发 --------- c# 基本语法 002
- unity开发 --------- c# 基本语法 004
- unity开发 --------- c# 基本语法
- unity开发 --------- c# 基本语法 007
- 关于Unity中Cg的基本语法和使用
- unity开发 --------- c# 基本语法 005
- unity开发 --------- c# 基本语法 003
- Unity 3DC#语法基本知识点
- unity开发 --------- c# 基本语法 006
- unity开发 --------- c# 基本语法 001
- 动态sql语句基本语法
- sql(SqlServer)编程基本语法
- AngularJS之基础-3 控制器(基本语法)、模块(使用模块注册控制器)
- hive 基本语法
- Unity Shader 之一 语法基础
- Unity Shader基本介绍
- sybase 基本语法,存储过程,触发器
- JSP的4种基本语法