unity C# 語法教學入門
王啟榮 發表於 2018/08/27_22:04 ( 最後修改 2020/03/29_17:58 )
● 註解: // 單行註解
/* 多行註解 */
● 宣告變數: int a = 6; // 宣告一個名稱為 a 的變數,資料類型為整數、值為 6
要把 a 加 1 可寫 a=a+1 或 a++;
要把 a 加 5 就寫 a+=5;
● 常用資料類型: int -> 整數
(注意大小寫) float -> 浮點數(有小數點的數。數字後要加 f,例如 3.6f )
string -> 字串(前後都要加",例如"abc")
bool -> 布林(值只有 true 或 false 兩種)
GameObject -> 遊戲物件
Vector3 -> 簡單來說就是一組(x,y,z)
◎ 字串與數字轉換:
int.Parse("67"); // string 轉 int
float.Parse("25.36"); // string 轉 float
65.ToString(); // 數字轉 string
yourFloat.ToString("0.00"); // float 轉 string 並取到小數第2位
◎ 字串相關: string[] words = yourString.Split('_'); // 分割字串(以_符號為例)
yourString.Substring( 0, 2 ); // 抓取子字串(從第1個字開始連續抓2個)
yourString.Length; // 抓取字串長度
yourString.ToLower(); // 把字串中所有大寫英文字母轉成小寫
yourString.ToUpper(); // 把字串中所有小寫英文字母轉成大寫
◎ 字串反轉:
// 要加 using System;
string strA = "unity c#";
char[] myArray = strA.ToCharArray();
Array.Reverse(myArray);
string strB = new string(myArray); // 結果 strB 為 #c ytinu
● if 判斷式:
if ( n > 50 ){ } // 如果 n 大於 50 就執行
else if ( n == 10 ){ } // 如果 n 等於 10 就執行
else { } // 以上條件都不符合,就執行 else
同一個判斷式最多只會執行一個結果(最先符合條件者),撰寫時要留意先後順序。
關係運算子: 等於== 不等於!= 大於> 大於等於>= 小於< 小於等於<=
邏輯運算子: 且&& 或||
例如: if ( a>5 && b==3 ){ } 代表要同時符合 a>5 和 b==3 這兩個條件才行
if ( a>5 || b==3 ){ } 代表只要符合 a>5 或 b==3 其中一個條件即可
判斷布林值為 true 或 false 時:
if ( a==true ) 可寫為 if ( a )
if ( a==false ) 可寫為 if ( !a )
● 陣列(array):
請參閱「unity Array 陣列資料存取」這篇文章。
● 迴圈:
◎ for 迴圈
for (int i=0; i<5; i++) { print(i); }
說明:i 的啟始值為 0, i 小於 5 就繼續跑迴圈, i 每次加 1
結果會依序輸出 0、1、2、3、4
◎ while 迴圈
int x = 0;
while (x < 3) { x++; print(x); } // 結果會依序輸出 1、2、3
● 函數(function):
◎ 基本語法
void test(){ } // 宣告一個名稱為 test 的函數 (前面加 void 代表沒有回傳值)
test(); // 呼叫函數 test,函數不會主動執行,被呼叫時才會執行。
◎ 呼叫加傳值
void test( int a, string b ){ } // 括號內的兩個參數,用來接收傳過來的值
(資料類型要對應)
test( 7, "hello" ); // 呼叫函數,且傳兩個值(引數)過去
◎ 回傳值
int test(){ // 宣告函數時前面加 int,代表會回傳整數
return 123; // 回傳整數 123 (return 必需加在函數的最後)
}
int c = test(); // 呼叫函數,且宣告一個變數 c 以儲存回傳值(結果 c 為 123)
※ 若要多個回傳值,請參閱「呼叫函數返回多個回傳值」這篇文章。
◎ 傳址呼叫
void myTest( ref int a ){ a = 12; }
int a = 5;
myTest ( ref a );
print ( a ); // 結果 a 為 12。 引數和參數前面加 ref,代表傳址而非傳值。
● 類別(class)與物件(object):
◎ 宣告類別
新增一個名為 myCharacter 的 script,內容如下:
public class myCharacter { public int _hp; } // 例如帶有 hp 值的角色藍圖
◎ 建立物件
在另一個 script 輸入:
myCharacter npc = new myCharacter();
npc._hp = 90; // 設定 npc 物件的 hp 值
※ 若要進一步了解,請參閱「封裝(Encapsulation)與資料存取」這篇文章。