前言
這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。
因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒…
變數
宣告變數不能使用數字開頭,或是除了_之外的符號。
int hp = 10;
int A2 = 10;
int _A = 10;
·整數 int
·浮點數 float、double
float 精度低、佔的資源較少,double則反之;
目前暫時理解為在處理浮點數時,這兩種能用float就盡量用float。
然後使用float宣告變數時,數字後方要加f
float f = 0.1f;
不然會出現"Cannot convert from 'double' to 'float'"的錯誤訊息。
·字串 string
·布林 bool
存放true與false兩種狀態。
布林運算
and 使用符號 &&
or 使用符號 || (Shift + \)
not 使用符號 !
C# 的 i++ 和 ++i
邏輯判斷式
·if ︱else if︱else
int hp = 60;
if (hp >= 70 && hp <= 100)
{
Debug.Log("70~100");
}
else if (hp >= 40 && hp <= 69)
{
Debug.Log("40~69");
}
else if (hp >= 1 && hp <= 39)
{
Debug.Log("1~39");
}
else
{
Debug.Log("不在範圍內");
}
這段程式碼如果把大括號拿掉還是可以work,但是如果內容有兩行以上的代碼就會報錯,所以不管怎樣大括號就是給他加下去就對了!
迴圈
·for迴圈
for (int i = 0; i <= 10; i++)
{
Debug.Log("跑了" + i + "圈");
}
關於for迴圈的大括號,如果我們把大括號拿掉的話,跟if不太一樣的是…就算for裡面有兩行語句也不會報錯,但是他就只會執行第一行的代碼,所以還是不管怎樣大括號就是給他加下去就對了!
·while迴圈
int i = Random.Range(1, 101);
int count = 0;
while (i > 0)
{
count++;
Debug.Log("總共計數:" + count);
i--;
}
i--忘記加,然後就——
Random.Range
上面while迴圈裡使用到的Random.Range,使用int跟float時範圍囊括的區間是不太一樣的;
Random.Range(0, 3); //範圍為0~2
Random.Range(0.0f, 3.0f); //範圍為0.0~3.0
整數隨機時最大值不包含在範圍;
浮點數隨機時最大值包含在範圍內。
一維陣列
只印出"名稱2"↓
string[] names = new string[3] { "名稱", "名稱1", "名稱2" };
Debug.Log(names[2]);
使用for迴圈,印出每個名稱↓
string[] names = new string[3];
names[0] = "名稱";
names[1] = "名稱1";
names[2] = "名稱2";
for (int i = 0; i < names.Length; i++)
{
Debug.Log(names[i]);
}
使用foreach,印出每個名稱↓
string[] names = new string[3] { "名稱", "名稱1", "名稱2" };
foreach (string value in names)
{
Debug.Log(value);
}
方法method
void methodName()
{
}
↑最基本的方法結構,
void 等於沒有回傳值(改成float或是其他的則是有回傳值,看想要回傳甚麼);
methodName 方法名稱;
()小括號裡面沒東西代表沒傳入參數。
private float _hp = 100;
float getHp()
{
return _hp;
//將最上方_hp的數值回傳在此getHp(),
所以只要呼叫這個getHp()方法,就可以得到目前的_hp的值。
//return之後不要放東西,因為到return之後就不會繼續執行。
}
void setHp(float hp)
{
_hp = hp;
//將下方取得的65丟回到最上方的_hp裡。
}
void Start()
{
setHp(65);
//將setHp方法裡的參數float hp設成65。
float myHp = getHp();
//創建了一個叫myHp的變數,為了下一行顯示getHp()裡的值。
Debug.Log("MyHp:" + myHp);
}
Call By Value
void Start()
{
int a = 10;
setA(a);
Debug.Log(a);
}
void setA(int a)
{
a = 20;
}
印出的參數為10而非20,因為Call By Value只是將變數的參數填入,而非填入變數的地址。(我還要再理解一下…)
Call By Reference
void Start()
{
int a = 10;
setA(ref a);
Debug.Log(a);
}
void setA(ref int a)
{
a = 20;
}
此時印出的參數就是20了,概念上比較像是本來是填入a的參數,但是現在因為有加ref所以要傳"ref類型"的參數。
void Start()
{
int a;
setA(out a);
Debug.Log(a);
}
void setA(out int a)
{
a = 20;
}
這樣也是印出20,概念上是int a設為一種輸出的類型,所以最上方int a就不用給予初始值。