2019/03/16
1.控制游戏各功能初始化顺序的方式:
(1)让各个类继承MonoBehaviour,利用代码控制各功能初始化的顺序(只在GameRoot中Start(),其他类中很少用到Start()、
Awake()等);
(2)利用Unity中Edit->Project Settings->Script Execution Order 控制脚本执行的顺序;
2.加载游戏场景通常使用异步加载,因为场景文件比较大,需要显示一个进度条,所以不适用Resource.Node这样的同步加载方式。
3.当加载一个新场景,发生场景切换时,前一个场景会被销毁,但有些场景不想让其被销毁(需要让这个场景以及它的子物体一直在场景中),如GameRoot(游戏根节点),此时,需要在GameRoot代码Start()方法中加入
DontDestroyOnLoad(this);
来保证其不会被销毁。
4.RectTransform的position、localPosition、anchoredPosition、anchoredPosition3D属性:
(1)position:代表在世界空间的绝对位置;
(2)localPosition:代表相对于父级物体的相对位置;
(3)anchoredPosition和anchoredPosition3D:代表相对于自身的Anchor位置(这两个都可以认为是以像素为单位)。
5.RectTransform的sizeDelta属性
sizeDelta是offsetMax-offsetMin的结果。在锚点全部重合的情况下,它的值就是面板上的(Width,Height),在锚点完全不重合的情况下,它是相对于父矩形的尺寸。
Image.GetComponent<RectTransform>().sizeDelta.x;
Image.GetComponent<RectTransform>().sizeDelta.y;
6.C# 定义一个Action,它是一个委托的命名封装???
7.λ表达式???
using System;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ResSvc : MonoBehaviour
{
public static ResSvc Instance = null; //单例
public void InitSvc() {
Instance = this;
Debug.Log("Init ResSvc...");
}
private Action prgCB = null;
public void AsyncLoadScene(string sceneName) {
AsyncOperation sceneAsync = SceneManager.LoadSceneAsync(sceneName);
prgCB = () => {
float val = sceneAsync.progress;
GameRoot.Instance.loadingWnd.SetProgress(val);
if (val == 1) {
prgCB = null;
sceneAsync = null;
GameRoot.Instance.loadingWnd.gameObject.SetActive(false);
}
};
}
private void Update() {
if(prgCB != null) {
prgCB();
}
}
}
8.虚函数、继承
9.#region和#endregion
#region是C#中的一个分块预处理指令,主要用于编辑器代码的分块,在编译时会被自动删除,必须以#endregion结尾。
10.AudioClip是一个音频数据容器。它将音频文件压缩为ogg vorbis或不压缩。它被AudioSources引用,并用于播放声音。
11.C#中的out参数、ref参数、params可变参数
(1)out参数:out关键字通过引用来传递参数,在定义方法和调用方法的时候都必须使用out关键字,out可以用来返回多个参数类型。
(2)ref参数:在定义的方法内对其进行处理,再将结果返回,定义方法无需多余的返回类型。
ref参数和out参数的区别:out必须在定义方法内部赋值,ref必须在调用方法之前为其实参赋值。
(3)params可变参数:将实参列表中与可变参数数组类型一致的元素都当作数组的元素处理。params可变参数必须是形参的最后一个参数。
2019/03/18
1.协同程序
2.yeild
3.StartCoroutine
2019/03/22
1.网络通信
2.高并发的网络通信
3.网络通信模块
4.序列化、反序列化