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
瓶裝雪的沙龍
114會員
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
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
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的基本命名方式。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News