public Vector3 GetVelocity(ParticleSystemDefinition definition, Vector3 direction) { var velocity = ParticleSystemUtility.GetRandomDirection3D(); velocity *= definition.VelSpherical.GetRandomFloat(); return(velocity); }
/// <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); }
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)); }
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))); }
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)); }
/// <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(); } } } }
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)); }
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(); } }
/// <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(); * }*/ } }
/// <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(); } } }