Typy proste i referencyjne w Unity C#
Typy proste [wartościowe] przechowywane są na stosie [stack]
Typ danych | Przykład | Rozmiar |
int | -10, 0, 128, 2056 | 4 bytes |
float | -12.5f, 0.01f, 2023.24f | 4 bytes |
bool | true, false | 1 byte |
byte | 0, 99, 255 | 1 byte |
Vector2 / Vector3 [struct] | Vector2 dir = new Vector2(0.2f, 0.4f) | 2 / 3 x 4 bytes |
Color32 [struct] | Color32 bgColor = new Color32(255, 0, 0, 255) | 4 x 1 byte |
Enum | enum GameState { play, pause, gameover, menu } |
Typy referencyjne przechowywane są na stercie [heap], adresy do nich na stosie [stack]
Typ danych | Przykład |
Object (GameObject, Transform, Component) | GameObject enemyPrefab |
Tablice (array) | int [] numbers = { 1, 2, 3 } |
Lista (List) | List <int> numbers = new List <int>(); |
Słownik (dictionary) | Dictionary <keyType, valueType> name = new Dictionary <keyType, valueType>(); |
String – Typ referencyjny niemutowalny
Obiekt typu string jest wyjątkiem, z jednej strony jest typem referencyjnym, ale z drugiej strony nie da się go nadpisać. Z poziomu kodu, zmienne typu string można nadpisać, ale w chwili nadpisania na stercie[heap] tworzona jest nowa instancja tego obiektu i przypisywany jest nowy adres. Dlatego częsta zmiana wartości tekstowych jest dość kosztowna.