public Vector3 GetVelocity(ParticleSystemDefinition definition, Vector3 direction)
        {
            var velocity = ParticleSystemUtility.GetRandomDirection3D();

            velocity *= definition.VelSpherical.GetRandomFloat();
            return(velocity);
        }
Example #2
0
        /// <summary>
        /// 空のエフェクトを作成
        /// </summary>
        private static void DrawCreateButton()
        {
            if (GUILayout.Button("ルート作成"))
            {
                var ps      = ParticleSystemUtility.CreateEmptyParticleSystem("Empty ParticleSystem");
                var childPs = ParticleSystemUtility.CreateEmptyParticleSystem("root");
                childPs.transform.SetParent(ps.transform);

                var childChildPs = new GameObject("empty", typeof(ParticleSystem));
                childChildPs.transform.SetParent(childPs.transform);

                if (Selection.activeTransform != null)
                {
                    ps.gameObject.transform.SetParent(Selection.activeTransform);
                }

                Selection.activeGameObject = childChildPs.gameObject;
            }

            if (GUILayout.Button("新規作成"))
            {
                var ps = ParticleSystemUtility.CreateParticleSystem("Empty ParticleSystem");
                if (Selection.activeTransform != null)
                {
                    ps.gameObject.transform.SetParent(Selection.activeTransform.parent);
                }

                Selection.activeGameObject = ps.gameObject;
            }
        }
        public Vector3 GetVelocity(ParticleSystemDefinition definition, Vector3 direction)
        {
            var velocity = Vector3.UnitX * definition.VelCylindricalRadial.GetRandomFloat();

            velocity = Vector3.Transform(velocity, Matrix4x4.CreateRotationZ(ParticleSystemUtility.GetRandomAngle()));

            velocity.Z = definition.VelCylindricalNormal.GetRandomFloat();

            return(velocity);
        }
Example #4
0
        public Ray GetRay(ParticleSystemDefinition definition)
        {
            var x = ParticleSystemUtility.GetRandomFloat(definition.VolLineStart.X, definition.VolLineEnd.X);
            var y = ParticleSystemUtility.GetRandomFloat(definition.VolLineStart.Y, definition.VolLineEnd.Y);
            var z = ParticleSystemUtility.GetRandomFloat(definition.VolLineStart.Z, definition.VolLineEnd.Z);

            var position = new Vector3(x, y, z);

            var direction = Vector3.Normalize(definition.VolLineEnd.ToVector3() - definition.VolLineStart.ToVector3());

            return(new Ray(position, direction));
        }
Example #5
0
        public Ray GetRay(ParticleSystemDefinition definition)
        {
            var x = ParticleSystemUtility.GetRandomFloat(-definition.VolBoxHalfSize.X, definition.VolBoxHalfSize.X);
            var y = ParticleSystemUtility.GetRandomFloat(-definition.VolBoxHalfSize.Y, definition.VolBoxHalfSize.Y);
            var z = ParticleSystemUtility.GetRandomFloat(0, definition.VolBoxHalfSize.Z * 2);

            var position = new Vector3(x, y, z);

            return(new Ray(
                       position,
                       Vector3.Normalize(position)));
        }
Example #6
0
        public Ray GetRay(ParticleSystemDefinition definition)
        {
            var direction = ParticleSystemUtility.GetRandomDirection3D();

            var radius = definition.IsHollow
                ? definition.VolSphereRadius
                : ParticleSystemUtility.GetRandomFloat(0, definition.VolSphereRadius);

            return(new Ray(
                       direction * radius,
                       direction));
        }
Example #7
0
 /// <summary>
 /// Reverse this event and play the particle system.
 /// </summary>
 /// <param name="actor">The actor to reverse this event on.</param>
 public override void Reverse(GameObject actor)
 {
     if (actor != null)
     {
         ParticleSystem[] particleSys = actor.GetComponentsInChildren <ParticleSystem>();
         for (int i = 0; i < particleSys.Length; i++)
         {
             if (ParticleSystemUtility.IsRoot(particleSys[i]))
             {
                 particleSys[i].Play();
             }
         }
     }
 }
Example #8
0
        public Ray GetRay(ParticleSystemDefinition definition)
        {
            var angle = ParticleSystemUtility.GetRandomAngle();

            var radius = definition.IsHollow
                ? definition.VolCylinderRadius
                : ParticleSystemUtility.GetRandomFloat(0, definition.VolCylinderRadius);

            var z = ParticleSystemUtility.GetRandomFloat(0, definition.VolCylinderLength);

            var direction = Vector3.Transform(
                Vector3.UnitX,
                Matrix4x4.CreateRotationZ(angle));

            return(new Ray(
                       new Vector3(direction.X * radius, direction.Y * radius, z),
                       direction));
        }
Example #9
0
        public Vector3 GetVelocity(ParticleSystemDefinition definition, Vector3 direction)
        {
            switch (definition.VolumeType)
            {
            case ParticleVolumeType.Cylinder:
            {
                var velocity = direction;
                velocity *= definition.VelOutward.GetRandomFloat();
                velocity += Vector3.UnitZ * definition.VelOutwardOther.GetRandomFloat();
                return(velocity);
            }

            case ParticleVolumeType.Line:
            {
                var up = Vector3.UnitZ;
                if (Vector3.Dot(direction, up) <= 0.001f)
                {
                    up = Vector3.UnitY;
                }
                var dir1 = Vector3.Cross(direction, up);
                var dir2 = Vector3.Cross(dir1, dir1);
                dir1 *= definition.VelOutward.GetRandomFloat();
                dir2 *= definition.VelOutwardOther.GetRandomFloat();
                return(dir1 + dir2);
            }

            case ParticleVolumeType.Point:
            {
                return(ParticleSystemUtility.GetRandomDirection3D()
                       * definition.VelOutward.GetRandomFloat());
            }

            case ParticleVolumeType.Box:
            case ParticleVolumeType.Sphere:
            {
                return(direction * definition.VelOutward.GetRandomFloat());
            }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Example #10
0
        /// <summary>
        /// Trigger the particle system to play.
        /// </summary>
        /// <param name="actor">The actor to be triggered.</param>
        public override void Trigger(GameObject actor)
        {
            if (actor != null)
            {
                ParticleSystem[] particleSys = actor.GetComponentsInChildren <ParticleSystem>();
                for (int i = 0; i < particleSys.Length; i++)
                {
                    if (ParticleSystemUtility.IsRoot(particleSys[i]))
                    {
                        particleSys[i].Play();
                    }
                }

                /*
                 * ParticleSystem ps = actor.GetComponent<ParticleSystem>();
                 * if (ps != null)
                 * {
                 *  ps.Play();
                 * }*/
            }
        }
Example #11
0
        /// <summary>
        /// ウィンドウ描画
        /// </summary>
        private void OnGUI()
        {
            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                EditorGUILayout.LabelField("■ Create");
                DrawCreateButton();
            }

            // プリセット系ツール
            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                EditorGUILayout.LabelField("■ Presets");

                if (GUILayout.Button(VfxMenuConfig.MaterialPresetGeneratorButtonName))
                {
                    MaterialPresetGeneratorWindow.Open();
                }

                if (GUILayout.Button(VfxMenuConfig.MaterialPresetAttacherButtonName))
                {
                    MaterialPresetAttachWindow.Open();
                }
            }

            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                EditorGUILayout.LabelField("■ Editor");

                if (GUILayout.Button(VfxMenuConfig.TimeChangerButtonName))
                {
                    ShurikenTimeChangerWindow.Open();
                }

                if (GUILayout.Button(VfxMenuConfig.RandomizerButtonName))
                {
                    ShurikenRandomizeWindow.Open();
                }

                if (GUILayout.Button(VfxMenuConfig.ShurikenColorChangeButtonName))
                {
                    ShurikenColorChangeWindow.Open();
                }
            }

            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                EditorGUILayout.LabelField("■ Loop");
                if (GUILayout.Button(VfxMenuConfig.LoopButtonName))
                {
                    foreach (var ps in ParticleSystemUtility.GetSelectionParticleSystemRecursive())
                    {
                        var main = ps.main;
                        main.loop = true;
                    }
                }

                if (GUILayout.Button(VfxMenuConfig.UnloopButtonName))
                {
                    foreach (var ps in ParticleSystemUtility.GetSelectionParticleSystemRecursive())
                    {
                        var main = ps.main;
                        main.loop = false;
                    }
                }
            }


            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                EditorGUILayout.LabelField("■ Copy/Paste");
                if (GUILayout.Button(VfxMenuConfig.CopyPasteButtonName))
                {
                    ShurikenCopyPasteWindow.Open();
                }
            }

            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                EditorGUILayout.LabelField("■ Viewer");
                if (GUILayout.Button(VfxMenuConfig.ShurikenViewerButtonName))
                {
                    ShurikenViewerWindow.Open();
                }
            }
        }