public static bool DoPatch(Transform xffect) { bool needToReimport = false; Object[] deps = EditorUtility.CollectDeepHierarchy(new Object[] { xffect.gameObject as Object }); foreach (Object obj in deps) { if (obj == null || obj.GetType() != typeof(GameObject)) { continue; } GameObject go = obj as GameObject; EffectLayer efl = go.GetComponent <EffectLayer>(); if (efl != null) { DoPatch(efl); needToReimport = true; } XftEventComponent xevent = go.GetComponent <XftEventComponent>(); if (xevent != null) { DoPatch(xevent); needToReimport = true; } } return(needToReimport); }
protected void GlowConfig(XftEventComponent ctarget) { DisplayGlowConfig = EditorGUILayout.Foldout(DisplayGlowConfig, "Glow Configuration"); //if (DisplayGlowConfig) { EditorGUILayout.BeginVertical(); ctarget.GlowCompositeShader = (Shader)EditorGUILayout.ObjectField("composite shader:", ctarget.GlowCompositeShader, typeof(Shader), true); ctarget.GlowDownSampleShader = (Shader)EditorGUILayout.ObjectField("down sample shader:", ctarget.GlowDownSampleShader, typeof(Shader), true); ctarget.GlowBlurShader = (Shader)EditorGUILayout.ObjectField("blur shader:", ctarget.GlowBlurShader, typeof(Shader), true); ctarget.GlowIntensity = EditorGUILayout.Slider("glow intensity:", ctarget.GlowIntensity, 0f, 10f); ctarget.GlowBlurIterations = EditorGUILayout.IntSlider("blur iterations:", ctarget.GlowBlurIterations, 0, 30); ctarget.GlowBlurSpread = EditorGUILayout.Slider("blur spread:", ctarget.GlowBlurSpread, 0.5f, 1f); EditorGUILayout.Space(); ctarget.GlowColorGradualType = (COLOR_GRADUAL_TYPE)EditorGUILayout.EnumPopup("gradual type:", ctarget.GlowColorGradualType); if (ctarget.GlowColorGradualType == COLOR_GRADUAL_TYPE.CURVE) { ctarget.ColorCurve = EditorGUILayout.CurveField("color curve:", ctarget.ColorCurve, Color.green, new Rect(0f, 0f, 99f, 1f)); } else { ctarget.GlowColorGradualTime = EditorGUILayout.FloatField("color gradual time:", ctarget.GlowColorGradualTime); } ctarget.GlowColorStart = EditorGUILayout.ColorField("glow color start:", ctarget.GlowColorStart); ctarget.GlowColorEnd = EditorGUILayout.ColorField("glow color end:", ctarget.GlowColorEnd); EditorGUILayout.EndVertical(); } }
protected void LightConfig(XftEventComponent ctarget) { DisplayLightConfig = EditorGUILayout.Foldout(DisplayLightConfig, "Light Configuration"); //if (DisplayLightConfig) { EditorGUILayout.BeginVertical(); ctarget.LightComp = (Light)EditorGUILayout.ObjectField("light obj:", ctarget.LightComp, typeof(Light), true); ctarget.LightIntensityType = (MAGTYPE)EditorGUILayout.EnumPopup("intensity type:", ctarget.LightIntensityType); if (ctarget.LightIntensityType == MAGTYPE.Curve) { ctarget.LightIntensityCurve = EditorGUILayout.CurveField("intensity curve:", ctarget.LightIntensityCurve); } else { ctarget.LightIntensity = EditorGUILayout.FloatField("intensity:", ctarget.LightIntensity); } EditorGUILayout.Space(); ctarget.LightRangeType = (MAGTYPE)EditorGUILayout.EnumPopup("range type:", ctarget.LightRangeType); if (ctarget.LightRangeType == MAGTYPE.Curve) { ctarget.LightRangeCurve = EditorGUILayout.CurveField("range curve:", ctarget.LightRangeCurve); } else { ctarget.LightRange = EditorGUILayout.FloatField("range:", ctarget.LightRange); } EditorGUILayout.EndVertical(); } }
public void Init(XftEventComponent client) { m_client = client; ReplacementShader = client.GlowPerObjReplacementShader; blendShader = client.GlowPerObjBlendShader; if (m_blendMaterial == null) { m_blendMaterial = new Material(blendShader); m_blendMaterial.hideFlags = HideFlags.HideAndDontSave; } if (m_DownsampleMaterial == null) { downsampleShader = client.GlowDownSampleShader; m_DownsampleMaterial = new Material(downsampleShader); m_DownsampleMaterial.hideFlags = HideFlags.HideAndDontSave; } if (m_CompositeMaterial == null) { compositeShader = client.GlowCompositeShader; m_CompositeMaterial = new Material(compositeShader); m_CompositeMaterial.hideFlags = HideFlags.HideAndDontSave; } if (m_BlurMaterial == null) { blurShader = client.GlowBlurShader; m_BlurMaterial = new Material(blurShader); m_BlurMaterial.hideFlags = HideFlags.HideAndDontSave; } SetClientParam(); }
protected void RadialBlurConfig(XftEventComponent ctarget) { DisplayRadialBlurConfig = EditorGUILayout.Foldout(DisplayRadialBlurConfig, "RadialBlur Configuration"); //if (DisplayRadialBlurConfig) { EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("[note:if you want to use radial blur in mobile,"); EditorGUILayout.LabelField("use 'Camera Radial Blur Mask' instead.]"); ctarget.RadialBlurShader = (Shader)EditorGUILayout.ObjectField("radial blur shader:", ctarget.RadialBlurShader, typeof(Shader), true); ctarget.RBStrengthType = (MAGTYPE)EditorGUILayout.EnumPopup("sample strength type:", ctarget.RBStrengthType); if (ctarget.RBStrengthType == MAGTYPE.Fixed) { ctarget.RBSampleStrength = EditorGUILayout.Slider("sample strength:", ctarget.RBSampleStrength, 0f, 1f); } else { ctarget.RBSampleStrengthCurve = EditorGUILayout.CurveField("strength curve:", ctarget.RBSampleStrengthCurve, Color.green, new Rect(0f, 0f, 99f, 1f)); } EditorGUILayout.EndVertical(); } }
public override void OnInspectorGUI() { XftEventComponent ctarget = (XftEventComponent)target; EditorGUILayout.BeginVertical(); ctarget.EventType = (XftEventType)EditorGUILayout.EnumPopup("event type:", ctarget.EventType); ctarget.StartTime = EditorGUILayout.FloatField("start time:", ctarget.StartTime); ctarget.EndTime = EditorGUILayout.FloatField("end time:", ctarget.EndTime); switch (ctarget.EventType) { case XftEventType.CameraShake: CameraShakeConfig(ctarget); break; case XftEventType.Sound: SoundConfig(ctarget); break; case XftEventType.Light: LightConfig(ctarget); break; case XftEventType.CameraRadialBlur: RadialBlurConfig(ctarget); break; case XftEventType.CameraRadialBlurMask: RadialBlurTexAddConfig(ctarget); break; case XftEventType.CameraGlow: GlowConfig(ctarget); break; case XftEventType.CameraColorInverse: ColorInverseConfig(ctarget); break; case XftEventType.TimeScale: TimeScaleEventConfig(ctarget); break; default: break; } EditorGUILayout.EndVertical(); if (GUI.changed) { EditorUtility.SetDirty(target); } }
public void Update() { CurTime = Time.realtimeSinceStartup; #if UNITY_EDITOR if (!EditorApplication.isPlaying) { if (!EditView) { return; } CurTime = EditorApplication.timeSinceStartup; if (!CheckEditModeInited()) { ResetEditScene(); } } #endif float deltaTime = (float)(CurTime - LastTime); if (!IgnoreTimeScale) { deltaTime *= Time.timeScale; } ElapsedTime += deltaTime; foreach (EffectLayer el in EflList) { if (el == null) { continue; } if (ElapsedTime > el.StartTime && IsActive(el.gameObject)) { el.FixedUpdateCustom(deltaTime); } } for (int i = 0; i < EventList.Count; i++) { XftEventComponent e = EventList[i]; if (IsActive(e.gameObject)) { e.UpdateCustom(deltaTime); } } LastTime = CurTime; #if UNITY_EDITOR if (!EditorApplication.isPlaying) { LateUpdate(); } #endif }
protected void TimeScaleEventConfig(XftEventComponent ctarget) { DisplayTimeScaleConfig = EditorGUILayout.Foldout(DisplayTimeScaleConfig, "Time Scale Configuration"); //if (DisplayTimeScaleConfig) { EditorGUILayout.BeginVertical(); ctarget.TimeScale = EditorGUILayout.FloatField("time scale:", ctarget.TimeScale); ctarget.TimeScaleDuration = EditorGUILayout.FloatField("duration:", ctarget.TimeScaleDuration); EditorGUILayout.EndVertical(); } }
protected void SoundConfig(XftEventComponent ctarget) { DisplaySoundConfig = EditorGUILayout.Foldout(DisplaySoundConfig, "Sound Configuration"); //if (DisplaySoundConfig) { EditorGUILayout.BeginVertical(); ctarget.Clip = (AudioClip)EditorGUILayout.ObjectField("audio clip:", ctarget.Clip, typeof(AudioClip), true); ctarget.Volume = EditorGUILayout.FloatField("volume:", ctarget.Volume); ctarget.Pitch = EditorGUILayout.FloatField("pitch:", ctarget.Pitch); EditorGUILayout.EndVertical(); } }
protected void ColorInverseConfig(XftEventComponent ctarget) { DisplayColorInverseConfig = EditorGUILayout.Foldout(DisplayColorInverseConfig, "Color Inverse Configuration"); //if (DisplayColorInverseConfig) { EditorGUILayout.BeginVertical(); ctarget.ColorInverseShader = (Shader)EditorGUILayout.ObjectField("color inverse shader:", ctarget.ColorInverseShader, typeof(Shader), true); ctarget.CIStrengthCurve = EditorGUILayout.CurveField("strength curve:", ctarget.CIStrengthCurve, Color.green, new Rect(0f, 0f, 99f, 1f)); EditorGUILayout.EndVertical(); } }
protected void RadialBlurTexAddConfig(XftEventComponent ctarget) { DisplayRadialBlurTexAddConfig = EditorGUILayout.Foldout(DisplayRadialBlurTexAddConfig, "RadialBlur Mask Configuration"); //if (DisplayRadialBlurTexAddConfig) { EditorGUILayout.BeginVertical(); if (ctarget.RadialBlurTexAddShader == null) { ctarget.RadialBlurTexAddShader = Shader.Find("Xffect/PP/radial_blur_mask"); } ctarget.RadialBlurTexAddShader = (Shader)EditorGUILayout.ObjectField("radial blur mask shader:", ctarget.RadialBlurTexAddShader, typeof(Shader), true); string assetPath = AssetDatabase.GetAssetPath(ctarget.RadialBlurTexAddShader); int index = assetPath.LastIndexOf("Xffect"); string basePath = assetPath.Substring(0, index + 7); string texPath = basePath + "Resources/PostProcess/Textures/radial_mask1.psd"; if (ctarget.RadialBlurMask == null) { ctarget.RadialBlurMask = (Texture2D)AssetDatabase.LoadAssetAtPath(texPath, typeof(Texture2D)); } ctarget.RadialBlurMask = (Texture2D)EditorGUILayout.ObjectField("radial blur mask:", ctarget.RadialBlurMask, typeof(Texture2D), false); ctarget.RBMaskSampleDist = EditorGUILayout.FloatField("sample dist:", ctarget.RBMaskSampleDist); ctarget.RBMaskStrengthType = (MAGTYPE)EditorGUILayout.EnumPopup("sample strength type:", ctarget.RBMaskStrengthType); if (ctarget.RBMaskStrengthType == MAGTYPE.Fixed) { ctarget.RBMaskSampleStrength = EditorGUILayout.Slider("sample strength:", ctarget.RBMaskSampleStrength, 0f, 1f); } else { ctarget.RBMaskSampleStrengthCurve = EditorGUILayout.CurveField("strength curve:", ctarget.RBMaskSampleStrengthCurve); } EditorGUILayout.EndVertical(); } }
public static bool DoPatch(Transform xffect) { XffectComponent xft = xffect.GetComponent <XffectComponent>(); System.Version myVer = new System.Version(xft.MyVersion); if (xft != null && myVer >= new System.Version("4.4.0")) { return(false); } bool needToReimport = false; Object[] deps = EditorUtility.CollectDeepHierarchy(new Object[] { xffect.gameObject as Object }); foreach (Object obj in deps) { if (obj == null || obj.GetType() != typeof(GameObject)) { continue; } GameObject go = obj as GameObject; EffectLayer efl = go.GetComponent <EffectLayer>(); if (efl != null) { DoPatch(efl); needToReimport = true; } XftEventComponent xevent = go.GetComponent <XftEventComponent>(); if (xevent != null) { DoPatch(xevent); needToReimport = true; } } if (xft != null) { xft.MyVersion = XffectComponent.CurVersion; } return(needToReimport); }
public static void DoPatch(XftEventComponent xevent) { if (xevent.EventType == XftEventType.CameraGlow && xevent.GlowColorGradualType != COLOR_GRADUAL_TYPE.CURVE) { Debug.LogWarning("[upgrade note]color gradual type is deprecated in glow event, please re-fill the gradual curve:" + GetPath(xevent.transform)); } if (xevent.EventType == XftEventType.CameraColorInverse) { xevent.Type = XEventType.CameraEffect; xevent.CameraEffectType = CameraEffectEvent.EType.ColorInverse; } else if (xevent.EventType == XftEventType.CameraGlow) { xevent.Type = XEventType.CameraEffect; xevent.CameraEffectType = CameraEffectEvent.EType.Glow; } else if (xevent.EventType == XftEventType.CameraRadialBlur) { xevent.Type = XEventType.CameraEffect; xevent.CameraEffectType = CameraEffectEvent.EType.RadialBlur; } else if (xevent.EventType == XftEventType.CameraRadialBlurMask) { xevent.Type = XEventType.CameraEffect; xevent.CameraEffectType = CameraEffectEvent.EType.RadialBlurMask; } else if (xevent.EventType == XftEventType.CameraShake && xevent.Type == XEventType.CameraShake) { xevent.Type = XEventType.CameraShake; } else if (xevent.EventType == XftEventType.Light) { xevent.Type = XEventType.Light; } else if (xevent.EventType == XftEventType.Sound) { xevent.Type = XEventType.Sound; } else if (xevent.EventType == XftEventType.TimeScale) { xevent.Type = XEventType.TimeScale; } }
public void Reset(XftEventComponent client) { if (m_client != null && !CheckDone()) { //Debug.LogWarning("can't reset CameraShake Component, may be the last shake is not finished?"); //return; } m_client = client; PositionSpring.Stiffness = new Vector3(m_client.PositionStifness, m_client.PositionStifness, m_client.PositionStifness); PositionSpring.Damping = Vector3.one - new Vector3(m_client.PositionDamping, m_client.PositionDamping, m_client.PositionDamping); RotationSpring.Stiffness = new Vector3(m_client.RotationStiffness, m_client.RotationStiffness, m_client.RotationStiffness); RotationSpring.Damping = Vector3.one - new Vector3(m_client.RotationDamping, m_client.RotationDamping, m_client.RotationDamping); m_elapsedTime = 0f; PositionSpring.RefreshTransformType(); RotationSpring.RefreshTransformType(); m_earthQuakeTimeTemp = m_client.EarthQuakeTime; }
public void Reset(XftEventComponent client) { if (m_client != null && !CheckDone()) { //Debug.LogWarning("can't reset CameraShake Component, may be the last shake is not finished?"); //return; } m_client = client; PositionSpring.Stiffness = new Vector3(m_client.PositionStifness,m_client.PositionStifness,m_client.PositionStifness); PositionSpring.Damping = Vector3.one - new Vector3(m_client.PositionDamping,m_client.PositionDamping,m_client.PositionDamping); RotationSpring.Stiffness = new Vector3(m_client.RotationStiffness,m_client.RotationStiffness,m_client.RotationStiffness); RotationSpring.Damping = Vector3.one - new Vector3(m_client.RotationDamping,m_client.RotationDamping,m_client.RotationDamping); m_elapsedTime = 0f; PositionSpring.RefreshTransformType(); RotationSpring.RefreshTransformType(); m_earthQuakeTimeTemp = m_client.EarthQuakeTime; }
protected void CameraShakeConfig(XftEventComponent ctarget) { DisplayCameraShakeConfig = EditorGUILayout.Foldout(DisplayCameraShakeConfig, "CameraShake Configuration"); //if (DisplayCameraShakeConfig) { EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("[note camera shake will change"); EditorGUILayout.LabelField("the camera's local position directly.]"); ctarget.PositionStifness = EditorGUILayout.FloatField("position stiffness", ctarget.PositionStifness); ctarget.PositionDamping = EditorGUILayout.FloatField("position damping:", ctarget.PositionDamping); EditorGUILayout.Space(); ctarget.RotationStiffness = EditorGUILayout.FloatField("rotation stiffness:", ctarget.RotationStiffness); ctarget.RotationDamping = EditorGUILayout.FloatField("rotation damping:", ctarget.RotationDamping); EditorGUILayout.Space(); EditorGUILayout.LabelField("spring force:"); ctarget.PositionForce = EditorGUILayout.Vector3Field("position force:", ctarget.PositionForce); ctarget.RotationForce = EditorGUILayout.Vector3Field("rotation force:", ctarget.RotationForce); EditorGUILayout.Space(); ctarget.UseEarthQuake = EditorGUILayout.Toggle("use earthquake?", ctarget.UseEarthQuake); if (ctarget.UseEarthQuake) { ctarget.EarthQuakeTime = EditorGUILayout.FloatField("earthquake time:", ctarget.EarthQuakeTime); ctarget.EarthQuakeCameraRollFactor = EditorGUILayout.FloatField("roll factor:", ctarget.EarthQuakeCameraRollFactor); ctarget.EarthQuakeMagTye = (MAGTYPE)EditorGUILayout.EnumPopup("magnitude type:", ctarget.EarthQuakeMagTye); if (ctarget.EarthQuakeMagTye == MAGTYPE.Curve) { ctarget.EarthQuakeMagCurve = EditorGUILayout.CurveField("magnitude curve:", ctarget.EarthQuakeMagCurve); } else { ctarget.EarthQuakeMagnitude = EditorGUILayout.FloatField("earthquake magnitude:", ctarget.EarthQuakeMagnitude); } } EditorGUILayout.EndVertical(); } }
void OnEnable() { Script = target as XftEventComponent; InitSerializedProperty(); LoadStyle(); }
public void Init(XftEventComponent client) { m_client = client; ReplacementShader = client.GlowPerObjReplacementShader; blendShader = client.GlowPerObjBlendShader; if (m_blendMaterial == null) { m_blendMaterial = new Material( blendShader ); m_blendMaterial.hideFlags = HideFlags.HideAndDontSave; } if (m_DownsampleMaterial == null) { downsampleShader = client.GlowDownSampleShader; m_DownsampleMaterial = new Material( downsampleShader ); m_DownsampleMaterial.hideFlags = HideFlags.HideAndDontSave; } if (m_CompositeMaterial == null) { compositeShader = client.GlowCompositeShader; m_CompositeMaterial = new Material(compositeShader); m_CompositeMaterial.hideFlags = HideFlags.HideAndDontSave; } if (m_BlurMaterial == null) { blurShader = client.GlowBlurShader; m_BlurMaterial = new Material(blurShader); m_BlurMaterial.hideFlags = HideFlags.HideAndDontSave; } SetClientParam(); }
public override void OnInspectorGUI() { serializedObject.Update(); XEditor.BeginCommonArea("xffect main config", Script.gameObject.name, this, true); EditorGUILayout.Space(); XEditor.DrawToggle("update in editor?", "", EditView); //EditView.boolValue = EditorGUILayout.Toggle("update in editor:", EditView.boolValue,GUILayout.Height(40f)); if (EditView.boolValue == true) { if (!XffectComponent.IsActive(Script.gameObject)) { EditView.boolValue = false; Debug.Log("you need to activate the xffect object: " + Script.gameObject.name + " before updating it in editor."); } } if (EditView.boolValue) { Script.EnableEditView(); } else { Script.DisableEditView(); } if (EditView.boolValue) { if (GUILayout.Button("Reset")) { Script.ResetEditScene(); } } XEditor.DrawSeparator(); XEditor.DrawFloat("life(-1 means infinite):", "", LifeTime); XEditor.DrawToggle("ignore time scale?", "", IgnoreTimeScale); EditorGUILayout.Space(); XEditor.DrawFloat("scale:", "change this Xffect's scale", Scale); if (GUILayout.Button("Add Layer")) { GameObject layer = new GameObject(LayerName); EffectLayer efl = (EffectLayer)layer.AddComponent("EffectLayer"); layer.transform.parent = Selection.activeTransform; efl.transform.localPosition = Vector3.zero; //default to effect layer object. efl.ClientTransform = efl.transform; efl.GravityObject = efl.transform; efl.BombObject = efl.transform; efl.TurbulenceObject = efl.transform; efl.AirObject = efl.transform; efl.VortexObj = efl.transform; efl.DirCenter = efl.transform; efl.Material = AssetDatabase.LoadAssetAtPath(XEditorTool.GetXffectPath() + DefaultMatPath, typeof(Material)) as Material; efl.gameObject.layer = Script.gameObject.layer; Selection.activeGameObject = layer; } if (GUILayout.Button("Add Event")) { GameObject obj = new GameObject("_Event"); XftEventComponent xevent = (XftEventComponent)obj.AddComponent("XftEventComponent"); xevent.transform.parent = Selection.activeTransform; xevent.transform.localPosition = Vector3.zero; xevent.RadialBlurShader = Shader.Find("Xffect/PP/radial_blur_new"); xevent.GlowCompositeShader = Shader.Find("Xffect/PP/glow_compose"); xevent.GlowDownSampleShader = Shader.Find("Xffect/PP/glow_downsample"); xevent.GlowBlurShader = Shader.Find("Xffect/PP/glow_conetap"); xevent.RadialBlurObj = xevent.transform; xevent.ColorInverseShader = Shader.Find("Xffect/PP/color_inverse"); xevent.GlowPerObjBlendShader = Shader.Find("Xffect/glow_per_obj/blend"); xevent.GlowPerObjReplacementShader = Shader.Find("Xffect/glow_per_obj/replacement"); xevent.gameObject.layer = Script.gameObject.layer; Selection.activeGameObject = obj; } EditorGUILayout.Space(); XEditor.EndXArea(); DrawInfos(); serializedObject.ApplyModifiedProperties(); }
public static void DoPatch(XftEventComponent xevent) { }
public override void OnInspectorGUI() { XffectComponent ctarget = (XffectComponent)target; if (Application.isEditor && !EditorApplication.isPlaying) { EditorApplication.update = ctarget.Update; } EditorGUILayout.BeginVertical(); EditorGUILayout.Space(); EditorGUILayout.Separator(); ctarget.LifeTime = EditorGUILayout.FloatField("life:", ctarget.LifeTime); EditorGUILayout.LabelField("[life -1 means infinite.]"); ctarget.IgnoreTimeScale = EditorGUILayout.Toggle("ignore time scale?", ctarget.IgnoreTimeScale); EditorGUILayout.Separator(); ctarget.Scale = EditorGUILayout.FloatField("scale:", ctarget.Scale); EditorGUILayout.Separator(); if (GUILayout.Button("Add Layer")) { GameObject layer = new GameObject(LayerName); EffectLayer efl = (EffectLayer)layer.AddComponent("EffectLayer"); layer.transform.parent = Selection.activeTransform; efl.transform.localPosition = Vector3.zero; //fixed 2012.6.25. default to effect layer object. efl.ClientTransform = efl.transform; efl.GravityObject = efl.transform; efl.BombObject = efl.transform; efl.TurbulenceObject = efl.transform; efl.AirObject = efl.transform; efl.VortexObj = efl.transform; efl.DirCenter = efl.transform; } if (GUILayout.Button("Add Event")) { GameObject layer = new GameObject("_Event"); XftEventComponent xevent = (XftEventComponent)layer.AddComponent("XftEventComponent"); xevent.transform.parent = Selection.activeTransform; xevent.transform.localPosition = Vector3.zero; xevent.RadialBlurShader = Shader.Find("Xffect/PP/radial_blur_new"); xevent.GlowCompositeShader = Shader.Find("Xffect/PP/glow_compose"); xevent.GlowDownSampleShader = Shader.Find("Xffect/PP/glow_downsample"); xevent.GlowBlurShader = Shader.Find("Xffect/PP/glow_conetap"); xevent.RadialBlurObj = xevent.transform; xevent.ColorInverseShader = Shader.Find("Xffect/PP/color_inverse"); } EditorGUILayout.Separator(); ctarget.EditView = EditorGUILayout.Toggle("update in editor?", ctarget.EditView); //prevent asset inspector to update. if (ctarget.EditView == true) { if (!XffectComponent.IsActive(ctarget.gameObject)) { ctarget.EditView = false; Debug.Log("you should activate the xffect object: " + ctarget.gameObject.name + " before updating it in editor."); } } if (ctarget.EditView) { ctarget.EnableEditView(); } else { ctarget.DisableEditView(); } if (ctarget.EditView) { if (GUILayout.Button("Reset Editor Xffect")) { ctarget.ResetEditScene(); } } EditorGUILayout.EndVertical(); if (GUI.changed) { EditorUtility.SetDirty(target); } }
public override void OnInspectorGUI() { serializedObject.Update(); //check if need to upgrade. System.Version myVer = new System.Version(Script.MyVersion); if (myVer <= new System.Version("4.4.0")) { DoPatch440(Script); EditorUtility.SetDirty(target); } XEditor.BeginCommonArea("xffect main config", Script.gameObject.name, this, true); EditorGUILayout.Space(); if (EditorUtility.IsPersistent(target)) { if (GUILayout.Button("Put To Scene")) { GameObject obj = PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject) as GameObject; Selection.activeGameObject = obj; if (obj != null) { XffectComponent xobj = obj.GetComponent <XffectComponent>(); if (xobj != null) { xobj.EditView = true; xobj.EnableEditView(); } } } } XEditor.DrawToggle("update in editor?", "", EditView); //EditView.boolValue = EditorGUILayout.Toggle("update in editor:", EditView.boolValue,GUILayout.Height(40f)); //if (EditView.boolValue == true) { //if (!XffectComponent.IsActive(Script.gameObject)) { //EditView.boolValue = false; //Debug.Log ("you need to activate the xffect object: " + Script.gameObject.name + " before updating it in editor."); //} //} if (EditView.boolValue) { Script.EnableEditView(); } else { Paused.boolValue = false; Script.DisableEditView(); } if (EditView.boolValue) { PlaybackTime.floatValue = EditorGUILayout.FloatField("Playback time: ", PlaybackTime.floatValue); if (PlaybackTime.floatValue < 0f) { PlaybackTime.floatValue = 0f; } string disp = "Pause"; if (Paused.boolValue) { disp = "Play"; } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(disp)) { Paused.boolValue = !Paused.boolValue; } if (GUILayout.Button("Reset")) { Paused.boolValue = false; Script.ResetEditScene(); } EditorGUILayout.EndHorizontal(); } XEditor.DrawSeparator(); XEditor.DrawFloat("life(-1 means infinite):", "", LifeTime); XEditor.DrawToggle("ignore time scale?", "", IgnoreTimeScale); XEditor.DrawToggle("auto destroy?", "check on this option if you want this obj to be destroyed when finished, note this option only works in play mode.", AutoDestroy); XEditor.DrawToggle("merge same mesh?", "check on this option to merge the meshes with same material, can reduce drawcalls.", MergeSameMaterialMesh); XEditor.DrawToggle("update when offscreen?", "", UpdateWhenOffScreen); if (XEditor.DrawToggle("use with 2d sprite?", "", UseWith2DSprite)) { XEditor.DrawText("sorting layer name:", "", SortingLayerName); XEditor.DrawInt("sorting order:", "", SortingOrder); } EditorGUILayout.Space(); XEditor.DrawInt("Max Fps:", "", MaxFps); XEditor.DrawFloat("scale:", "change this Xffect's scale", Scale); if (!Mathf.Approximately(1f, Scale.floatValue)) { XEditor.DrawInfo("note it's not recommended to use this function to change xffect's scale. if you encounter strange behavious, please change it back to 1."); } if (GUILayout.Button("Add Layer")) { GameObject layer = new GameObject(LayerName); EffectLayer efl = (EffectLayer)layer.AddComponent <EffectLayer>(); layer.transform.parent = Selection.activeTransform; efl.transform.localPosition = Vector3.zero; //default to effect layer object. efl.ClientTransform = efl.transform; efl.GravityObject = efl.transform; efl.BombObject = efl.transform; efl.TurbulenceObject = efl.transform; efl.AirObject = efl.transform; efl.VortexObj = efl.transform; //efl.DirCenter = efl.transform; efl.Material = AssetDatabase.LoadAssetAtPath(XEditorTool.GetXffectPath() + DefaultMatPath, typeof(Material)) as Material; efl.gameObject.layer = Script.gameObject.layer; efl.LineStartObj = efl.transform; Selection.activeGameObject = layer; } if (GUILayout.Button("Add Event")) { GameObject obj = new GameObject("_Event"); XftEventComponent xevent = (XftEventComponent)obj.AddComponent <XftEventComponent>(); xevent.transform.parent = Selection.activeTransform; xevent.transform.localPosition = Vector3.zero; xevent.RadialBlurShader = Shader.Find("Xffect/PP/radial_blur"); xevent.GlowCompositeShader = Shader.Find("Xffect/PP/glow_compose"); xevent.GlowDownSampleShader = Shader.Find("Xffect/PP/glow_downsample"); xevent.GlowBlurShader = Shader.Find("Xffect/PP/glow_conetap"); xevent.RadialBlurObj = xevent.transform; xevent.ColorInverseShader = Shader.Find("Xffect/PP/color_inverse"); xevent.GlowPerObjBlendShader = Shader.Find("Hidden/PP/Xffect/glow_per_obj/blend"); xevent.GlowPerObjReplacementShader = Shader.Find("Hidden/PP/Xffect/glow_per_obj/replacement"); xevent.gameObject.layer = Script.gameObject.layer; Selection.activeGameObject = obj; } XEditor.EndXArea(); DrawInfos(); serializedObject.ApplyModifiedProperties(); }
//in editor mode, Awake() method called twice, why?. public void Initialize() { if (EflList.Count > 0) {//already inited. return; } //fixed : 2012.5.25. can't add child game object during foreach.. //ArrayList tobeAdded = new ArrayList(); foreach (Transform child in transform) { EffectLayer el = (EffectLayer)child.GetComponent(typeof(EffectLayer)); if (el == null) { continue; } if (el.Material == null) { Debug.LogWarning("effect layer: " + el.gameObject.name + " has no material, please assign a material first!"); continue; } SetActive(el.gameObject, true); Material mat = el.Material; //ver 1.2.1 mat.renderQueue = mat.shader.renderQueue; mat.renderQueue += el.Depth; EflList.Add(el); MeshFilter Meshfilter; MeshRenderer Meshrenderer; Transform oldMesh = transform.Find("xftmesh " + mat.name); if (oldMesh != null) {//already instaniate by object cache.just recreate vertex pool.\ Meshfilter = (MeshFilter)oldMesh.GetComponent(typeof(MeshFilter)); Meshrenderer = (MeshRenderer)oldMesh.GetComponent(typeof(MeshRenderer)); Meshfilter.sharedMesh = new Mesh(); Meshfilter.sharedMesh.Clear(); MatDic[mat.name] = new VertexPool(Meshfilter.sharedMesh, mat); //fixed 2012.7.20 if already exist, Add to MeshList too. if (!MeshList.Contains(oldMesh.gameObject)) { MeshList.Add(oldMesh.gameObject); } } if (!MatDic.ContainsKey(mat.name)) { GameObject obj = new GameObject("xftmesh " + mat.name); obj.layer = gameObject.layer; //obj.transform.parent = this.transform; //tobeAdded.Add(obj); MeshList.Add(obj); obj.AddComponent <MeshFilter>(); obj.AddComponent <MeshRenderer>(); SetActive(obj, IsActive(gameObject)); #if UNITY_EDITOR if (!EditorApplication.isPlaying) { XffectComponent.SetActive(obj, true); } #endif Meshfilter = (MeshFilter)obj.GetComponent(typeof(MeshFilter)); Meshrenderer = (MeshRenderer)obj.GetComponent(typeof(MeshRenderer)); Meshrenderer.castShadows = false; Meshrenderer.receiveShadows = false; Meshrenderer.GetComponent <Renderer>().sharedMaterial = mat; Meshfilter.sharedMesh = new Mesh(); MatDic[mat.name] = new VertexPool(Meshfilter.sharedMesh, mat); } } //now set each gameobject's parent. foreach (GameObject obj in MeshList) { obj.transform.parent = this.transform; //fixed 2012.6.25, obj.transform.position = Vector3.zero; obj.transform.rotation = Quaternion.identity; //fixed 2012.7.11, avoid the lossy scale influence the mesh object. Vector3 realLocalScale = Vector3.zero; realLocalScale.x = 1 / obj.transform.parent.lossyScale.x; realLocalScale.y = 1 / obj.transform.parent.lossyScale.y; realLocalScale.z = 1 / obj.transform.parent.lossyScale.z; obj.transform.localScale = realLocalScale * Scale; } //start each effect layer. foreach (EffectLayer efl in EflList) { efl.Vertexpool = MatDic[efl.Material.name]; } //this.transform.position = Vector3.zero; //this.transform.rotation = Quaternion.identity; this.transform.localScale = Vector3.one; foreach (EffectLayer el in EflList) { el.StartCustom(); } //add events EventList.Clear(); foreach (Transform child in transform) { XftEventComponent xftevent = child.GetComponent <XftEventComponent>(); if (xftevent == null) { continue; } EventList.Add(xftevent); xftevent.Initialize(); } Initialized = true; }
public void Update() { CurTime = Time.realtimeSinceStartup; #if UNITY_EDITOR if (!EditorApplication.isPlaying) { if (!EditView) { return; } CurTime = EditorApplication.timeSinceStartup; if (!CheckEditModeInited()) { ResetEditScene(); } } #endif float deltaTime = (float)(CurTime - LastTime); //simple method to check game delay: the game must run above 20 FPS. if (deltaTime > 0.05f) { deltaTime = 0.0333f; } if (!IgnoreTimeScale) { deltaTime *= Time.timeScale; } ElapsedTime += deltaTime; for (int i = 0; i < EflList.Count; i++) { if (EflList[i] == null) //be destroyed? { return; } EffectLayer el = EflList[i]; if (ElapsedTime > el.StartTime && IsActive(el.gameObject)) { el.FixedUpdateCustom(deltaTime); } } for (int i = 0; i < EventList.Count; i++) { XftEventComponent e = EventList[i]; if (IsActive(e.gameObject)) { e.UpdateCustom(deltaTime); } } LastTime = CurTime; #if UNITY_EDITOR if (!EditorApplication.isPlaying) { LateUpdate(); } #endif }