public static void DrawSensorSettings(VertExmotionSensorBase sensor) { PID pid = new PID(); pid.m_params = new PID.Parameters(sensor.m_pid.m_params); pid.m_params.limits.x = -float.MaxValue; pid.m_params.limits.y = float.MaxValue; //float timeUnit = EditorGUILayout.FloatField ("time unit (s)",m_timeUnit); //timeUnit = Mathf.Clamp ( timeUnit, 0.1f, 30f); GUILayout.Space(10); //if( GUILayout.Button( (m_showSensorSettings?"-":"+") + "Sensor Settings", VertExmotionEditor.m_styleTitle ) ) if (GUILayout.Button((m_settingMode == eSettingsMode.SENSORS?"-":"+") + "Sensor Settings", VertExmotionEditor.m_styleTitle)) { //m_showSensorSettings = !m_showSensorSettings; m_settingMode = m_settingMode == eSettingsMode.SENSORS ? eSettingsMode.NONE : eSettingsMode.SENSORS; //if( m_showSensorSettings ) m_showColliderSettings = false; } //if( m_showSensorSettings ) //if( m_settingMode == eSettingsMode.SENSORS ) if (BeginFadeGroup(eSettingsMode.SENSORS)) { GUILayout.Label("Lock your sensor to a gameobject"); GUILayout.Label("Set a bone for skinnedMesh"); GUILayout.BeginHorizontal(); GUILayout.Label("parent", GUILayout.Width(75f)); sensor.m_parent = EditorGUILayout.ObjectField(sensor.m_parent, typeof(Transform), true) as Transform; GUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.Label("motion settings : ", VertExmotionEditor.m_styleBold); //sensor.m_params.translation.innerAmplitude = Mathf.Clamp( EditorGUILayout.FloatField( "outer amplitude", sensor.m_params.translation.innerAmplitude ), 0, float.MaxValue ); //sensor.m_params.translation.amplitudeMultiplier = sensor.m_params.translation.amplitude; sensor.m_params.translation.amplitudeMultiplier = Mathf.Clamp(EditorGUILayout.FloatField("Amplitude multiplier", sensor.m_params.translation.amplitudeMultiplier), 0, float.MaxValue); //sensor.m_params.translation.amplitude = sensor.m_params.translation.amplitudeMultiplier; sensor.m_params.translation.outerMaxDistance = Mathf.Clamp(EditorGUILayout.FloatField("Outer max distance", sensor.m_params.translation.outerMaxDistance), 0, float.MaxValue); sensor.m_params.translation.innerMaxDistance = Mathf.Clamp(EditorGUILayout.FloatField("Inner max distance", sensor.m_params.translation.innerMaxDistance), 0, float.MaxValue); sensor.m_params.inflate = EditorGUILayout.FloatField("Inflate", sensor.m_params.inflate); sensor.m_params.damping = Mathf.Clamp(EditorGUILayout.FloatField("Damping", sensor.m_params.damping), 0, 30f); sensor.m_pid.m_params.kp = sensor.m_params.damping; sensor.m_params.bouncing = Mathf.Clamp(EditorGUILayout.FloatField("Bouncing", sensor.m_params.bouncing), 0, 30f); sensor.m_pid.m_params.ki = sensor.m_params.bouncing; //GUILayout.Label( "", GUILayout.Height(50f) ); GUILayout.Box(" ", VertExmotionEditor.m_bgStyle, GUILayout.Height(50f), GUILayout.ExpandWidth(true)); GUIDrawPidResponse(pid, GUILayoutUtility.GetLastRect(), sensor.m_pidTime); sensor.m_pidTime = EditorGUILayout.Slider("t (s)", sensor.m_pidTime, 1f, 10f); EditorGUILayout.EndFadeGroup(); } //----------------------------------------------- //FX settings //----------------------------------------------- GUILayout.Space(10); if (GUILayout.Button((m_settingMode == eSettingsMode.FX?"-":"+") + "FX Settings", VertExmotionEditor.m_styleTitle)) { m_settingMode = m_settingMode == eSettingsMode.FX ? eSettingsMode.NONE : eSettingsMode.FX; } //if( m_settingMode == eSettingsMode.FX ) if (BeginFadeGroup(eSettingsMode.FX)) { sensor.m_params.translation.gravityInOut = EditorGUILayout.Vector2Field("Gravity in/out", sensor.m_params.translation.gravityInOut); sensor.m_params.translation.localOffset = EditorGUILayout.Vector3Field("Local offset", sensor.m_params.translation.localOffset); sensor.m_params.translation.worldOffset = EditorGUILayout.Vector3Field("World offset", sensor.m_params.translation.worldOffset); sensor.m_params.fx.squash = EditorGUILayout.FloatField("Stretch", sensor.m_params.fx.squash); sensor.m_params.fx.stretchMax = EditorGUILayout.FloatField("Stretch max dist", sensor.m_params.fx.stretchMax); sensor.m_params.fx.stretchMinSpeed = EditorGUILayout.FloatField("Stretch min speed", sensor.m_params.fx.stretchMinSpeed); EditorGUILayout.EndFadeGroup(); } //----------------------------------------------- //collider settings //----------------------------------------------- GUILayout.Space(10); if (GUILayout.Button((m_settingMode == eSettingsMode.COLLIDERS?"-":"+") + "Collider Settings", VertExmotionEditor.m_styleTitle)) { m_settingMode = m_settingMode == eSettingsMode.COLLIDERS ? eSettingsMode.NONE : eSettingsMode.COLLIDERS; } //if( m_settingMode == eSettingsMode.COLLIDERS ) if (BeginFadeGroup(eSettingsMode.COLLIDERS)) { VertExmotionColliderBase vtmCol = sensor.GetComponentInChildren <VertExmotionColliderBase>(); if (vtmCol == null) { if (GUILayout.Button("Add collider")) { EditorPrefs.SetInt("VertExmotion_LastMode", (int)VertExmotionEditor.eMode.SENSORS); GameObject go = new GameObject("VMCollider"); go.transform.parent = sensor.transform; go.transform.localScale = Vector3.one; go.transform.localPosition = Vector3.zero; go.transform.localRotation = Quaternion.identity; VertExmotionColliderBase collider = go.AddComponent <VertExmotionColliderBase>(); VertExmotionEditor.ReplaceBaseClass(collider); m_removeCollider = false; } } else { //draw collider GUI string[] options = new string[32]; for (int i = 0; i < 32; ++i) { options[i] = LayerMask.LayerToName(i); } vtmCol.m_layerMask = EditorGUILayout.MaskField("layer mask", vtmCol.m_layerMask, options); //show collision zone param int colZoneToDelete = -1; for (int j = 0; j < vtmCol.m_collisionZones.Count; ++j) { GUILayout.BeginHorizontal(); GUILayout.Label("Zone " + j, VertExmotionEditor.m_styleBold); GUILayout.FlexibleSpace(); if (GUILayout.Button("delete")) { colZoneToDelete = j; } GUILayout.EndHorizontal(); vtmCol.m_collisionZones[j].positionOffset = EditorGUILayout.Vector3Field("position", vtmCol.m_collisionZones[j].positionOffset); vtmCol.m_collisionZones[j].radius = EditorGUILayout.FloatField("radius", vtmCol.m_collisionZones[j].radius); EditorUtility.SetDirty(vtmCol); } if (colZoneToDelete != -1) { vtmCol.m_collisionZones.RemoveAt(colZoneToDelete); } if (GUILayout.Button("Add collision zone")) { vtmCol.m_collisionZones.Add(new VertExmotionColliderBase.CollisionZone()); } GUILayout.Space(10); //remove collider if (!m_removeCollider) { if (GUILayout.Button("Remove collider")) { m_removeCollider = true; } } else { GUILayout.BeginHorizontal(); GUILayout.Label("remove collider?"); if (GUILayout.Button("yes")) { if (Application.isPlaying) { Destroy(vtmCol.gameObject); } else { DestroyImmediate(vtmCol.gameObject); } } if (GUILayout.Button("no")) { m_removeCollider = false; } GUILayout.EndHorizontal(); } } EditorGUILayout.EndFadeGroup(); } EditorUtility.SetDirty(sensor); }