Unity C# | 結構(Struct)及應用

更新 發佈閱讀 7 分鐘

前言

  本文章將會介紹結構(Struct)的定義、簡單介紹其應用,並且補充與序列化(SerializeFile)結合的方式,在撰寫這篇文章之前,我以為寫過Struct文章,準備撰寫一篇文章關於結構與序列化的結合。

結構(Struct)

  結構(Struct)是封裝的做法之一,可以儲存變數欄位後多次使用,常用於道具或怪物清單,可以封裝將重覆使用的宣告,並用簡短的程式碼達成同樣的動作。

raw-image

  創建完Sturct之後,只需要短短幾行程式就能宣告變數,上面這個畫面看似宣告了六次,實際上只有短短兩行程式。

    [SerializeField]
private s_BottlePileSprite Pile3;
[SerializeField]
private s_BottlePileSprite Pile5;

  我今天要說的部份主要是上面介紹的這些,不過似乎還可以做簡單的運算及使用,未來如果有使用到,再更新這篇文章,想細看更多的內容,可以參考下方從官網截下來的程式碼,或是前往官方細看。


官方網址:結構類型 (或結構類型)

public struct Coords
{
  public Coords(double x, double y)
  {
    X = x;
    Y = y;
  }
  public double X { get; }
  public double Y { get; }

  public override string ToString() => $"({X}, {Y})";
}

宣告

  Struct類似Class,是一種封裝的方式,在查詢Struct時,我有去查詢Class的內容,譬如Class是封裝函式,那麼Struct就是封裝變數,它的宣告方法如下。

private struct 結構名稱(ex. s_Item)
{
  public int ItemID;
  public String ItemIntroduce;
  public bool ItemUsed;
  ...
}

  當結構(Struct)宣告後,裡面的變數都是空物件,也只能是空物件。

使用

  Struct的使用相當簡單,就是一行程式碼,有點像是用C#告訴電腦「我要使用XX結構,然後它叫OO」,類似「我要買個鉛筆盒,然後它叫阿明的百寶袋」
(話說現在還有人會幫自己的物品命名嗎?XD)

private 結構名稱(ex. s_Item) Item_1;

應用:重覆物件

  遊戲中使用的重覆物件相當多,其中有兩種常用的應用方式,其中一種就是如同上述使用的方式,不停的宣告即可。

private 結構名稱(ex. s_Item) Item_1;
private 結構名稱(ex. s_Item) Item_2;
private 結構名稱(ex. s_Item) Item_3;
private 結構名稱(ex. s_Item) Item_4;
private 結構名稱(ex. s_Item) Item_5;
...

  不過,假設重覆的次數非常非常多,像是Rouge like類型的遊戲,可能包含千多種道具,這樣重覆宣告的性價比太低,可以使用陣列Array。

private 結構名稱(ex. s_Item)[] Items = new 結構名稱(ex. s_Item)[100];

//陣列(Array)宣告補充
int[] a = new int[5]
資料型別[] 陣列名稱 = new 資料型別[陣列大小]

補充:結構(Struct)與序列化(SerializeFiled)結合

  序列化是程式設計中很重要的一個觀念,主要是希望程式員不要大量宣告公有變數,讓程式保持乾淨,不要有太多可以隨便使用的變數,保持好封裝,在使用Struct的時候,我很常序列化出問題,所以我總結了一下序列化的使用。

我拿我自己的專案來介紹。

[System.Serializable]//這一行要用Serializable
private struct s_BottlePileSprite
{
public Sprite Normal;
public Sprite Heightlight;
public Sprite Pressed;
}

口訣是「外面要私有,裡面要公有」

  照序列化的理論來說,應該是把非公用的變數與函式通通私有化,也就是長下面這樣。

[System.Serializable]
private struct s_BottlePileSprite
{
[SerializeField]
private Sprite Normal;
[SerializeField]
private Sprite Heightlight;
[SerializeField]
private Sprite Pressed;
}

  它看起來沒問題,在Unity中甚至會正常顯示,不過,你完全沒辦法在程式中呼叫它,也就是可以呼叫下列程式中的Pile3,但內容物根本無法使用,會因為保護層級被擋下來。

private s_BottlePileSprite Pile3;

結語:

  Struct可以不使用,但在追求簡潔、易懂、好閱讀的程式時,會常常需要使用的一種方法,而且使用前通常會思考,怎麼規劃、怎麼使用,在搜尋Struct的介紹或教學時,能連結到很多值得學習的觀念和內容。


raw-image


留言
avatar-img
留言分享你的想法!
avatar-img
瓶裝雪的沙龍
116會員
247內容數
你好,我是瓶裝雪!我是一名遊戲設計師!
瓶裝雪的沙龍的其他內容
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/01/26
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
2024/01/26
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
看更多
你可能也想看
Thumbnail
覺得黏在額頭上的"條碼瀏海"很阿雜嗎?日本熱銷的「KOIZUMI迷你瀏海梳」,不僅小巧便攜,更能快速加熱造型,無論是齊瀏海、空氣瀏海還是韓系碎蓋髮,都能輕鬆打理!瀏海順了,一整天心情就好了!
Thumbnail
覺得黏在額頭上的"條碼瀏海"很阿雜嗎?日本熱銷的「KOIZUMI迷你瀏海梳」,不僅小巧便攜,更能快速加熱造型,無論是齊瀏海、空氣瀏海還是韓系碎蓋髮,都能輕鬆打理!瀏海順了,一整天心情就好了!
Thumbnail
走完朝聖之路和TMB後,我發現真正能撐住長時間健行的,不只是腳力,而是那些讓生活更舒服的小物。這篇整理了我在TMB實測後覺得超好用的三樣登山神器——防水襪、肥皂袋、速乾毛巾,每一樣都讓旅程更輕鬆!
Thumbnail
走完朝聖之路和TMB後,我發現真正能撐住長時間健行的,不只是腳力,而是那些讓生活更舒服的小物。這篇整理了我在TMB實測後覺得超好用的三樣登山神器——防水襪、肥皂袋、速乾毛巾,每一樣都讓旅程更輕鬆!
Thumbnail
C# 9.0 給 Unity 程式設計上帶來的便利
Thumbnail
C# 9.0 給 Unity 程式設計上帶來的便利
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
本文章將會介紹結構(Struct)的定義、簡單介紹其應用,並且補充與序列化(SerializeFile)結合的方式。
Thumbnail
本文章將會介紹結構(Struct)的定義、簡單介紹其應用,並且補充與序列化(SerializeFile)結合的方式。
Thumbnail
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
Thumbnail
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
Thumbnail
本文以實際的程式碼來說明Value Type和Reference Type的差異,並介紹實用的除錯工具。
Thumbnail
本文以實際的程式碼來說明Value Type和Reference Type的差異,並介紹實用的除錯工具。
Thumbnail
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
Thumbnail
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News