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.
