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

更新於 2022/05/01閱讀時間約 1 分鐘

前言

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

結構(Struct)

  結構(Struct)是封裝的做法之一,可以儲存變數欄位後多次使用,常用於道具或怪物清單,可以封裝將重覆使用的宣告,並用簡短的程式碼達成同樣的動作。
圖片來源:我獨立製作的專案
  創建完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的介紹或教學時,能連結到很多值得學習的觀念和內容。
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
105會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
本篇文章是Unity Component系列中的第一篇,將會介紹Unity Component中UGUI的Button的各項目介紹,不包含應用。
本文章將藉由我的經歷,講述普通人邁向遊戲設計師的歷程,首先簡單介紹遊戲設計師,再把這段時間的經歷分成五步,從職業基本認識到入門方式一步一步介紹,如果你對遊戲設計有興趣、摸索如何成為遊戲設計師,那我相信這篇文章會適合你。
  這篇文章將介紹public函式應用,回顧保護層級、無類型兩個核心重點,再介紹遊戲製作重點程式(Script),再到控制中心Script製作與方針。
本文章主要介紹保護程式的方法及封裝方法的唯讀屬性。
本文章將介紹回傳及無類型回傳在變數與函數中的用法,以及他們比較常使用的方式。
本文章將介紹Unity產品生命週期的一部分,並提供使用範例程式碼。
本篇文章是Unity Component系列中的第一篇,將會介紹Unity Component中UGUI的Button的各項目介紹,不包含應用。
本文章將藉由我的經歷,講述普通人邁向遊戲設計師的歷程,首先簡單介紹遊戲設計師,再把這段時間的經歷分成五步,從職業基本認識到入門方式一步一步介紹,如果你對遊戲設計有興趣、摸索如何成為遊戲設計師,那我相信這篇文章會適合你。
  這篇文章將介紹public函式應用,回顧保護層級、無類型兩個核心重點,再介紹遊戲製作重點程式(Script),再到控制中心Script製作與方針。
本文章主要介紹保護程式的方法及封裝方法的唯讀屬性。
本文章將介紹回傳及無類型回傳在變數與函數中的用法,以及他們比較常使用的方式。
本文章將介紹Unity產品生命週期的一部分,並提供使用範例程式碼。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Unity在這週公布了2022年Q1的財報,財報發布後股價下挫30%,下跌至30美元,已經遠遠跌破兩年前的上市價。Unity雪崩式的下跌是因為Q1的營運不理想、未來的營運預期不理想、還是單純是隨著近期成長股估值修正而下跌呢?這篇文會分析Unity 2022Q1財報及預測Unity未來的營運狀況。
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Unity在這週公布了2022年Q1的財報,財報發布後股價下挫30%,下跌至30美元,已經遠遠跌破兩年前的上市價。Unity雪崩式的下跌是因為Q1的營運不理想、未來的營運預期不理想、還是單純是隨著近期成長股估值修正而下跌呢?這篇文會分析Unity 2022Q1財報及預測Unity未來的營運狀況。