This repository was archived by the owner on Aug 13, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathSerializeFieldExample.cs
67 lines (48 loc) · 2.8 KB
/
SerializeFieldExample.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UnityAttributesExample {
/// <summary>
/// https://docs.unity3d.com/ScriptReference/SerializeField.html
/// </summary>
public class SerializeFieldExample : MonoBehaviour {
// This field gets serialized because it is public.
public string firstName = "John";
// This field does not get serialized because it is private.
private int age = 40;
// Force Unity to serialize a private field.
// When Unity serializes your scripts, it will only serialize public fields.
// If in addition to that you also want Unity to serialize one of your private fields you can add the SerializeField attribute to the field.
// Unity will serialize all your script components, reload the new assemblies,
// and recreate your script components from the serialized verions.
// This serialization does not happen with .NET's serialization functionality, but with an internal Unity one.
// The serialization system used can do the following:
// - CAN serialize public nonstatic fields (of serializable types)
// - CAN serialize nonpublic nonstatic fields marked with the SerializeField attribute.
// - CANNOT serialize static fields.
// - CANNOT serialize properties.
// Your field will only serialize if it is of a type that Unity can serialize:
// Serializable types are:
// - All classes inheriting from UnityEngine.Object, for example GameObject, Component, MonoBehaviour, Texture2D, AnimationClip.
// - All basic data types like int, string, float, bool.
// - Some built-in types like Vector2, Vector3, Vector4, Quaternion, Matrix4x4, Color, Rect, LayerMask.
// - Arrays of a serializable type
// - List of a serializable type
// - Enums
// - Structs
// Note: if you put one element in a list (or array) twice, when the list gets serialized,
// you'll get two copies of that element, instead of one copy being in the new list twice.
// Hint: Unity won't serialize Dictionary, however you could store a List<> for keys and a List<> for values,
// and sew them up in a non serialized dictionary on Awake().
// This doesn't solve the problem of when you want to modify the dictionary and have it "saved" back,
// but it is a handy trick in a lot of other cases.
// This field gets serialized even though it is private
// because it has the SerializeField attribute applied.
[SerializeField]
private bool hasHealthPotion = true;
void Start() {
if (hasHealthPotion)
Debug.Log("Person's first name: " + firstName + " Person's age: " + age);
}
}
}