{"id":72,"date":"2015-12-25T02:22:47","date_gmt":"2015-12-24T17:22:47","guid":{"rendered":"http:\/\/milennium9.godohosting.com\/wordpress\/?p=72"},"modified":"2016-01-04T12:15:09","modified_gmt":"2016-01-04T03:15:09","slug":"unity3d-unity-serialization","status":"publish","type":"post","link":"http:\/\/milennium9.godohosting.com\/wordpress\/?p=72","title":{"rendered":"[Unity3D] Unity Serialization"},"content":{"rendered":"<p>\uc5ec\ub7ec\ubd84\uc740 \uc720\ub2c8\ud2f0\uc5d0 \uc544\uc8fc \uba4b\uc9c4 \uc5d0\ub514\ud130 \ud655\uc7a5\uc744 \ub9cc\ub4e4\uace0 \uc788\uace0 \uadf8\ub7f4\uc2f8\ud574 \ubcf4\uc785\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\uc774 \ub9cc\ub4e0 \ud234\ub85c \uc798 \uc815\ub9ac\ub41c \ub370\uc774\ud130 \uad6c\uc870\uccb4\ub4e4\uc744 \ubcf4\uba70 \ud750\ubb47\ud574 \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \ud50c\ub808\uc774 \ubaa8\ub4dc\ub97c \uc2dc\uc791\ud558\uac70\ub098 \uc885\ub8cc\ud569\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7ec\uc790 \uac11\uc790\uae30 \ub370\uc774\ud130\ub4e4\uc774 \ubabd\ub545 \uc0ac\ub77c\uc9c0\uace0 \ud234\uc740 \uae30\ubcf8\uc801\uc778 \uc0c1\ud0dc\ub85c \ucd08\uae30\ud654\ub429\ub2c8\ub2e4. \uc800\uc7a5\ud558\uc9c0 \uc54a\uace0 \ucef4\ud4e8\ud130\uac00 \uaebc\uc84c\uc744 \ub54c\ucc98\ub7fc \"\ubb50\uc57c \uc2dcx!!!\" \uc774\ub77c\ub294 \ub9d0\uc774 \ud280\uc5b4\ub098\uc635\ub2c8\ub2e4.<\/p>\n<p>\uc65c \uc774\ub7f0\uc77c\uc774 \uc0dd\uacbc\ub294\uc9c0 \uc54c\uae30 \uc704\ud574\uc11c\ub294 \uc720\ub2c8\ud2f0\uc758 Managed(Mono) \uc601\uc5ed\uc774 \uc5b4\ub5bb\uac8c \ub3d9\uc791\ud558\ub294\uc9c0 \uc54c\uc544\uc57c \ud569\ub2c8\ub2e4. \ud55c\ubc88 \uc774\ud574\ud558\uace0 \ub098\uba74 \uc55e\uc73c\ub85c\uac00 \ud3b8\ud574\uc9d1\ub2c8\ub2e4.<\/p>\n<p><strong>\uc5b4\uc148\ube14\ub9ac\uac00 \ub9ac\ub85c\ub4dc\ub420 \ub54c \ubb34\uc2a8\uc77c\uc774 \uc77c\uc5b4\ub0a0\uae4c?<\/strong><\/p>\n<p>\uc720\ub2c8\ud2f0\ub294 \ud50c\ub808\uc774 \ubaa8\ub4dc\ub97c \uc2dc\uc791\ud558\uac70\ub098 \uc885\ub8cc\ud560 \ub54c \ubaa8\ub178 \uc5b4\uc148\ube14\ub9ac\ub4e4\uc744 \ub9ac\ub85c\ub4dc \ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub294 \uc720\ub2c8\ud2f0\uc640 \uad00\uacc4\ub41c Dll\ub4e4\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc0ac\uc6a9\uc790\uc758 \uc785\uc7a5 3\ub2e8\uacc4\uc758 \ud504\ub85c\uc138\uc2a4:<\/p>\n<ul>\n<li>Managed \uc601\uc5ed\uc758 Serializable \ub370\uc774\ud130\ub97c \uac00\uc838\uc640\uc11c \uc720\ub2c8\ud2f0\uc758 C++ \uc601\uc5ed\uc5d0\uc11c \uc0ac\uc6a9\uac00\ub2a5\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/li>\n<li>\uc720\ub2c8\ud2f0\uc758 Managed \uc601\uc5ed\uc5d0 \uad00\uacc4\ub41c \uba54\ubaa8\ub9ac\/\uc815\ubcf4\ub97c \ubaa8\ub450 \ud30c\uad34\ud558\uace0 \uc5b4\uc148\ube14\ub9ac\ub97c \ub9ac\ub85c\ub4dc \ud569\ub2c8\ub2e4.<\/li>\n<li>C++ \uc601\uc5ed\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub97c \ub2e4\uc2dc Serialize\ud558\uc5ec Managed \uc601\uc5ed\uc73c\ub85c \uac00\uc838\uc635\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc989 \uc5b4\uc148\ube14\ub9ac\uac00 \ub9ac\ub85c\ub4dc \ub420 \ub54c\u00a0\uc5ec\ub7ec\ubd84\uc758 \ub370\uc774\ud130 \uad6c\uc870\uccb4\ub098 \uc815\ubcf4\ub97c \ubcf4\uc874\ud558\ub824\uba74 C++ \uba54\ubaa8\ub9ac\uc5d0 serialize \ub418\uc5b4 \ub123\uace0 \ube84 \uc218 \uc788\ub3c4\ub85d \ud574\uc57c\ud55c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774\ub294 \ub370\uc774\ud130 \uad6c\uc870\uccb4\ub97c asset \ud30c\uc77c\ub85c \uc800\uc7a5\ud574\ub450\uace0 \ub098\uc911\uc5d0 \ubd88\ub7ec\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<p><strong>\uc720\ub2c8\ud2f0\uc758 Serialization\uc744 \uc5b4\ub5bb\uac8c \ub2e4\ub904\uc57c \ud558\ub098?<\/strong><\/p>\n<p>\uc720\ub2c8\ud2f0\uc758 Serialization\uc740 \uc608\uc81c\ub85c \ubcf4\ub294\uac8c \uac00\uc7a5 \uc27d\uc2b5\ub2c8\ub2e4. \uac04\ub2e8\ud55c Editor Window\ub97c \ub9cc\ub4e4\uc5b4\uc11c \uc5b4\uc148\ube14\ub9ac\uac00 \ub9ac\ub85c\ub4dc \ub418\ub354\ub77c\ub3c4 \uc720\uc9c0\ub418\ub294 \ud074\ub798\uc2a4\ub97c \ud3ec\ud568\ud558\ub3c4\ub85d \ud574 \ubd05\uc2dc\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true \">using UnityEngine;\r\nusing UnityEditor;\r\n\r\npublic class MyWindow : EditorWindow\r\n{\r\n\tprivate SerializeMe m_SerialziedThing;\r\n\r\n\t[MenuItem (\"Window\/Serialization\")]\r\n\tstatic void Init () {\r\n\t\tGetWindow ();\r\n\t}\r\n\r\n\tvoid OnEnable ()\r\n\t{\r\n\t\thideFlags = HideFlags.HideAndDontSave;\r\n\t\tif (m_SerialziedThing == null)\r\n\t\t\tm_SerialziedThing = new SerializeMe ();\r\n\t}\r\n\r\n\tvoid OnGUI () {\r\n\t\tGUILayout.Label (\"Serialized Things\", EditorStyles.boldLabel);\r\n\t\tm_SerialziedThing.OnGUI ();\r\n\t}\r\n}<\/pre>\n<pre class=\"lang:c# decode:true \">using UnityEditor;\r\n\r\npublic struct NestedStruct\r\n{\r\n\tprivate float m_StructFloat;\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tm_StructFloat = EditorGUILayout.FloatField(\"Struct Float\", m_StructFloat);\r\n\t}\r\n}\r\n\r\npublic class SerializeMe\r\n{\r\n\tprivate string m_Name;\r\n\tprivate int m_Value;\r\n\r\n\tprivate NestedStruct m_Struct;\r\n\r\n\tpublic SerializeMe ()\r\n\t{\r\n\t\tm_Struct = new NestedStruct();\r\n\t\tm_Name = \"\";\r\n\t}\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tm_Name = EditorGUILayout.TextField( \"Name\", m_Name);\r\n\t\tm_Value = EditorGUILayout.IntSlider (\"Value\", m_Value, 0, 10);\r\n\r\n\t\tm_Struct.OnGUI ();\r\n\t}\r\n}<\/pre>\n<p>\uc774 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uc5ec \uac15\uc81c\ub85c \uc5b4\uc148\ube14\ub9ac\ub97c \ub9ac\ub85c\ub4dc \ud558\uac8c \ud574\ubcf4\uba74 \uc5ec\ub7ec\ubd84\uc774 \uc785\ub825\ud55c \ub370\uc774\ud130\uac00 \ud6c5 \ub0a0\ub77c\uac00\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. (\uadf8\ub7ec\ub2c8\uae4c \ud14c\uc2a4\ud2b8\uc6a9 \ub370\uc774\ud130\ub97c \ub108\ubb34 \uc815\uc131\uc2a4\ub7fd\uac8c \uc785\ub825\ud560 \ud544\uc694\ub294 \uc5c6\uc2b5\ub2c8\ub2e4.) \uc5b4\uc148\ube14\ub9ac\uac00 \ub9ac\ub85c\ub4dc \ub418\uba74\uc11c 'm_SerializedThing'\uac00 \uc0ac\ub77c\uc838\uc11c \uadf8\ub807\uc2b5\ub2c8\ub2e4. \ud604\uc7ac\ub294 \uc774 \ud074\ub798\uc2a4\uac00 Serialize \ub418\ub3c4\ub85d \ud45c\uc2dc\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Serialization\uc774 \uc81c\ub300\ub85c \ub3d9\uc791\ud558\uae30 \uc704\ud574\uc11c \uba87\uac00\uc9c0 \uc791\uc5c5\uc744 \ud574 \uc918\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>MyWindow.cs :<\/p>\n<ul>\n<li>'m_SerializedThing' \ud544\ub4dc\uc5d0 [SerializeField] \uc18d\uc131\uc744 \ucd94\uac00\ud574 \uc918\uc57c \ud569\ub2c8\ub2e4. \uc774 \uc18d\uc131\uc740 \uc5b4\uc148\ube14\ub9ac\uac00 \ub9ac\ub85c\ub4dc \ub420 \ub54c \ud574\ub2f9 private \ud544\ub4dc\ub97c serialize \ud574\uc57c \ud55c\ub2e4\ub294 \uac83\uc744 \uc720\ub2c8\ud2f0\uc5d0 \uc54c\ub824\uc90d\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>SerializeMe.cs :<\/p>\n<ul>\n<li>'SerializeMe' \ud074\ub798\uc2a4\uc5d0 [Serializeable] \uc18d\uc131\uc744 \ucd94\uac00\ud574 \uc918\uc57c \ud569\ub2c8\ub2e4. \uc774\ub294 \ud574\ub2f9 \ud074\ub798\uc2a4\uac00 Serialize \ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc744 \uc720\ub2c8\ud2f0\uc5d0 \uc54c\ub824\uc90d\ub2c8\ub2e4.<\/li>\n<li>'NestedStruct' \uad6c\uc870\uccb4\uc5d0 [Serializable] \uc18d\uc131\uc744 \ucd94\uac00\ud574 \uc918\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<li>public \uc774 \uc544\ub2cc \uac01\uac01\uc758 \ud544\ub4dc\uc5d0 [SerializeField] \uc18d\uc131\uc744 \ucd94\uac00\ud574 \uc918\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc791\uc5c5\uc774 \ub05d\ub098\uace0 \ub098\uc11c \uc708\ub3c4\uc6b0\ub97c \uc5f4\uc5b4 \ub370\uc774\ud130\ub97c \uc218\uc815\ud574 \ubd05\ub2c8\ub2e4. \uc774\uc81c\ub294 \uc5b4\uc148\ube14\ub9ac\uac00 \ub9ac\ub85c\ub4dc \ub418\ub354\ub77c\ub3c4 \ub370\uc774\ud130\uac00 \ub0a0\uc544\uac00\uc9c0 \uc54a\uac8c \ub428\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc11c \uad6c\uc870\uccb4\uc5d0\uc11c\ub294 Serialization\uc744 \uc81c\ub300\ub85c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \uc911\uc694\ud55c \ud3ec\uc778\ud2b8\ub97c \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. 'NestedStruct'\ub97c \uad6c\uc870\uccb4\uc5d0\uc11c \ud074\ub798\uc2a4\ub85c \ubcc0\uacbd\ud558\uba74 \ubb38\uc81c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ucf54\ub4dc\ub294 \uc544\ub798\uc640 \uac19\uc740 \ud615\ud0dc\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true \">using UnityEngine;\r\nusing UnityEditor;\r\n\r\npublic class MyWindow : EditorWindow\r\n{\r\n\tprivate SerializeMe m_SerialziedThing;\r\n\r\n\t[MenuItem (\"Window\/Serialization\")]\r\n\tstatic void Init () {\r\n\t\tGetWindow ();\r\n\t}\r\n\r\n\tvoid OnEnable ()\r\n\t{\r\n\t\thideFlags = HideFlags.HideAndDontSave;\r\n\t\tif (m_SerialziedThing == null)\r\n\t\t\tm_SerialziedThing = new SerializeMe ();\r\n\t}\r\n\r\n\tvoid OnGUI () {\r\n\t\tGUILayout.Label (\"Serialized Things\", EditorStyles.boldLabel);\r\n\t\tm_SerialziedThing.OnGUI ();\r\n\t}\r\n}\r\n\r\nusing System;\r\nusing UnityEditor;\r\nusing UnityEngine;\r\n\r\n[Serializable]\r\npublic class NestedStruct\r\n{\r\n\t[SerializeField]\r\n\tprivate float m_StructFloat;\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tm_StructFloat = EditorGUILayout.FloatField(\"Struct Float\", m_StructFloat);\r\n\t}\r\n}\r\n\r\n[Serializable]\r\npublic class SerializeMe\r\n{\r\n\t[SerializeField]\r\n\tprivate string m_Name;\r\n\t[SerializeField]\r\n\tprivate int m_Value;\r\n\t[SerializeField]\r\n\tprivate NestedStruct m_Struct;\r\n\r\n\tpublic SerializeMe ()\r\n\t{\r\n\t\tm_Struct = new NestedStruct();\r\n\t\tm_Name = \"\";\r\n\t}\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tm_Name = EditorGUILayout.TextField( \"Name\", m_Name);\r\n\t\tm_Value = EditorGUILayout.IntSlider (\"Value\", m_Value, 0, 10);\r\n\r\n\t\tm_Struct.OnGUI ();\r\n\t}\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\uba87\uac00\uc9c0 Serialization \uaddc\uce59<\/strong><\/p>\n<ul>\n<li>\uad6c\uc870\uccb4\ub294 \uc4f0\uc9c0 \ub9d0\uc790<\/li>\n<li>Serialize \ud558\uace0 \uc2f6\uc740 \ud074\ub798\uc2a4\uc5d0\ub294 [Serializable] \uc18d\uc131\uc744 \ubd99\uc5ec\uc8fc\uc790<\/li>\n<li>([Serializable] \ud45c\uc2dc\uac00\ub41c \ud074\ub798\uc2a4\uc5d0\uc11c) public \ud544\ub4dc\ub294 \uc54c\uc544\uc11c Serialize \ub41c\ub2e4.<\/li>\n<li>private \ud544\ub4dc\ub294 \ud2b9\uc815 \uc0c1\ud669(Editor)\uc5d0\uc11c \u00a0Serialize \ub41c\ub2e4.<\/li>\n<li>private \ud544\ub4dc\uac00 serialize \ub418\uae30\ub97c \uc6d0\ud55c\ub2e4\uba74 [SerializeField] \uc18d\uc131\uc744 \ubd99\uc5ec\uc8fc\uc790<\/li>\n<li>\ud2b9\uc815 \ud544\ub4dc\uac00 serialize \ub418\ub294 \uac83\uc744 \uc6d0\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 [NonSerialized] \uc18d\uc131\uc744 \ubd99\uc5ec\uc8fc\uc790<\/li>\n<\/ul>\n<p><strong>ScriptableObjects<\/strong><\/p>\n<p>\uc9c0\uae08\uae4c\uc9c0 \ubcf4\ud1b5\uc758 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec Serialization \ud558\ub294 \uac83\uc744 \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uc720\ub2c8\ud2f0\uc5d0\uc11c \uc21c\uc218\ud55c \ud074\ub798\uc2a4\ub97c Serialization \ud560 \ub54c\ub294 \uba87\uac00\uc9c0 \uc774\uc288\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \uc608\uc81c\ub97c \ubd05\uc2dc\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true \">using System;\r\nusing UnityEditor;\r\nusing UnityEngine;\r\n\r\n[Serializable]\r\npublic class NestedClass\r\n{\r\n\t[SerializeField]\r\n\tprivate float m_StructFloat;\r\n\tpublic void OnGUI()\r\n\t{\r\n\t\tm_StructFloat = EditorGUILayout.FloatField(\"Float\", m_StructFloat);\r\n\t}\r\n}\r\n\r\n[Serializable]\r\npublic class SerializeMe\r\n{\r\n\t[SerializeField]\r\n\tprivate NestedClass m_Class1;\r\n\r\n\t[SerializeField]\r\n\tprivate NestedClass m_Class2;\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tif (m_Class1 == null)\r\n\t\t\tm_Class1 = new NestedClass ();\r\n\t\tif (m_Class2 == null)\r\n\t\t\tm_Class2 = m_Class1;\r\n\r\n\t\tm_Class1.OnGUI();\r\n\t\tm_Class2.OnGUI();\r\n\t}\r\n}<\/pre>\n<p>\uc774 \uc608\uc81c\ub294 \uc720\ub2c8\ud2f0 Serialization \uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud560 \ub54c \uc2e0\uacbd\uc4f0\uc9c0 \uc54a\uc73c\uba74 \uc2e4\uc218\ud560\ub9cc\ud55c \uc0c1\ud669\uc744 \ubcf4\uc5ec\uc8fc\uae30 \uc704\ud55c \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uc608\uc81c\ub97c \ubcf4\uba74 \ub450\uac1c\uc758 NestedClass \ud544\ub4dc\uac00 \uc788\uc74c\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc708\ub3c4\uc6b0\ub97c \ucc98\uc74c \uc5f4\uba74 \uac19\uc740 \uac83\uc744 \ucc38\uc870\ud558\ub294 m_Class1\uacfc m_Class2 \ud544\ub4dc\uac00 \ubcf4\uc774\uace0 \ud55c\ucabd\uc758 \uac12\uc744 \uc218\uc815\ud558\uba74 \uc591\ucabd\uc758 \uac12\uc774 \ub3d9\uc2dc\uc5d0 \ubc14\ub00c\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \ud50c\ub808\uc774 \ubaa8\ub4dc\uc5d0 \ub4e4\uc5b4\uac14\ub2e4 \ub098\uc640\uc11c \uc5b4\uc148\ube14\ub9ac\ub97c \ub9ac\ub85c\ub4dc \ud574 \ubd05\uc2dc\ub2e4.... \uadf8\ub7ec\uba74 m_Class1\uacfc m_Class2\uac00 \uc11c\ub85c \ub2e4\ub978 \uac1d\uccb4\ub97c \ucc38\uc870\ud558\uac8c \ub429\ub2c8\ub2e4. \uc774\ub294 \ud074\ub798\uc2a4\uc5d0 \ub2e8\uc21c\ud788 [Serializable] \ud45c\uc2dc\ub97c \ud588\uc744 \ub54c \ub3d9\uc791\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc720\ub2c8\ud2f0\ub294 \uc77c\ubc18 \ud074\ub798\uc2a4\ub97c Serialize \ud560 \ub54c \uc5ec\ub7ec \ud544\ub4dc\uac00 \uac19\uc740 \uac1d\uccb4\ub97c \uacf5\uc720\ud558\ub354\ub77c\ub3c4 \uac01\uac01\uc758 \ud544\ub4dc\uc5d0 \ub300\ud574\uc11c \uac1c\ubcc4\uc801\uc73c\ub85c Serialize\ub97c \uc218\ud589\ud569\ub2c8\ub2e4. \uac19\uc740 \uac1d\uccb4\ub97c \uc5ec\ub7ec\ubc88 Serialize\ud558\uac8c \ub418\uace0 Deserialize \uc2dc\uc5d0\ub294 \uc774\uac83\ub4e4\uc774 \uac19\uc740 \uac1d\uccb4\uc778\uc9c0 \uc54c \uc218 \uc5c6\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ud55c\uacc4\ub294 \ubcf5\uc7a1\ud55c \uc2dc\uc2a4\ud15c\uc744 \ub514\uc790\uc778 \ud560 \ub54c \ud074\ub798\uc2a4\ub4e4 \uac04\uc758 \ubcf5\uc7a1\ud55c \uad00\uacc4\ub97c \uc815\ud655\ud788 \uc54c\uc544\ub0bc \uc218 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uad49\uc7a5\ud788 \uad34\ub85c\uc6b4 \uc0c1\ud669\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c ScriptableObject\uc5d0 \ub4e4\uc5b4\uac00 \ubd05\uc2dc\ub2e4! ScriptableObject\ub294 \ud074\ub798\uc2a4\uac00 \ucc38\uc870\ub85c\uc11c \uc815\ud655\ud788 Serialize \ub418\uae30 \ub54c\ubb38\uc5d0 \uc5ec\ub7ec \ud544\ub4dc\uac00 \uacf5\uc720\ud558\ub294 \ud558\ub098\uc758 \uac1d\uccb4\ub97c \ud55c\ubc88\ub9cc Serialize \ud569\ub2c8\ub2e4. \uc989 \ud074\ub798\uc2a4\ub4e4\uc774 \ubcf5\uc7a1\ud558\uac8c \uc5ee\uc5ec \uc788\uc5b4\ub3c4 \uc608\uc0c1\ub300\ub85c \uc815\ud655\ud558\uac8c \uc800\uc7a5\ud569\ub2c8\ub2e4. \ub0b4\ubd80\uc801\uc73c\ub85c ScriptableObject\ub294 MonoBehaviour\uc640 \ub3d9\uc77c\ud558\uc9c0\ub9cc GameObject\uc5d0 \ubd99\uc77c \uc218 \uc5c6\ub2e4\ub294 \uac83\uc774 MonoBehaviour\uc640\uc758 \ucc28\uc774\uc810\uc785\ub2c8\ub2e4. \u00a0\uadf8\ub9ac\uace0 \uc77c\ubc18\uc801\uc778 \ub370\uc774\ud130 \uad6c\uc870 Serialization\ud558\uae30 \uad49\uc7a5\ud788 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc704 \uc608\uc81c\uac00 \uc815\ud655\ud558\uac8c Serialize\ub97c \uc218\ud589\ud558\ub3c4\ub85d \uc218\uc815\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true \">using System;\r\nusing UnityEditor;\r\nusing UnityEngine;\r\n\r\n[Serializable]\r\npublic class NestedClass : ScriptableObject\r\n{\r\n\t[SerializeField]\r\n\tprivate float m_StructFloat;\r\n\r\n\tpublic void OnEnable() { hideFlags = HideFlags.HideAndDontSave; }\r\n\r\n\tpublic void OnGUI()\r\n\t{\r\n\t\tm_StructFloat = EditorGUILayout.FloatField(\"Float\", m_StructFloat);\r\n\t}\r\n}\r\n\r\n[Serializable]\r\npublic class SerializeMe\r\n{\r\n\t[SerializeField]\r\n\tprivate NestedClass m_Class1;\r\n\r\n\t[SerializeField]\r\n\tprivate NestedClass m_Class2;\r\n\r\n\tpublic SerializeMe ()\r\n\t{\r\n\t\tm_Class1 = ScriptableObject.CreateInstance ();\r\n\t\tm_Class2 = m_Class1;\r\n\t}\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tm_Class1.OnGUI();\r\n\t\tm_Class2.OnGUI();\r\n\t}\r\n}<\/pre>\n<p>\uc704 \uc608\uc81c\ub294 \uc138\uac00\uc9c0 \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>NestedClass\ub294 ScriptableObject\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\uc0dd\uc131\uc790\ub97c \ud638\ucd9c\ud558\ub294 \uac83\uc774 \uc544\ub2cc CreateInstance&lt;&gt; \ud568\uc218\ub85c \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/li>\n<li>HideFlags\ub97c \uc124\uc815\ud574 \uc90d\ub2c8\ub2e4... \ub4a4\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc774 \uac04\ub2e8\ud55c \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc5ec\ub7ec \ucc38\uc870\uac00 \uac19\uc740 \uc778\uc2a4\ud134\uc2a4\ub97c \ucc38\uc870\ud558\ub294 \uc0c1\ud669\uc5d0\uc11c NestedClass\uc758 \uc778\uc2a4\ud134\uc2a4\uac00 \ud55c\ubc88\ub9cc Serialize \ub41c\ub2e4\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n<p><strong>ScriptableObject \ucd08\uae30\ud654<\/strong><\/p>\n<p>\uc704\uc5d0\uc11c \uc0c1\ud638 \ucc38\uc870\uac00 \uc788\ub294 \ubcf5\uc7a1\ud55c \ub370\uc774\ud130 \uad6c\uc870\uc5d0\ub294 ScriptableObject\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\ub2e4\ub294 \uac83\uc744 \uc54c\uc558\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc0ac\uc6a9\uc790 \ucf54\ub4dc\uc5d0\uc11c ScriptableObject\ub97c \uc5b4\ub5a4\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud574\uc57c \ud560\uae4c\uc694? \uc6b0\uc120 ScriptableObject\uac00 \uc720\ub2c8\ud2f0 Serialization \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc5b4\ub5a4\uc2dd\uc73c\ub85c \ucd08\uae30\ud654\ub418\ub294\uc9c0 \uc54c\uc544\ubd05\uc2dc\ub2e4.<\/p>\n<ol>\n<li>ScriptableObject\uc758 \uc0dd\uc131\uc790\uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4.<\/li>\n<li>(\ub370\uc774\ud130\uac00 \ub4e4\uc5b4 \uc788\uc73c\uba74 ) \uc720\ub2c8\ud2f0\uc758 C++ \uc601\uc5ed\uc5d0\uc11c \ub370\uc774\ud130\uac00 Serialize \ub418\uc5b4 \uac1d\uccb4\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<li>ScriptableObject\uc758 OnEnable()\uc774 \ud638\ucd9c\ub429\ub2c8\ub2e4.<\/li>\n<\/ol>\n<p>\uc774\ub7ec\ud55c \uc0ac\uc2e4\uc744 \ud1a0\ub300\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\ud56d\uc744 \uc774\uc57c\uae30 \ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc0dd\uc131\uc790\uc5d0\uc11c \ucd08\uae30\ud654 \ud558\ub294 \uac83\uc740 Serialization \uc2dc\uc2a4\ud15c\uc5d0 \uc758\ud574 \ub370\uc774\ud130\uac00 \ub36e\ud790 \uc218 \uc788\uc73c\ubbc0\ub85c \ubcc4\ub85c \uc88b\uc740 \uc0dd\uac01\uc774 \uc544\ub2c8\ub2e4.<\/li>\n<li>Serialization\uc740 \uc0dd\uc131 \uc774\ud6c4\uc5d0 \uc77c\uc5b4\ub098\uae30 \ub54c\ubb38\uc5d0 \uc218\uc815\uc744 \ud558\ub824\uba74 Serialization \uc774\ud6c4\uc5d0 \ud574\uc57c \ud55c\ub2e4.<\/li>\n<li>OnEnable()\uc774 \ucd08\uae30\ud654 \ud558\uae30 \uac00\uc7a5 \uc88b\uc740 \uc704\uce58\uc778 \ub4ef \ud558\ub2e4.<\/li>\n<\/ul>\n<p>'SerializeMe' \ud074\ub798\uc2a4\uac00 ScripableObject\ub97c \uc0c1\uc18d\ubc1b\ub3c4\ub85d \ubc14\uafd4\uc11c ScriptableObject\uc758 \uc62c\ubc14\ub978 \ucd08\uae30\ud654 \ud328\ud134\uc744 \uc54c\uc544\ubd05\uc2dc\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true \">\/\/ also updated the Window to call CreateInstance instead of the constructor\r\nusing System;\r\nusing UnityEngine;\r\n\r\n[Serializable]\r\npublic class SerializeMe : ScriptableObject\r\n{\r\n\t[SerializeField]\r\n\tprivate NestedClass m_Class1;\r\n\r\n\t[SerializeField]\r\n\tprivate NestedClass m_Class2;\r\n\r\n\tpublic void OnEnable ()\r\n\t{\r\n\t\thideFlags = HideFlags.HideAndDontSave;\r\n\t\tif (m_Class1 == null)\r\n\t\t{\r\n\t\t\tm_Class1 = CreateInstance ();\r\n\t\t\tm_Class2 = m_Class1;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tm_Class1.OnGUI();\r\n\t\tm_Class2.OnGUI();\r\n\t}\r\n}<\/pre>\n<p>\uc5bc\ud54f \ubd10\uc11c\ub294 \ubcc4\ub85c \ubc14\ub010\uac8c \uc5c6\uc5b4\ubcf4\uc785\ub2c8\ub2e4. ScriptableObject\ub97c \uc0c1\uc18d\ubc1b\uac8c \ub418\uc5c8\uace0, \uc0dd\uc131\uc790 \ub300\uc2dc OnEnable()\uc744 \uc0ac\uc6a9\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc815\ub9d0 \uc911\uc694\ud55c \uac83\uc740 \ubc30\ud6c4\uc5d0 \uc228\uaca8\uc838 \uc788\uc2b5\ub2c8\ub2e4.... OnEnable() \ud568\uc218\ub294 Serialization\uc774 \uc218\ud589\ub41c \uc774\ud6c4\uc5d0 \ud638\ucd9c\ub429\ub2c8\ub2e4. \uc774\ub7f0 \ud2b9\uc9d5\uc73c\ub85c \uc778\ud574 [SerializedField]\ub4e4\uc740 null\uc77c \uc218\ub3c4 \uc788\uace0 \uc544\ub2d0\uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d\uc5d0 null\uc774\ub77c\uba74 \ub9c9 \uc0dd\uc131\ub41c \uac83\uc774\uace0 \uc544\ub2c8\ub77c\uba74 \uba54\ubaa8\ub9ac\uc5d0 \ub85c\ub4dc\ub41c \uac83\uc774\ub77c\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. OnEnable()\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \uc0dd\uc131\uc790\uc5d0\uc11c \ud588\ub358\uac83 \ucc98\ub7fc Private \ud544\ub4dc\ub098 [NonSerialized] \ud544\ub4dc\ub97c \ucd08\uae30\ud654 \ud558\uae30 \uc704\ud55c \ud568\uc218\ub97c \ud638\ucd9c\ud558\ub294\ub370 \u00a0\uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p><strong>HideFlags<\/strong><\/p>\n<p>\uc704 \uc608\uc81c\ub97c \ubcf4\uba74 hideFlags\uc5d0 HideFlags.HideAndDontSave\ub97c \uc124\uc815\ud558\uace0 \uc788\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0This is a special setup that is required when writing custom data structures that have no root in the scene. This is to get around how scene loading works in Unity.<\/p>\n<p>\uc720\ub2c8\ud2f0\ub294 Scene\uc774 \ub85c\ub4dc\ub418\uba74 \ub0b4\ubd80\uc801\uc73c\ub85c Resources.UnloadUnusedAssets\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4. \uadf8\ub7ec\uba74 \uac00\ube44\uc9c0 \uceec\ub809\ud130\ub294 Scene\uc744 '\ucd5c\uc0c1\uc704'\ub85c\uc11c hierarchy\ub97c \uc21c\ud68c\ud558\uba70 \ucc38\uc870\ub418\uc9c0 \uc54a\ub294 asset\uc744 \ucc3e\uc544\ub0c5\ub2c8\ub2e4. \u00a0ScriptableObject\uc5d0 HideAndDontSave \ud50c\ub798\uadf8\ub97c \uc124\uc815\ud558\ub294 \uac83\uc740 \uc720\ub2c8\ud2f0\uac00 \ud574\ub2f9 \uc624\ube0c\uc81d\ud2b8\ub97c \ucd5c\uc0c1\uc704 \uc624\ube0c\uc81d\ud2b8\ub85c \uac04\uc8fc\ud558\ub77c\uace0 \uc54c\ub824\uc8fc\ub294 \uac83\uc785\ub2c8\ub2e4. \u00a0\uc774\ub85c\uc11c \u00a0\uc5b4\uc148\ube14\ub9ac\uac00 \ub9ac\ub85c\ub4dc \ub418\uc5b4\ub3c4 \uc0ac\ub77c\uc9c0\uc9c0 \uc54a\uac8c \ub429\ub2c8\ub2e4. \ubb3c\ub860 Destroy()\ub97c \ud638\ucd9c\ud558\uba74 \uc18c\uba78\ub429\ub2c8\ub2e4.<\/p>\n<p><strong>\uba87 \uac00\uc9c0 ScriptableObject \uaddc\uce59\ub4e4<\/strong><\/p>\n<ul>\n<li>ScriptableObject\ub294 \ucc38\uc870\ub97c \uc815\ud655\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud55c\ubc88\ub9cc Serialize \ub41c\ub2e4.<\/li>\n<li>ScriptableObject\ub97c \ucd08\uae30\ud654\ud558\ub294\ub370 OnEnable\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n<li>ScriptableObject\ub97c new\ub85c \uc0dd\uc131\ud558\uc9c0 \ub9d0\uace0 CreateInstance\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n<li>\ud55c\ubc88\uc529\ub9cc \ucc38\uc870\ub418\ub294 \uc911\ucca9 \ub370\uc774\ud130 \uad6c\uc870\uc5d0\uc11c\ub294 ScriptableObject\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc624\ud788\ub824 \uc190\ud574\ub2e4.<\/li>\n<li>ScriptableObject\uac00 Scene\uc5d0\uc11c \ucd5c\uc0c1\uc704\ub85c \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc744 \ub54c\ub294 HideAndDontSave \ud50c\ub798\uadf8\ub97c \uc124\uc815\ud574 \uc918\ub77c.<\/li>\n<\/ul>\n<p><strong>Concrete Array Serialization<\/strong><\/p>\n<p>\uc544\ub798\uc758 concrete class\ub4e4\uc744 serialize \ud558\ub294 \uc608\uc81c\ub97c \ubd05\uc2dc\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true \">using System;\r\nusing System.Collections.Generic;\r\nusing UnityEditor;\r\nusing UnityEngine;\r\n\r\n[Serializable]\r\npublic class BaseClass\r\n{\r\n\t[SerializeField]\r\n\tprivate int m_IntField;\r\n\tpublic void OnGUI() {m_IntField = EditorGUILayout.IntSlider (\"IntField\", m_IntField, 0, 10);}\r\n}\r\n\r\n[Serializable]\r\npublic class SerializeMe : ScriptableObject\r\n{\r\n\t[SerializeField]\r\n\tprivate List m_Instances;\r\n\r\n\tpublic void OnEnable ()\r\n\t{\r\n\t\thideFlags = HideFlags.HideAndDontSave;\r\n\t\tif (m_Instances == null)\r\n\t\t\tm_Instances = new List ();\r\n\t}\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tforeach (var instance in m_Instances)\r\n\t\t\tinstance.OnGUI ();\r\n\r\n\t\tif (GUILayout.Button (\"Add Simple\"))\r\n\t\t\tm_Instances.Add (new BaseClass ());\r\n\t}\r\n}<\/pre>\n<p>\uc704 \uc608\uc81c\ub294 Add Simple \ubc84\ud2bc\uc744 \ud074\ub9ad\ud560 \ub54c\ub9c8\ub2e4 BaseClass\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\uc5ec \ub9ac\uc2a4\ud2b8\uc5d0 \ucd94\uac00\ud558\ub294 \uac04\ub2e8\ud55c \uc608\uc81c\uc785\ub2c8\ub2e4. SerializeMe\ub294 \uc704\uc5d0\uc11c \uc774\uc57c\uae30\ud588\ub358 \ubc29\uc2dd\ub300\ub85c \uc815\ud655\ud558\uac8c Serialize\uac00 \uc218\ud589\ub429\ub2c8\ub2e4. Serialize \ud558\ub77c\uace0 \ud45c\uc2dc\ub41c List\ub294 \uac01\uac01\uc758 \uc694\uc18c\ub97c \uac1c\ubcc4\ub85c serialize \ud569\ub2c8\ub2e4.<\/p>\n<p><strong>General Array Serialization<\/strong><\/p>\n<p>\uc704\uc758 \uc608\uc81c\uc5d0\uc11c base class \uc640 child class\ub97c \ud3ec\ud568\ud558\ub294 List\ub97c serialize \ud558\ub3c4\ub85d \uc218\uc815\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true\">using System;\r\nusing System.Collections.Generic;\r\nusing UnityEditor;\r\nusing UnityEngine;\r\n\r\n[Serializable]\r\npublic class BaseClass\r\n{\r\n\t[SerializeField]\r\n\tprivate int m_IntField;\r\n\tpublic virtual void OnGUI() { m_IntField = EditorGUILayout.IntSlider(\"IntField\", m_IntField, 0, 10); }\r\n}\r\n\r\n[Serializable]\r\npublic class ChildClass : BaseClass\r\n{\r\n\t[SerializeField]\r\n\tprivate float m_FloatField;\r\n\tpublic override void OnGUI()\r\n\t{\r\n\t\tbase.OnGUI ();\r\n\t\tm_FloatField = EditorGUILayout.Slider(\"FloatField\", m_FloatField, 0f, 10f);\r\n\t}\r\n}\r\n\r\n[Serializable]\r\npublic class SerializeMe : ScriptableObject\r\n{\r\n\t[SerializeField]\r\n\tprivate List m_Instances;\r\n\r\n\tpublic void OnEnable ()\r\n\t{\r\n\t\tif (m_Instances == null)\r\n\t\t\tm_Instances = new List ();\r\n\r\n\t\thideFlags = HideFlags.HideAndDontSave;\r\n\t}\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tforeach (var instance in m_Instances)\r\n\t\t\tinstance.OnGUI ();\r\n\r\n\t\tif (GUILayout.Button (\"Add Base\"))\r\n\t\t\tm_Instances.Add (new BaseClass ());\r\n\t\tif (GUILayout.Button (\"Add Child\"))\r\n\t\t\tm_Instances.Add (new ChildClass ());\r\n\t}\r\n}<\/pre>\n<p>\uc608\uc81c\ub294 ChildClass\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud655\uc7a5\ub418\uc5c8\uc9c0\ub9cc Serialize\uc5d0\ub294 BaseClass\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. ChildClass\uc640 BaseClass\ub97c \uba87\uac1c \uc0dd\uc131\ud574 \ubcf4\uba74 \uc815\ud655\ud558\uac8c \ub3d9\uc791\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ubb38\uc81c\ub294 \uc5b4\uc148\ube14\ub9ac \ub9ac\ub85c\ub4dc\uac00 \uc77c\uc5b4\ub0a0 \ub54c \ubc1c\uc0dd\ud569\ub2c8\ub2e4. \ub9ac\ub85c\ub4dc\uac00 \ub05d\ub098\uace0\ub098\uba74 \ubaa8\ub4e0 \uc778\uc2a4\ud134\uc2a4\ub294 BaseClass\uac00 \ub418\uc5b4\ubc84\ub9ac\uace0 ChildClass\uc5d0 \ud3ec\ud568\ub41c \ub370\uc774\ud130\ub4e4\uc740 Serialization \uc2dc\uc2a4\ud15c\uc5d0 \uc758\ud574\uc11c \uc798\ub824\ub098\uac00 \ubc84\ub9bd\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7f0 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub824\uba74 \ud55c\ubc88\ub354 ScriptableObject\ub97c \uc0ac\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true \">using System;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\nusing UnityEditor;\r\n\r\n[Serializable]\r\npublic class MyBaseClass : ScriptableObject\r\n{\r\n\t[SerializeField]\r\n\tprotected int m_IntField;\r\n\r\n\tpublic void OnEnable() { hideFlags = HideFlags.HideAndDontSave; }\r\n\r\n\tpublic virtual void OnGUI ()\r\n\t{\r\n\t\tm_IntField = EditorGUILayout.IntSlider(\"IntField\", m_IntField, 0, 10);\r\n\t}\r\n}\r\n\r\n[Serializable]\r\npublic class ChildClass : MyBaseClass\r\n{\r\n\t[SerializeField]\r\n\tprivate float m_FloatField;\r\n\r\n\tpublic override void OnGUI()\r\n\t{\r\n\t\tbase.OnGUI ();\r\n\t\tm_FloatField = EditorGUILayout.Slider(\"FloatField\", m_FloatField, 0f, 10f);\r\n\t}\r\n}\r\n\r\n[Serializable]\r\npublic class SerializeMe : ScriptableObject\r\n{\r\n\t[SerializeField]\r\n\tprivate List m_Instances;\r\n\r\n\tpublic void OnEnable ()\r\n\t{\r\n\t\tif (m_Instances == null)\r\n\t\t\tm_Instances = new List();\r\n\r\n\t\thideFlags = HideFlags.HideAndDontSave;\r\n\t}\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tforeach (var instance in m_Instances)\r\n\t\t\tinstance.OnGUI ();\r\n\r\n\t\tif (GUILayout.Button (\"Add Base\"))\r\n\t\t\tm_Instances.Add(CreateInstance());\r\n\t\tif (GUILayout.Button (\"Add Child\"))\r\n\t\t\tm_Instances.Add(CreateInstance());\r\n\t}\r\n}<\/pre>\n<p>\uc774\uac78 \uc2e4\ud589\ud574\ubcf4\uba74 \uc5b4\uc148\ube14\ub9ac\uac00 \ub9ac\ub85c\ub4dc \ub418\ub354\ub77c\ub3c4 ScriptableObject\ub294 \uc0c1\uc18d\ub41c \ud0c0\uc785\uc774\ub354\ub77c\ub3c4 \ubc30\uc5f4\uc5d0 \uc815\ud655\ud558\uac8c serialize \ub418\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uae30\ubcf8 [Serializable] \ud074\ub798\uc2a4\ub294 \ub531 \uadf8\uc704\uce58\uc5d0 serialize \ub418\ub294 \ubc18\uba74 SerializableObject\ub294 \uc678\ubd80\uc5d0 Serialize \ub418\uace0 \uadf8 \ucc38\uc870\uac00 Collection\uc5d0 \ud3ec\ud568\ub418\uae30 \ub54c\ubb38\uc5d0 \uc815\ud655\ud788 \ub3d9\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc26c\uc5b4\ub9c1(Shearing:\ub370\uc774\ud130\uac00 \uc798\ub824\ub098\uac00\ub294 \ud604\uc0c1)\uc740 Serialization \uc2dc\uc2a4\ud15c\uc774 \ud0c0\uc785\uc744 \uc815\ud655\ud558\uac8c \uc778\uc9c0\ud558\uc9c0 \ubabb\ud558\uace0 base type\uc73c\ub85c \uac04\uc8fc\ud558\uae30 \ub54c\ubb38\uc5d0 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<p><strong>Serializing Abstract Classes<\/strong><\/p>\n<p>\uc704\uc5d0\uc11c \uc77c\ubc18 List\uc758 Serialization\uc774 \uac00\ub2a5\ud568\uc744 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774\uc81c abstract class\uc5d0\ub300\ud574\uc11c\ub294 \uc5b4\ub5bb\uac8c \ub3d9\uc791\ud558\ub294\uc9c0 \ubd05\uc2dc\ub2e4.<\/p>\n<pre class=\"lang:c# decode:true \">using System;\r\nusing UnityEditor;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\n[Serializable]\r\npublic abstract class MyBaseClass : ScriptableObject\r\n{\r\n\t[SerializeField]\r\n\tprotected int m_IntField;\r\n\r\n\tpublic void OnEnable() { hideFlags = HideFlags.HideAndDontSave; }\r\n\r\n\tpublic abstract void OnGUI ();\r\n}\r\n\r\n[Serializable]\r\npublic class ChildClass : MyBaseClass\r\n{\r\n\t[SerializeField]\r\n\tprivate float m_FloatField;\r\n\r\n\tpublic override void OnGUI()\r\n\t{\r\n\t\tm_IntField = EditorGUILayout.IntSlider(\"IntField\", m_IntField, 0, 10);\r\n\t\tm_FloatField = EditorGUILayout.Slider(\"FloatField\", m_FloatField, 0f, 10f);\r\n\t}\r\n}\r\n\r\n[Serializable]\r\npublic class SerializeMe : ScriptableObject\r\n{\r\n\t[SerializeField]\r\n\tprivate List m_Instances;\r\n\r\n\tpublic void OnEnable ()\r\n\t{\r\n\t\tif (m_Instances == null)\r\n\t\t\tm_Instances = new List();\r\n\r\n\t\thideFlags = HideFlags.HideAndDontSave;\r\n\t}\r\n\r\n\tpublic void OnGUI ()\r\n\t{\r\n\t\tforeach (var instance in m_Instances)\r\n\t\t\tinstance.OnGUI ();\r\n\r\n\t\tif (GUILayout.Button (\"Add Child\"))\r\n\t\t\tm_Instances.Add(CreateInstance());\r\n\t}\r\n}<\/pre>\n<p>\uc774 \ucf54\ub4dc\ub294 \uc55e\uc758 \uc608\uc81c\uc640 \ud761\uc0ac\ud558\uc9c0\ub9cc \uad49\uc7a5\ud788 \uc704\ud5d8\ud569\ub2c8\ub2e4.<\/p>\n<p>CreateInstance&lt;&gt;() \ud568\uc218\ub294 ScriptableObject\ub97c \uc0c1\uc18d\ubc1b\uc740 \ud0c0\uc785\uc73c\ub85c \ud638\ucd9c\ub418\uc5b4\uc57c \ud558\uace0 'MyBaseClass'\uac00 \ubc14\ub85c \uadf8\ub7f0 \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4. \uc774\ub294 abstract class\uc778 MyBaseClass\uac00 m_Instances \ubc30\uc5f4\uc5d0 \ucd94\uac00\ub420 \uac00\ub2a5\uc131\uc774 \uc788\ub2e4\ub294 \ub9d0\uc785\ub2c8\ub2e4. \ub9cc\uc57d \uc774\ub7f0\uc77c\uc774 \uc2e4\uc81c\ub85c \ubc1c\uc0dd\ud558\uba74 \uad6c\ud604\uc774 \uc5c6\ub294 abstract method\uc5d0 \uc811\uadfc\ud558\ub294 \ubd88\uc0c1\uc0ac\uac00 \ubc1c\uc0dd\ud558\uac8c \ub429\ub2c8\ub2e4. \u00a0OnGUI \uba54\uc11c\ub4dc\uc5d0\uc11c\ub294 \uc774\ub7f0 \ud2b9\uc218\ud55c \uacbd\uc6b0\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>List\ub098 \ud544\ub4dc\uc5d0 abstract class\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \ub3d9\uc791\ud569\ub2c8\ub2e4. \ubb3c\ub860 ScriptableObject\ub97c \uc0c1\uc18d\ubc1b\uc740 \uacbd\uc6b0\ub97c \ub9d0\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774\ub7f0 \ubc29\uc2dd\uc740 \ubcc4\ub85c \ucd94\ucc9c\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uac1c\uc778\uc801\uc73c\ub85c concrete class\uc758 \uad6c\ud604\uc744 \ube44\uc6cc\ub193\uc740 virtual \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub294\uac78 \ucd94\ucc9c\ud569\ub2c8\ub2e4. \uadf8\ub7ec\uba74 \uc801\uc5b4\ub3c4 \uc774\ub7f0 \ubd88\uc0c1\uc0ac\ub294 \uc0dd\uae30\uc9c0 \uc54a\uaca0\uc8e0.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc5ec\ub7ec\ubd84\uc740 \uc720\ub2c8\ud2f0\uc5d0 \uc544\uc8fc \uba4b\uc9c4 \uc5d0\ub514\ud130 \ud655\uc7a5\uc744 \ub9cc\ub4e4\uace0 \uc788\uace0 \uadf8\ub7f4\uc2f8\ud574 \ubcf4\uc785\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\uc774 \ub9cc\ub4e0 \ud234\ub85c \uc798 \uc815\ub9ac\ub41c \ub370\uc774\ud130 \uad6c\uc870\uccb4\ub4e4\uc744 \ubcf4\uba70 \ud750\ubb47\ud574 \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ud50c\ub808\uc774 \ubaa8\ub4dc\ub97c \uc2dc\uc791\ud558\uac70\ub098 \uc885\ub8cc\ud569\ub2c8\ub2e4. \uadf8\ub7ec\uc790 \uac11\uc790\uae30 \ub370\uc774\ud130\ub4e4\uc774 \ubabd\ub545 \uc0ac\ub77c\uc9c0\uace0 \ud234\uc740 \uae30\ubcf8\uc801\uc778 \uc0c1\ud0dc\ub85c \ucd08\uae30\ud654\ub429\ub2c8\ub2e4. \uc800\uc7a5\ud558\uc9c0 \uc54a\uace0 \ucef4\ud4e8\ud130\uac00 \uaebc\uc84c\uc744 \ub54c\ucc98\ub7fc &#8220;\ubb50\uc57c \uc2dcx!!!&#8221; \uc774\ub77c\ub294 \ub9d0\uc774 \ud280\uc5b4\ub098\uc635\ub2c8\ub2e4. \uc65c \uc774\ub7f0\uc77c\uc774 \uc0dd\uacbc\ub294\uc9c0 \uc54c\uae30 \uc704\ud574\uc11c\ub294 \uc720\ub2c8\ud2f0\uc758 Managed(Mono) \uc601\uc5ed\uc774 \uc5b4\ub5bb\uac8c \ub3d9\uc791\ud558\ub294\uc9c0 &hellip; <a href=\"http:\/\/milennium9.godohosting.com\/wordpress\/?p=72\" class=\"more-link\"><span class=\"screen-reader-text\">[Unity3D] Unity Serialization<\/span> \ub354\ubcf4\uae30 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_newsletter_tier_id":0},"categories":[1],"tags":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5PypW-1a","_links":{"self":[{"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/72"}],"collection":[{"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=72"}],"version-history":[{"count":3,"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/72\/revisions"}],"predecessor-version":[{"id":77,"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/72\/revisions\/77"}],"wp:attachment":[{"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=72"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=72"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/milennium9.godohosting.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=72"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}