函数的基本应用

函数的基本理解

1.实例控制cube的移动

public Transform cube;

void Start()


void Update()

cube.Translate(Vector3.forward);

注:(1秒运行的是50帧)该方法让cube直接向前移动,但是cube运行很快,瞬间就会消失在视野中,因为1秒运行50帧,所以运行单位是1秒运行50m,所以按照常理来分析,改为1秒运行1m,可以使物体平滑的运行。

修改后①:
void Update(){
cube.Translate(Vector3.forward/50f);
}

注:修改以后,运行会平滑。
①但是这种处理方式不是很好,因为如果物体运行每秒的次数变了,那每次都需
要从Update函数中修改,者会变得很繁琐,所以从视频中,我学到了要会灵活应用C#的语言,达到方便,简洁的模式,也就是说效果最大化。
②Update函数,帧数是不稳定的,应该要让它随着时间间隔进行变化,到达这一帧运行多长时间,就运行多远的效果,这样更加符合物理规律。

修改后②:
void Update(){
cube.Translate(Vector3.forward*Time.deltaTime);
}

注:函数修改以后,速度*时间,得到当前帧所要运行的距离,然后通过移动,就可以了。但是这样的做法和之前的方法效果是一样的。

修改后③:
void Update(){
cube.Translate(Vector3.forwardTime.deltaTime3);
Time.timeScale = 1;
}

注:然后在进行测试,后面*3的意思就是,原来为1秒运动1米,现在就成了1秒运动3米,当后面加上Time.timeScale = 1;运行是正常的,可是当Time.timeScale = 0;运行时,会发现物体不会在动了,因为每一次得到的Time.deltaTime都会乘以Time.timeScale,所以Time.timeScale可以控制运动的停止,或者对物体进行统一加速,还是减速。当Time.timeScale = 3f;,物体会加速前进。

测试占用的性能:

利用加法和乘法通过比较来测试占用性能

void Method1()
{
 int i = 1+2;
}
void Method2()
{
 int j = 1*2;
}

注:因为计算机执行很快,所以基数太小,根本看不出来性能的变化,此时以小化大,无限放大算法性能的时候,可能才会看到变化,所以现在将它转化为运行10W词,来观测性能变化。

public int runCount = 10000;
void Start(){
 float time1 = Time.realtimeSinceStartup;
 for(int i = 0;i < runCount;i++)
 {
  Method1();
 }
 float time2 = Time.realtimeSinceStartup;
 Debug.Log(time2 -time1);
 float time3 = Time.realtimeSinceStartup;
 for(int i = 0;i < runCount;i++)
 {
  Method2();
 }
 float time4 = Time.realtimeSinceStartup;
 Debug.Log(time4 -time3);
}
void Method1()
{
 int i = 1+2;
}
void Method2()
{
 int j = 1*2;
}

注:Start函数中所执行的次数是1次,经过测试,表明乘法性能比加法性能要差一点,所以Time.realtimeSinceStartup可以用来做性能测试。

在测试中,再加入一次对照组
public int runCount = 10000;

 void Start(){ 
  float time00 = Time.realtimeSinceStartup;
 for(int i = 0;i < runCount;i++)  {  
	 Method0(); 
	 }  
float time0 = Time.realtimeSinceStartup;
 Debug.Log(time0 -time00);  
float time1 = Time.realtimeSinceStartup;  
 for(int i = 0;i < runCount;i++) 
 {  
  Method1(); 
	 }  
 
 float time2 = Time.realtimeSinceStartup; 
  Debug.Log(time2 -time1);
  
  float time3 = Time.realtimeSinceStartup; 
  for(int i = 0;i < runCount;i++)  {  
   Method2(); 
    } 
   float time4 = Time.realtimeSinceStartup; 
    Debug.Log(time4 -time3); } 
    void Method0() { 
}
void Method1()
{
 int i = 1+2;
}
void Method2()
{
 int j = 1*2;
}

注:正常情况下,三种运行测试运算,空1,加法2,乘法3.但是这种只是通常情况下会发生,有时候也会发生另外的情况,也就是排序的问题。

你可能感兴趣的:(unity3d)