2015年1月20日 星期二

Unity 學習筆記 #1

1.Unity內雙擊.cs檔,打開Mono Develop Editor時,出現firstpass load failed

Description: Mono Develop啟動過程中出現錯誤視窗,告知firstpass load failed

Solution:
Unity→Edit→Preferences→External Tools→External Script Editor→Browse...
然後找到MonoDevelop.exe的所在位置選擇它後,關閉Preferences並重開MonoDevelop即可解決

2.合適的DrawCall Formula,由NVidia提出

Formula: DrawCall = 25k * GHz(CPU) * Percent/frame rate
GHz(CPU): Target CPU frequency
Percent: Corresponding to CPU(Value 0 to 1)
Frame rate: Target Frame Rate

Ex. 希望在1GHz的CPU上跑30fps,DrawCall只佔用20%的CPU工作量
25k * 1 * 0.2 / 30 = 166→合適的DrawCall數要低於166



3.Convert.ToInt32 與Int.parse的差別

Convert.ToInt32的參數對象是obj,所以支援轉換的對象比較多
當參數與null或是不存在時,則會回傳0
若是輸入的參數為2整數間的中位浮點數,例如:3.5、4.5,會回傳4、4,即偶數那方
若是1.4、2.2等小於中位浮點數,會回傳1、2
若是1.6、2.8等大於中位浮點數,會回傳2、3

Int.parse參數限定為string,若是參數為null或不存在則會報錯
同時若string為"1.2"、"2.5"等代表非整數的字串也會報錯,字串必須為整數

4.[Multiline]屬性

在Unity 4.6以前,若在Scriptable Object中使用string變數
在Inspector中只會出現一行空間且無法使用Enter換行來拓展空間
4.6以後已經修改這個設定
當在Inspector中編輯string變數時按下Enter會換行並增加一行可看空間
不過若是你希望一開始就顯示多行,可以在string變數之前加上[Multiline(number)]
number可以自由填入數字,例如[Multiline(3)]則Inspector初始即會顯示3行

5.改變基礎UI元件:GUILayout.TextField的Regular Expressions

於開頭加入
using System.Text.ReqgularExpressions;
於函式中加入
//add TextField component
private string text = "";
text = GUILayout.TextField(text, 20, GUILayout.Width(100.0f));
//Modify RE, you can change it to what you want to use
text = Regex.Replace(text, "[^0-9]", "");
6.Unity於電腦編輯,測試執行時無法切換輸入法

新增一個script,於Start()或Awake()中加入
Input.imeCompositionMode = IMECompositionMode.On;
之後將這個Script加到場景中即可

7.使用Unity內建GUI元件無法顯示中文

(1)於專案中創建一個GUISkin元件(下方專案瀏覽視窗中右鍵→Create→GUISkin)
(2)將GUISkin中的Text相關欄位點開,將Overflow一欄的Font改成支援中文的字體
(3)在要顯示中文的script中加public變數: public GUISkin m_skin;
(4)把剛剛創建的GUISkin拉到該變數上
(5)於該script的Start()、Awake()或是OnGUI()函式中加入GUI.skin = m_skin;即可正常顯示

8.使用StreamReader讀取純文字文件

StreamReader sr = new StreamReader(filepath, Encoding.Default);

後面Encoding變數使用Default是因為不加的時候,預設讀取文字的編碼是UTF-8
但純文字文件不一定是用UTF-8編碼儲存,所以加上這個變數使用該文件的預設編碼讀入

9.Unity 中的"static" property

If use static property on the object, the object cannot be changed dynamicly.
Example set a button static, and call tween scale for change its scale.
Tween scale will only change itself scale, not change its child scale property.

沒有留言:

張貼留言