1. 程式人生 > >關於unity結構體struct和類class的使用細節和注意事項!

關於unity結構體struct和類class的使用細節和注意事項!

        今天在專案中用到了結構體來儲存一些不同型別的資料,結構體目的是在任意地方呼叫和修改其中的資料資訊(相信這裡對結構體比較瞭解的人已經發現問題所在了)。當我決定用結構體的那一刻,我就已經走上了一條錯誤的道路上了。於是我花了白白的一天去各方面找問題哭哭。下面我來分析結構體的用處:

        struct結構體一般我們用來儲存複雜的相關聯的一些資料,它和類有很多相似性。類我們一般理解為方法和資料的整合。

        unity中最常用的結構體就是Vector2,3。結構體的記憶體是在棧中開闢,所以其記憶體回收比較容易。在update裡new新的結構體也不會影響遊戲的幀數。注意其只能是值傳遞,

其相當於自帶了“只讀屬性”,只有直接修改它的值,想要通過函式返回(強制拷貝返回),或拷貝物件來修改結構體中的資料值是不可能的。這就造成了我的問題:在其他定義域想要修改結構體的值是非常難的,而且極不方便(它傳遞的是拷貝後的資料,修改後不會對原結構體造成影響)。這顯然和專案的需求不同。它的值傳遞屬性是語言定死了的。

        再說一下類和它的區別:類的記憶體是在堆中開闢,所以其記憶體回收較難。在update裡new一個物件會對遊戲幀數造成影響。它是引用傳遞(因為類物件可能會很大,這種傳遞地址的方式會顯著提高效率),在任何地方修改它都會對原物件造成影響。類可以繼承其他類,結構體不行。

       類和結構體在很多地方是不一樣的,但他們各有千秋,應用領域不同,最需要注意的是他們的傳遞方式!