Beispiel #1
0
            public StartupParticleSystemData(int index, ParticleSystem particleSystem)
            {
                //IL_0001: Unknown result type (might be due to invalid IL or missing references)
                //IL_0006: Unknown result type (might be due to invalid IL or missing references)
                //IL_0011: Unknown result type (might be due to invalid IL or missing references)
                //IL_0016: Unknown result type (might be due to invalid IL or missing references)
                MainModule main = particleSystem.get_main();

                particleSystemIndex = index;
                m_ringBufferMode    = main.get_ringBufferMode();
            }
 protected override void ReadFromImpl(object obj)
 {
     base.ReadFromImpl(obj);
     ParticleSystem.MainModule uo = (ParticleSystem.MainModule)obj;
     duration                  = uo.duration;
     loop                      = uo.loop;
     prewarm                   = uo.prewarm;
     startDelay                = uo.startDelay;
     startDelayMultiplier      = uo.startDelayMultiplier;
     startLifetime             = uo.startLifetime;
     startLifetimeMultiplier   = uo.startLifetimeMultiplier;
     startSpeed                = uo.startSpeed;
     startSpeedMultiplier      = uo.startSpeedMultiplier;
     startSize3D               = uo.startSize3D;
     startSize                 = uo.startSize;
     startSizeMultiplier       = uo.startSizeMultiplier;
     startSizeX                = uo.startSizeX;
     startSizeXMultiplier      = uo.startSizeXMultiplier;
     startSizeY                = uo.startSizeY;
     startSizeYMultiplier      = uo.startSizeYMultiplier;
     startSizeZ                = uo.startSizeZ;
     startSizeZMultiplier      = uo.startSizeZMultiplier;
     startRotation3D           = uo.startRotation3D;
     startRotation             = uo.startRotation;
     startRotationMultiplier   = uo.startRotationMultiplier;
     startRotationX            = uo.startRotationX;
     startRotationXMultiplier  = uo.startRotationXMultiplier;
     startRotationY            = uo.startRotationY;
     startRotationYMultiplier  = uo.startRotationYMultiplier;
     startRotationZ            = uo.startRotationZ;
     startRotationZMultiplier  = uo.startRotationZMultiplier;
     flipRotation              = uo.flipRotation;
     startColor                = uo.startColor;
     gravityModifier           = uo.gravityModifier;
     gravityModifierMultiplier = uo.gravityModifierMultiplier;
     simulationSpace           = uo.simulationSpace;
     customSimulationSpace     = ToID(uo.customSimulationSpace);
     simulationSpeed           = uo.simulationSpeed;
     useUnscaledTime           = uo.useUnscaledTime;
     scalingMode               = uo.scalingMode;
     playOnAwake               = uo.playOnAwake;
     maxParticles              = uo.maxParticles;
     emitterVelocityMode       = uo.emitterVelocityMode;
     stopAction                = uo.stopAction;
     cullingMode               = uo.cullingMode;
     ringBufferMode            = uo.ringBufferMode;
     ringBufferLoopRange       = uo.ringBufferLoopRange;
 }
        override public void OnInspectorGUI(InitialModuleUI initial)
        {
            GUIFloat(s_Texts.duration, m_LengthInSec, "f2");

            EditorGUI.BeginChangeCheck();
            bool looping = GUIToggle(s_Texts.looping, m_Looping);

            if (EditorGUI.EndChangeCheck() && looping)
            {
                foreach (ParticleSystem ps in m_ParticleSystemUI.m_ParticleSystems)
                {
                    if (ps.time >= ps.main.duration)
                    {
                        ps.time = 0.0f;
                    }
                }
            }

            using (new EditorGUI.DisabledScope(!m_Looping.boolValue))
            {
                GUIToggle(s_Texts.prewarm, m_Prewarm);
            }

            using (new EditorGUI.DisabledScope(m_Prewarm.boolValue && m_Looping.boolValue))
            {
                GUIMinMaxCurve(s_Texts.startDelay, m_StartDelay);
            }

            GUIMinMaxCurve(s_Texts.lifetime, m_LifeTime);
            GUIMinMaxCurve(s_Texts.speed, m_Speed);

            // Size
            EditorGUI.BeginChangeCheck();
            bool size3D = GUIToggle(s_Texts.size3D, m_Size3D);

            if (EditorGUI.EndChangeCheck())
            {
                // Remove old curves from curve editor
                if (!size3D)
                {
                    m_SizeY.RemoveCurveFromEditor();
                    m_SizeZ.RemoveCurveFromEditor();
                }
            }

            // Keep states in sync
            if (!m_SizeX.stateHasMultipleDifferentValues)
            {
                m_SizeZ.SetMinMaxState(m_SizeX.state, size3D);
                m_SizeY.SetMinMaxState(m_SizeX.state, size3D);
            }

            if (size3D)
            {
                m_SizeX.m_DisplayName = s_Texts.x;
                GUITripleMinMaxCurve(GUIContent.none, s_Texts.x, m_SizeX, s_Texts.y, m_SizeY, s_Texts.z, m_SizeZ, null);
            }
            else
            {
                m_SizeX.m_DisplayName = s_Texts.size;
                GUIMinMaxCurve(s_Texts.size, m_SizeX);
            }

            // Rotation
            EditorGUI.BeginChangeCheck();
            bool rotation3D = GUIToggle(s_Texts.rotation3D, m_Rotation3D);

            if (EditorGUI.EndChangeCheck())
            {
                // Remove old curves from curve editor
                if (!rotation3D)
                {
                    m_RotationX.RemoveCurveFromEditor();
                    m_RotationY.RemoveCurveFromEditor();
                }
            }

            // Keep states in sync
            if (!m_RotationZ.stateHasMultipleDifferentValues)
            {
                m_RotationX.SetMinMaxState(m_RotationZ.state, rotation3D);
                m_RotationY.SetMinMaxState(m_RotationZ.state, rotation3D);
            }

            if (rotation3D)
            {
                m_RotationZ.m_DisplayName = s_Texts.z;
                GUITripleMinMaxCurve(GUIContent.none, s_Texts.x, m_RotationX, s_Texts.y, m_RotationY, s_Texts.z, m_RotationZ, null);
            }
            else
            {
                m_RotationZ.m_DisplayName = s_Texts.rotation;
                GUIMinMaxCurve(s_Texts.rotation, m_RotationZ);
            }

            GUIFloat(s_Texts.randomizeRotationDirection, m_RandomizeRotationDirection);
            GUIMinMaxGradient(s_Texts.color, m_Color, false);

            GUIMinMaxCurve(s_Texts.gravity, m_GravityModifier);
            int space = GUIPopup(s_Texts.simulationSpace, m_SimulationSpace, s_Texts.simulationSpaces);

            if (space == 2 && m_CustomSimulationSpace != null)
            {
                GUIObject(s_Texts.customSimulationSpace, m_CustomSimulationSpace);
            }
            GUIFloat(s_Texts.simulationSpeed, m_SimulationSpeed);
            GUIBoolAsPopup(s_Texts.deltaTime, m_UseUnscaledTime, new string[] { "Scaled", "Unscaled" });

            bool anyNonMesh = m_ParticleSystemUI.m_ParticleSystems.FirstOrDefault(o => !o.shape.enabled || (o.shape.shapeType != ParticleSystemShapeType.SkinnedMeshRenderer && o.shape.shapeType != ParticleSystemShapeType.MeshRenderer)) != null;

            if (anyNonMesh)
            {
                GUIPopup(s_Texts.scalingMode, m_ScalingMode, s_Texts.scalingModes);
            }

            bool oldPlayOnAwake = m_PlayOnAwake.boolValue;
            bool newPlayOnAwake = GUIToggle(s_Texts.autoplay, m_PlayOnAwake);

            if (oldPlayOnAwake != newPlayOnAwake)
            {
                m_ParticleSystemUI.m_ParticleEffectUI.PlayOnAwakeChanged(newPlayOnAwake);
            }

            GUIBoolAsPopup(s_Texts.emitterVelocity, m_EmitterVelocity, new string[] { "Transform", "Rigidbody" });

            GUIInt(s_Texts.maxParticles, m_MaxNumParticles);

            bool autoRandomSeed = GUIToggle(s_Texts.autoRandomSeed, m_AutoRandomSeed);

            if (!autoRandomSeed)
            {
                bool isInspectorView = m_ParticleSystemUI.m_ParticleEffectUI.m_Owner is ParticleSystemInspector;
                if (isInspectorView)
                {
                    GUILayout.BeginHorizontal();
                    GUIInt(s_Texts.randomSeed, m_RandomSeed);
                    if (!m_ParticleSystemUI.multiEdit && GUILayout.Button("Reseed", EditorStyles.miniButton, GUILayout.Width(60)))
                    {
                        m_RandomSeed.intValue = (int)m_ParticleSystemUI.m_ParticleSystems[0].GenerateRandomSeed();
                    }
                    GUILayout.EndHorizontal();
                }
                else
                {
                    GUIInt(s_Texts.randomSeed, m_RandomSeed);
                    if (!m_ParticleSystemUI.multiEdit && GUILayout.Button("Reseed", EditorStyles.miniButton))
                    {
                        m_RandomSeed.intValue = (int)m_ParticleSystemUI.m_ParticleSystems[0].GenerateRandomSeed();
                    }
                }
            }

            GUIPopup(s_Texts.stopAction, m_StopAction, s_Texts.stopActions);
            GUIPopup(s_Texts.cullingMode, m_CullingMode, s_Texts.cullingModes);

            ParticleSystemRingBufferMode ringBufferMode = (ParticleSystemRingBufferMode)GUIPopup(s_Texts.ringBufferMode, m_RingBufferMode, s_Texts.ringBufferModes);

            if (!m_RingBufferMode.hasMultipleDifferentValues && ringBufferMode == ParticleSystemRingBufferMode.LoopUntilReplaced)
            {
                EditorGUI.indentLevel++;
                GUIMinMaxRange(s_Texts.ringBufferLoopRange, m_RingBufferLoopRange);
                EditorGUI.indentLevel--;
            }
        }