{U3D}代码效率优化




  • 在使用数组或ArrayList对象时应当注意

length=myArray.Length;

for(int i=0;i<length;i++)  {  }

  • 避免

for(int i=0;i<myArray.Length;i++)  {}

  • 如果没有必要每帧都处理,则可以每隔几帧处理一次

void Update(){ if(Time.frameCount%6==0) { DoSomething(); }}

  • 定时重复调用可以使用InvokeRepeating函数实现,比如,启动0.5秒后每隔1秒执行一次 DoSomeThing 函数:

void Start() {InvokeRepeating(“DoSomeThing”, 0.5f, 1.0f);  }

  • 少使用临时变量,特别是在Update OnGUI等实时调用的函数中

void Update()  { Vector3 pos;   pos=transform.position;  }

  • 改为

private Vector3 pos;

void Update()  {pos=transform.position;  }

  • 主动进行垃圾回收

void Update()  { if(Time.frameCount%50==0)  {System.GC.Collection();  }}


  • 优化数学运算,尽量避免使用float,而使用int,特别是在手机游戏中,尽量少用复杂的数学函数,比如sin,cos等函数。改除法/为乘法,例如:使用x*0.5f而不是 x/2.0f 。
  • 压缩 Mesh
  • 运行时尽量减少 Tris 和 Draw Calls
  • 避免大量使用 Unity 自带的 Sphere 等内建 Mesh
  • 将GameObject上不必要的脚本disable掉
  • 删除空的Update方法
  • 引用一个游戏对象的最合乎逻辑的组件
  • 协同程序来代替不必每帧都执行的方法
  • 不要在Update或FixedUpdate中使用搜索方法
  • 不要使用SendMessage之类的方法
  • 使用javascript或Boo语言时,你最好确定变量的类型,不要使用动态类型

 

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
等待编辑中
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论