public static MultiModeParameter GetProperty(ModuleUI ui, string name, GUIContent speed)
            {
                MultiModeParameter result = new MultiModeParameter();

                result.m_Value  = ui.GetProperty(name + ".value");
                result.m_Mode   = ui.GetProperty(name + ".mode");
                result.m_Spread = ui.GetProperty(name + ".spread");
                result.m_Speed  = new SerializedMinMaxCurve(ui, speed, name + ".speed", kUseSignedRange);
                result.m_Speed.m_AllowRandom = false;
                return(result);
            }
        protected override void Init()
        {
            if (m_Type != null)
            {
                return;
            }
            if (s_Texts == null)
            {
                s_Texts = new Texts();
            }

            m_Type            = GetProperty("type");
            m_Radius          = MultiModeParameter.GetProperty(this, "radius", s_RadiusTexts.speed);
            m_RadiusThickness = GetProperty("radiusThickness");
            m_Angle           = GetProperty("angle");
            m_Length          = GetProperty("length");
            m_BoxThickness    = GetProperty("boxThickness");
            m_Arc             = MultiModeParameter.GetProperty(this, "arc", s_ArcTexts.speed);
            m_DonutRadius     = GetProperty("donutRadius");

            m_PlacementMode                = GetProperty("placementMode");
            m_Mesh                         = GetProperty("m_Mesh");
            m_MeshRenderer                 = GetProperty("m_MeshRenderer");
            m_SkinnedMeshRenderer          = GetProperty("m_SkinnedMeshRenderer");
            m_Sprite                       = GetProperty("m_Sprite");
            m_SpriteRenderer               = GetProperty("m_SpriteRenderer");
            m_MeshMaterialIndex            = GetProperty("m_MeshMaterialIndex");
            m_UseMeshMaterialIndex         = GetProperty("m_UseMeshMaterialIndex");
            m_UseMeshColors                = GetProperty("m_UseMeshColors");
            m_MeshNormalOffset             = GetProperty("m_MeshNormalOffset");
            m_Texture                      = GetProperty("m_Texture");
            m_TextureClipChannel           = GetProperty("m_TextureClipChannel");
            m_TextureClipThreshold         = GetProperty("m_TextureClipThreshold");
            m_TextureColorAffectsParticles = GetProperty("m_TextureColorAffectsParticles");
            m_TextureAlphaAffectsParticles = GetProperty("m_TextureAlphaAffectsParticles");
            m_TextureBilinearFiltering     = GetProperty("m_TextureBilinearFiltering");
            m_TextureUVChannel             = GetProperty("m_TextureUVChannel");
            m_RandomDirectionAmount        = GetProperty("randomDirectionAmount");
            m_SphericalDirectionAmount     = GetProperty("sphericalDirectionAmount");
            m_RandomPositionAmount         = GetProperty("randomPositionAmount");
            m_AlignToDirection             = GetProperty("alignToDirection");

            m_Position = GetProperty("m_Position");
            m_Scale    = GetProperty("m_Scale");
            m_Rotation = GetProperty("m_Rotation");

            if (!s_Material)
            {
                s_Material = Material.GetDefaultMaterial();
            }
            if (!s_TextureMaterial)
            {
                s_TextureMaterial = new Material((Shader)EditorGUIUtility.Load("SceneView/ParticleShapeGizmo.shader"));
            }
            if (!s_SphereTextureMaterial)
            {
                s_SphereTextureMaterial = new Material((Shader)EditorGUIUtility.Load("SceneView/ParticleShapeGizmoSphere.shader"));
            }
            if (!s_CircleMesh)
            {
                s_CircleMesh = ((GameObject)EditorGUIUtility.Load("SceneView/Circle.fbx")).transform.GetComponent <MeshFilter>().sharedMesh;
            }
            if (!s_QuadMesh)
            {
                s_QuadMesh = Resources.GetBuiltinResource(typeof(Mesh), "Quad.fbx") as Mesh;
            }
            if (!s_SphereMesh)
            {
                s_SphereMesh = Resources.GetBuiltinResource(typeof(Mesh), "New-Sphere.fbx") as Mesh;
            }
            if (!s_HemisphereMesh)
            {
                s_HemisphereMesh = ((GameObject)EditorGUIUtility.Load("SceneView/Hemisphere.fbx")).transform.GetComponent <MeshFilter>().sharedMesh;
            }
        }