定时重复处理,比如, 启动0.5秒后每隔1秒执行一次 DoSomeThing 函数:
1.用InvokeRepeating 函数实现
void Start() { InvokeRepeating("DoSomeThing", 0.5, 1.0); }
CancelInvoke("你调用的方法"); 停止InvokeRepeating
void Start() { StartCoroutine("Repeating");开始调用 StopCoroutine("Repeating");停止调用 } IEnumerator Repeating() { yield return new WaitForSeconds(0.5f); while (true) { yield return new WaitForSeconds(1f); DoSomeThing(); } }
尽量避免每帧处理,可以每隔几帧处理一次
比如:
void Update() { DoSomeThing(); }
可改为每5帧处理一次:
void Update() { if(Time.frameCount % 5 == 0) { DoSomeThing(); } }
主动回收垃圾
给某个 GameObject 绑上以下的代码:
void Update() { if(Time.frameCount % 50 == 0) { System.GC.Collect(); } }
不要使用SendMessage之类的方法,他比直接调用方法慢了100倍,你可以直接调用或通过C#的委托来实现。
关于渲染队列和Batch的非官方经验总结是,一帧的渲染队列的生成,依次决定于每个渲染物体的:
Shader的RenderType tag,
Renderer.SortingLayerID,
Renderer.SortingOrder,
Material.renderQueue(默认值为Shader里的"Queue"),
Transform.z(ViewSpace)(默认为按z值从前到后,但当Queue是“Transparent”的时候,按z值从后到前)。
这个渲染队列决定了之后(可能有dirty flag的机制?)渲染器再依次遍历这个渲染队列,“同一种”材质的渲染物体合到一个Batch里。
Unity渲染路径(Rendering Path)种类
概述
开发者可以在Unity工程的PlayerSettings设置对渲染路径进行3选1:
Deferred Lighting,延迟光照路径。3者中最高质量地还原光照阴影。光照性能只与最终像素数目有关,光源数量再多都不会影响性能。
Forward Rendering,顺序渲染路径。能发挥出Shader全部特性的渲染路径,当然也就支持像素级光照。最常用、功能最自由,性能与光源数目*受光照物体数目有关,具体性能视乎其具体使用到的Shader的复杂度。
Vertex Lit,顶点光照路径。顶点级光照。性能最高、兼容性最强、支持特性最少、品质最差。
unity 点击2D物体
1.给物体添加对应的2D碰撞体,例如Box Collider 2D;
2.Update检测鼠标是否点下;
3.如果鼠标点下,创建一条射线,通过Physics2D.Raycast获取点击时鼠标处的对象;
从游戏开始到当前帧经历的时间 Time.realtimeSinceStartup;
从游戏开始到当前帧经历的帧总数 Time.frameCount;
计算FPS:
得到当前帧鼠标的位移量:Input.GetAxis()
对象跟随鼠标运动:
Vector3 wp = Camera.main.WorldToScreenPoint(transform.position); Vector3 sp = Input.mousePosition; sp.z = wp.z; if (Input.GetMouseButton(0)) { transform.position = Camera.main.ScreenToWorldPoint(sp); }