рдПрдХрддрд╛ рд╕рдВрдкрд╛рджрдХ рдПрдбрд╡реЗрдВрдЪрд░реНрд╕: рд╕реАрд░рд┐рдпрд▓ рдореИрдЯреНрд░реАрд╢реЛрдХрд╛

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп


рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рдХреНрд░рдордмрджреНрдз рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдиреБрдЕрд▓ рдереЗрд░реЗрдкреА рд╣рдореЗрдВ FindPropertyRelative () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЪрд░ рдирд╛рдо рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИред

рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрд╛рд░рдг рдмрд╣реБрдд рд╡рд┐рд╡рд┐рдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЧреИрд░-рдЕрдиреБрдХреНрд░рдорд┐рдд рд╕рдВрдкрддреНрддрд┐ рддрдХ рдирдХрд╝рд▓реА рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рд╕реЗрдЯрд░ рдЧреЗрдЯрд░реНрд╕ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╡рд╕реНрддреБ рдХреЗ рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдкреВрдЫреЗрдВрдЧреЗ "рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ" рдФрд░ "рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ"ред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИ - рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИред

рддреЛ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╣рдо рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЙрд╕рдХреЗ рд╕рднреА рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдФрд░ рдХрдорд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рдХреНрд░рдорд╛рдВрдХрди рд╕рдбрд╝рдХ рдкрд░ рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛рдПред

рдзреНрдпрд╛рдиред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпреВрдирд┐рдЯреА рдПрдбрд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдХрд╕реНрдЯрдо рдкреНрд░реЙрдкрд░реНрдЯреАрд╡рд╛рд░реНрдбреНрд╕ рд▓рд┐рдЦреЗ, рдФрд░ рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕рдордЭреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рдкреНрд░реЙрдкрд░реНрдЯреА рдПрдХ рдХреНрд░рдордмрджреНрдз рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИред


рдХреНрд░рдордмрджреНрдзрддрд╛ рдкрде


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдУ рдкрд░ рд╕рднреА рдбреЙрдЯреНрд╕

рд▓рдЧрд╛рдПрдВред рд╕рдмрд╕реЗ рдЖрджрд┐рдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореЛрдиреЛрдмреЗрд╣рд╡рд╛рдпрд░ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╛рд░рд┐рд╕ рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд╖реЗрддреНрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреЛ рдХреНрд░рдордмрджреНрдз рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ A.K.A рдХреА рдкрд╡рд┐рддреНрд░ рдПрдХрд╛рддреНрдордХ рдЧрд╛рдп рд╕реЗ рдХреЛрдИ рд╡рд╛рд░рд┐рд╕ рдирд╣реАрдВ рд╣реИред UnityEngine.Objectред

public class ExamplePulsar : MonoBehaviour
{
...
        [Space][Header("Example Sandbox Inspector Field")]
        public SandboxField sandboxField;
...
}

рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рд╕реИрдВрдбрдмреЙрдХреНрд╕рдлрд╝рд┐рд▓реНрдб рдПрдХ рд╢реНрд░реЗрдгреА рд╣реИ, рдЬреЛ рд╕реАрд░рд┐рдпрд▓ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рд╕реНрд╡рд╛рдореА рдХреА рдореЛрдиреЛрдмреЗрд╣реЙрдЙрд░ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ:

UnityEngine.Object serializationRoot = property.serializedObject.targetObject;

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХреНрд░рдордмрджреНрдз рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рднреА рд▓рд╛рдареА рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХреЗред


рд╣рдо рдХреНрд░рдорд╛рдВрдХрди рдкрде рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:

string serializationPath = property.propertyPath;

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд░рдорд╛рдВрдХрди рдкрде рд╣рдорд╛рд░реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдиреЗрдЧрд╛ рдФрд░ "рд╕реИрдВрдбрдмреЙрдХреНрд╕рдлрд╝рд┐рд▓реНрдб" рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рди рддреЛ рдардВрдбреЗ рд╣реИрдВ рдФрд░ рди рд╣реА рдЧрд░реНрдо рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЪрд░ рдХрд╛ рдирд╛рдо рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ, рд╕рдВрдпреЛрдЧрд╡рд╢, рд╣рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХреЛрдИ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЛрдиреЛрд╣реЗрд╡рд┐рдпрд░ рдирд╣реАрдВ рд╣реИред рдЕрдм рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╣рдо рдПрдХ рд░реВрд╕реА рдЧреБрдбрд╝рд┐рдпрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
nestedClassVariable.exampleSandboxesList.Array.data [0] .evenMoreNested.Array.data [0]
рдмрд╛рдж рдореЗрдВ рдкрдХрдбрд╝реЗ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ:

string[] path = property.propertyPath.Split('.');

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд░рдорд╛рдВрдХрди рдкрде рдХреЗ рд╕рднреА рдиреЛрдб рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЖрджрд┐рдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рдиреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗ рд▓реЛ:

string pathNode = path[0];

рдереЛрдбрд╝рд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдФрд░ рдпрд╣рд╛рдВ рд╕реЗ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

Type objectType = serializationRoot.GetType();
FieldInfo objectFieldInfo = objectType.GetField(pathNode);
object field = objectFieldInfo.GetValue(serializationRoot);

рд╣рдо рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ рдЗрд╕ рдЙрджреНрдпрдо рдХреА рдЧрддрд┐ рдХрд╛ рд╕рд╡рд╛рд▓ред рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рд▓рд╛рдЧрдд рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╣реЛрдЧреА рдЬреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдпреВрдирд┐рдЯреАрдбрд┐рдЯрд░ рдХреЗ рд╣реБрдб рдХреЗ рддрд╣рдд рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░рдорд╛рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдПрдХ рдЧрд┐рддреБрдм рдкрд░, рдпреВрдирд┐рдЯреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬ рд╣реИ, рдпреВрдирд┐рдЯреАрд╕реАрдЖрд░ рд╕рдВрджрд░реНрдн, рдЕрдкрдиреЗ рдЕрд╡рдХрд╛рд╢ рдХреЛ рджреЗрдЦреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯрдлрд┐рд▓реНрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ (рд╣рд╛ рд╣рд╛) рдирд╣реАрдВ рд╣реИ рд╕рдм рдХреБрдЫред рд╣рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдорд┐рд▓рд╛ рд╣реИ, рд╣рдо рдЦреБрд╢ рд╣реИрдВ, рд╣рдо рдЬреЛ рдЪрд╛рд╣реЗрдВ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рднреА рдмрдЯрди рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдпреВрдирд┐рдЯреАрдИрд╡реЗрдВрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рд╕ рд╡рд╕реНрддреБ рдкрд░ рд▓рдЯрдХрд╛ рд╣реЛред

рдХрдо рд╕реЗ рдХрдо, рдЬрдмрдХрд┐ рдпрд╣ рдЗрд╕ рд╡рд╕реНрддреБ рдХреЗ рдореВрд▓ рдореЗрдВ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреЗ рдорд╛рд░реНрдЧ рдХреЗ рдиреАрдЪреЗ, рд╣рдо рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рдирдХреА рдореБрдЦреНрдп рдЗрдЪреНрдЫрд╛ рд╣рдореЗрдВ рдЪрдкреНрдкрд▓ рдореЗрдВ рд░рдЦрдирд╛ рд╣реИ, рд╕рдордп-рд╕рдордп рдкрд░ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдКрдкрд░ рдХреА рдУрд░ рдмрджрд▓рдирд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдирд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рд╕рд░рдгреА рдХреЗ рдиреАрдЪреЗ рдЦреБрджрд╛рдИ рдХрд░реЗрдВрдЧреЗред

рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдРрд╕реА рдЧреБрдбрд╝рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд░реЛрдз рд╣реИ

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд░рдорд╛рдВрдХрди рдкрде рдореЗрдВ рд╕рд░рдгрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрдп рддреБрдЪреНрдЫ рд╣реЛрдЧрд╛: рд╣рдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рддрдХ рдХреНрд░рдорд┐рдХ рдиреЛрдбреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░реЗрдВрдЧреЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреА рддрд░рд╣ рдХреБрдЫ:

object currentObject = serializationRoot;
for (int i = 0; i < directSearchDepth; i++)
{
       string pathNode = path[i];
       Type objectType = currentObject.GetType();
       FieldInfo objectFieldInfo = objectType.GetField(pathNode);
       object nextObject = objectFieldInfo.GetValue(currentObject);
       currentObject = nextObject;
}
return currentObject;

рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╕рд╛рде рджреЛ рдЕрдкреНрд░рд┐рдп рд╕рдорд╛рдЪрд╛рд░реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ред

рдиреЗрдХреНрд╕реНрдЯ рдСрдмрдЬреЗрдХреНрдЯ рд▓реЗрдиреЗ рдХрд╛ рдХрджрдо рдЙрдореНрдореАрдж рдХреА рд╡рд╕реНрддреБ рдХреЗ рдмрдЬрд╛рдп рдЕрдЪрд╛рдирдХ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдирд┐рд░реАрдХреНрд╖рдХ рдореЗрдВ рдореВрд▓ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреНрд░рдорд╛рдВрдХрди рдкрде рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖реЗрддреНрд░ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдорд┐рд▓реЗрдВрдЧреА)ред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╛рдкрд╕реА рдирд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЛ рддреБрд░рдВрдд рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

object nextObject = objectFieldInfo.GetValue(currentObject);
if (nextObject == null) return null;
currentObject = nextObject;

"рдПрдХ рдорд┐рдирдЯ рд░реБрдХрд┐рдП! - рддреБрдо рдХрд╣реЛред "рдФрд░ рдлрд┐рд░ рдУрдПрдирдЬреАрдЬреА рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЕрдЧрд░ рд╢реВрдиреНрдп рд╣рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛?"

рдЙрддреНрддрд░: рдХреБрдЫ рдирд╣реАрдВред рд╕рдЪрдореБрдЪ рдХреБрдЫ рднреА рдирд╣реАрдВред рдмрд╕ рдПрдХ рд╡рд╛рдкрд╕реА рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдбреНрд░рд╛рдЗрдВрдЧ рдХрджрдо рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ, рдЬрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред рдЗрд╕рд╕реЗ рднрдпрд╛рдирдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
       SandboxField sandboxField = GetTarget<T>(property);
       if (sandboxField == null) return;
тАж
}

рдпрд╣рд╛рдБ GetTarget () рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдХреНрд░рдордмрджреНрдз рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддреЗ рд╣реБрдП, рдПрдХ рд╣реА рдХрд╛рд░реНрдп рд╣реИред

рд╡реИрд╕реЗ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╣рд╛рдБ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ GetPropertyHeight рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд▓реЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдпрджрд┐ рд╣рдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрдВрдзрдиреЗрд╡рд╛рд▓рд╛-рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред GetPropertyHeight () рдХреЛ OnGUI () рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рд╡рд╣рд╛рдВ рдлреАрд▓реНрдб рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЙрдкрд░реНрдЯреАрдбреНрд░рд╛рд╡рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ OnGUI рдкрд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрд╕реНрдЯрдо PropertyDrawer рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рднреА рджреГрд╢реНрдпрдорд╛рди рдЕрдиреБрдХреНрд░рдорд┐рдд рдЧреБрдгреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреЗрд▓реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рдирдП рдЧреБрдг рдбрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЕрдЧрд▓реА рд╕рдВрдкрддреНрддрд┐ рдХреА рдКрдВрдЪрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рди рд╣реЛ, рдЕрдиреНрдпрдерд╛ рдЖрдк рдПрдХ рдЕрдкреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рддрд╣ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХреА рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА tinsel рдЬреЛ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ рдЖрдк рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдХреНрд░рдорд┐рдХ рд╡рд░реНрдЧ рдХреА рдУрд░ рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ PropertyDrawer, рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХреА рдЦрд╛рддрд┐рд░ - рдПрдиреНрдХреНрд▓реЛрдЬрд╝рд▓ рд╕рдВрдХрд▓рди рд╕рдВрдХрд▓рди рдХреЛрд╖реНрдардХ рддрд╛рдХрд┐ рдпрд╣ рд╕рднреА рд╕реНрдкреИрдирд┐рд╢ рд╢рд░реНрдорд┐рдВрджрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВ :

[Serializable]
public class SandboxField
{
тАж
#if UNITY_EDITOR
        public bool editorFoldout;
#endif
тАж
}

рдПрдХ рдФрд░ рдиреБрдХрд╕рд╛рди рдЬреЛ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ: рд╕рдВрдкрд╛рджрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдлрд╝реАрд▓реНрдб рд╡рд░реНрдЧ рдирд┐рд░реНрдорд╛рддрд╛ рдкрд░ рдФрд░ рдХрдХреНрд╖рд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдереВрдХрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдпрджрд┐ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рд╕реЗ (рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЙрджрд╛рд╣рд░рдг, рдЬрд╣рд╛рдВ рдпрд╣ рдкрд╛рдиреА рдХреА рд╕рддрд╣ рдХреЗ рдиреЛрдбреНрд╕ рдХрд╛ рдореВрд▓реНрдп рдерд╛):

[SerializeField]private int m_nodesPerUnit = 5;

рдЬреИрд╕реЗ рд╣реА рдЖрдк рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рди рдХреЛ рдмрд┐рдВрджреБ-рд░рд┐рдХреНрдд рдХреНрд░рдорд╛рдВрдХрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдорджрдж рдХреЗ рд▓рд┐рдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдХреЛрдИ рдХрдо рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ: рдЖрдкрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирдИ рд╡рд╕реНрддреБ рдПрдХ рдмрд╛рдЬрд╝ рдХреА рддрд░рд╣ рдПрдХ рд▓рдХреНрд╖реНрдп рд╣реИ, рдЗрд╕рдХреЗ рд╕рднреА рдореВрд▓реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдирд╣реАрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╡рд╣рд╛рдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд╢рдХреНрдд, рдЭреВрдареЗ, 0, Color.clear рдФрд░ рдЕрдиреНрдп рдЕрд╢реНрд▓реАрд▓ рдЪреАрдЬреЗрдВ рд╣реИрдВред

рдорд╛рдВрд╕ рдореЗрдВ рдмреИрд╕рд╛рдЦреА
. NonUnitySerializableClass, . , DefaultEditorObject(), .

- :

public abstract class NonUnitySerializableClass
{
        protected virtual void DefaultEditorObject()
        {
            // virtually do nothing
        }

        [SerializeField]private bool validated = false;
        public void EditorCreated(bool force = false)
        {
            if (validated && !force) return;
            DefaultEditorObject();
            validated = true;
        }

        public NonUnitySerializableClass()
        {
            EditorCreated(true);
        }
}

DefaultEditorObject(), , EditorCreated .

: .



рдЖрдЗрдП, рдЕрдкрдиреА рднреЗрдбрд╝реЛрдВ рдХреЗ рдкрд╛рд╕, рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ, рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдБред рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рднреА рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╡рд╣ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реИ:

FieldInfo objectFieldInfo = objectType.GetField(pathNode);

рдпрджрд┐ рдпрд╣ рдХреНрд░рдорд┐рдХ рдкрде рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЖрддрд╛ рд╣реИ (рдФрд░ рдХреЛрдИ рднреА "IList" рдСрдмреНрдЬреЗрдХреНрдЯ "рд╕рд░рдгреА" рд╕рд░рдгреА рд╣реЛрдЧрд╛) рддреЛ рд░рд╛рдЗрдЯ-рд╣реИрдВрдб рд╕рд╛рдЗрдб рд╣рдореЗрдВ рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред рдЕрдкреНрд░рд┐рдпред

рдХреНрдпрд╛ рдХрд░реЗрдВ? рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдХрд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рди рдкрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :

for (int i = 0; i < pathNode.Length; i++)
{
        string pathNode = path[i];
        Type objectType = currentObject.GetType();
        FieldInfo objectFieldInfo = objectType.GetField(pathNode);

        if (objectFieldInfo == null)
        {
                if (pathNode == "Array")
                {
                        i++;
                        string nextNode = path[i];
                        string idxstr = nextNode.Substring(nextNode.IndexOf("[") + 1);
                        idxstr = idxstr.Replace("]", "");
                        int arrayNumber = Convert.ToInt32(idxstr);
                        IList collection = currentObject as IList;
                        if (collection.Count <= arrayNumber) return null;
                        currentObject = collection[arrayNumber];
                }
                else
                {
                        throw new NotImplementedException("   ");
                }
        }
        else //  ,     
        {
                object nextObject = objectFieldInfo.GetValue(currentObject);
                if (nextObject == null) return null;
                currentObject = nextObject;
        }
}
return currentObject;

рд╣рд╛рдВ, рд╣рдо рдпрд╣рд╛рдВ рдПрдХ рдЕрдкреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреА рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд░рдорд╛рдВрдХрди рдкрде рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ [0] рдпрд╛ рдбреЗрдЯрд╛ [1] рддрддреНрд╡, рдФрд░ рд╕рд░рдгреА рдиреЗ рдЕрднреА рддрдХ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдмрдирд╛рдИред рд╣рдо рдЙрдирд╕реЗ N рддрддреНрд╡ рдкреВрдЫрддреЗ рд╣реИрдВ - рдФрд░ рдЗрд╕ рд╕реБрдВрджрд░ рд░реЗрдЦрд╛ рдХреЗ рдмрд┐рдирд╛:

if (collection.Count <= arrayNumber) return null;

... рд╣рдореЗрдВ purrs рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдорд┐рд▓рддрд╛ рд╣реИред рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛ рд╡рд╣ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрджрдо рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдерд╛, рдЬрдм рддрдХ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВ рдЕрднреА рддрдХ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реВрдВ рдЬрдм objectFieldInfo == рдЕрд╢рдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдиреЛрдб рдХреЛ рдРрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рднрдпрд╛рдирдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рджрд░рд╛рд░ рдХрд░рдирд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдХрд╛рдордХрд╛рдЬреА рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рд╛ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕рдХреА рдХреНрд░рдордмрджреНрдз рд╕рдВрдкрддреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд░рдорд╛рдВрдХрди рдкрде рдореЗрдВ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдпрд╛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрдо "рдорд╛рддрд╛-рдкрд┐рддрд╛" рдХреА рдЦреЛрдЬ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдиреЗрд╕реНрдЯреЗрдб рдЧреБрдгреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рд╣реИрдХ
- , Rect position Rect indentedPosition = EditorGUI.IndentedRect(position). , EditorGUI, position , GUI тАУ indentedPosition. EditorGUILayout OnGUI, ( , ).

, MonoScript ( -, ), static-, AssetDatabase, .

рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рджред

All Articles