how-to-quickly-and-effectively-read-other-peoples-code
1. C#规范
1.1. 折叠代码
#region Name
....
#endregion
1.2 单例模式
public abstract class SingletonBase<T>: MonoBehavior {
public static T instance{get; protected set;}
}
这种写法,可以帮助在set或者get时做一些限定。
1.3. SerializeField
Unity3D中[SerializeField]特性的使用 可以在面板中看到私有化的变量。
2. Unity
2.1. Shader
Unity内置渲染管线,URP,SRP
- Unity渲染管线包含内置渲染管线和SRP,内置渲染管线是Unity默认的渲染管线,不可修改;
- SRP是可以用户自己控制渲染流程;
- URP和HDRP则相当于Unity提供的SRP模板。
2.2 白天黑夜切换
通过判断时间,通过LiftGammaGain四维变量的具体数值来切换白天黑夜。 实现方法,通过Vector4.lerp函数进行线性插值。 Unity文档:LiftGammaGain
2.3. Start、Awake
awake、start unity中awake,start,update之间的关系 awake:
- 在脚本被实例化的时候就会被调用(enable不会影响);
- 在脚本的生命周期中只调用一次;
- 在所有对象的Start之前调用,但是注意不同对象之间的awake顺序是不确定。
备注:脚本enable可以控制脚本的开启和关闭。
GameObject.Find("ObjectName").GetComponent<scriptName>().enabled = true;
start:
- 在对象被第一次enable之后,在Update之前调用的;
- 在脚本的生命周期只调用一次;
- Start可能不会被立刻调用,比如我们之前没有让其enable,当脚本被enable时,Start才会被调用。(enable会影响)
执行顺序: 场景中的对象都生成后才会调用Awake,Awake调用完才会调用Start,所有Start调用完才会开始Update。
2.4. LateUpdate()、FixedUpdate()、Update()
比如电脑环境(开发时)设置60帧(一秒刷新60个画面),手机只有30帧。
update: 每帧执行一次 -> 造成开发的时候在电脑中看画面很流畅,但是在手机中玩的时候并不顺畅的问题。
fixedUpdate: 每隔固定的一段时间执行一次 -> 无论是电脑还是手机,都可以有一样的刷新频率。 备注:修改 FxiedUpdate() 的执行间隔,可以从Edit > Settings > Time > Fixed Timestep 去做更改。
lateUpdate: 每帧执行一次。但是它会等待所有 Update() (不同物件的 Update())都执行完毕后再执行。 应用:用来进行画面的更新、或记录所有游戏物品更新完毕状态的任务。
2.5. 粒子系统
- Shape模块:可以通过设置Scale来决定粒子系统的作用范围。
- Trail模块:可以通过设置曲线来设置粒子的移动范围。
2.6. Listener
点击按钮,UI消失:OverlayUICanvas -> UI_Page_Title 通过Listener来实现:
canvasGroup = GetComponent<CanvasGroup>();
startBtn = transform.Find("Btn_Start").GetComponent<Button>();
startBtn.onClick.AddListener(OnStartBtnClicked);
EventCenter.AddListener(GameEvents.ShowTitle, ShowTitle);
|