Unity C# | Switch & enum

Unity C# | Switch & enum

更新於 發佈於 閱讀時間約 5 分鐘

前言

  本篇文章將會介紹Switch和Enum,Switch這是一個等同開關的陳述式,相較於頻繁的「if」和「else if」,是一個在眾多方案中切換的一個好用法;Enum是具名常數,可以輔助並提升程式設計的易讀性。

Switch

  這個英文的中文翻譯是「開關」,不過跟電燈開關相比,應該會更接近於汽車的開關,有多種不同的方案,並且同時間只能控制其中一項。

  在「JA-Anything」中介紹程式的寫法如下:

int caseSwitch = 1;
void Start()
{
  Test ();
}

void test()
{
  switch (caseSwitch)
  {   
    case 1:     
      Debug.Log("Case 1");     
      break;   
    case 2:     
      Debug.Log("Case 2");     
      break;   
    default:     
      Debug.Log("Default case");     
      break;
  }
}

  通常會用在void函式,每次呼叫會使用不同的值,當我們要呼叫不同的方案時,直接修改caseSwitch即可。

Enum

  這一個英文的中文翻譯是「列舉」,用來列舉一組具名整數常數,效用跟Switch有點類似,不過是切換不同的「名稱」,說起來有點抽象,直接看一張圖會好理解很多。

來源:自製示範專案

來源:自製示範專案


Enum的結構可以儲存自訂義的中文或英文字符,測試過不能使用!@#或數字或空白作為開頭。

  

定義 enum

private enum testenum
{
我,
你,

}

  前面有提到,Enum是一組具名常數,這句話意指實際上enum類型屬於隱性常數,雖然呼叫的時候會使用中文或英文,不過實際上是呼叫背後的整數,而這些整數也可以被設定。

private enum testenum
{
  我=0,
  你=1,
  他=2
}

  上面是系統默認的設定方式,初始值為0,每多一項目+1,不過也可以設定成不同的樣子,譬如第一個為1之類的。

定義 enum

  前面我們定義好一組 enum 名稱叫做 testenum,接下來就可以宣告這組定義好的 enum。

private testenum playercall;

呼叫 playercall

這是一組被宣告為testenum的enum,名子叫做 playercall,裡面存有你我他三種不同的值。

if(playercall == testenum.他)
{
  Debug.Log("玩家指著他");
}

Switch與Enum之結合應用

  使用上面的Enum,先宣告一個欄位:

[SerializeField]
private testenum e;

  enum不能使用public,所以需要用private並在上方附加SerializeField,這樣才能在Unity中看到它,在使用這個名為e的Enum來撰寫一份Switch:

switch(e)
{
case testenum.我:
  Debug.Log("犯人竟然是我");
  break;
case testenum.你:
Debug.Log("犯人竟然是你");
break;
case testenum.他:
Debug.Log("犯人竟然是他");
break;
}

  接下來只要修改e的值即可,可以使用Unity面板的控制方式,也可以寫下列程式修該e的值:

e = testenum.我;

後記

  值得一提的事情,這是我目前唯一看到在程式碼中出現中文的情況,否則通常在引號「""」中才能見到中文,而藉由Enum可以讓設計師直接在程式中看到中文字,這可能有一些特殊的應用也說不定。

avatar-img
瓶裝雪的沙龍
108會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言
avatar-img
留言分享你的想法!
瓶裝雪的沙龍 的其他內容
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。