前言
记录在使用Unity的过程中的一点心得,不能说是什么正儿八经的经验,只是一点个人使用感悟。
正文
For循环
在 for
循环中的临时变量 i 不可靠,需要用到时建议使用一个局部变量来代替
1 2 3 4 5 6 7 8
| for(int i = 0; i < 10 ; i++) { int index = i;
...
}
|
对象变量在委托回调中的使用
在 c# 中,如果变量在多个委托回调中使用,因为回调的时序未知,很容易出现已经保存在集合中的数据再次异常更改。因为保存的是对象的引用地址,因此对应的对象在某个未可控的委托回调中会被再次修改。(C#委托语法糖的弊端所在)
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| MyItem myItem = new MyItem(); List<MyItem> itemList = new List<MyItem>(); Button SetButton = transform.Find("SetButton").GetComponent<Button>(); SetButton.onClick.RemoveAllListeners(); SetButton.onClick.AddListener(delegate{ myItem.age = 18; });
Dropdown dropdown = transform.Find("Dropdown").GetComponent<Dropdown>(); dropdown.onValueChanged.RemoveAllListeners(); dropdown.onValueChanged.AddListener((bool isOn) =>{ myItem.age = 0; });
Button SubmitButton = transform.Find("SubmitButton").GetComponent<Button>(); SubmitButton.onClick.RemoveAllListeners(); SubmitButton.onClick.AddListener(delegate{ itemList.Add(myItem); });
|
建议修改成这样:
1 2 3 4 5 6 7
| Button SubmitButton = transform.Find("SubmitButton").GetComponent<Button>(); SubmitButton.onClick.RemoveAllListeners(); SubmitButton.onClick.AddListener(delegate{ MyItem myItemTemp = new MyItem(); myItemTemp.age = myItem.age; itemList.Add(myItemTemp); });
|
C#中字符串前面加@
加@表示无视转义符的存在。比如@”\n” 不是表示换行,而是表是\和n
1
| @"{""Input"":""stone"", ""Output"":""gold""}"
|
和
1
| "{\"Input\":\"stone\", \"Output\":\"gold\"}"
|
是等效的——用于转义双引号中的双引号
to be continued…