270 lines
9.4 KiB
C#
270 lines
9.4 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using System.Collections;
|
|||
|
|
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
using UnityEditor;
|
|||
|
|
|
|||
|
|
[CustomEditor (typeof (externalCameraShakeSystem))]
|
|||
|
|
[CanEditMultipleObjects]
|
|||
|
|
public class externalCameraShakeSystemEditor : Editor
|
|||
|
|
{
|
|||
|
|
SerializedProperty useShakeListTriggeredByActions;
|
|||
|
|
SerializedProperty nameList;
|
|||
|
|
SerializedProperty nameIndex;
|
|||
|
|
SerializedProperty externalShakeName;
|
|||
|
|
SerializedProperty setPlayerManually;
|
|||
|
|
SerializedProperty currentPlayer;
|
|||
|
|
SerializedProperty shakeTriggeredByActionList;
|
|||
|
|
SerializedProperty shakeUsingDistance;
|
|||
|
|
SerializedProperty minDistanceToShake;
|
|||
|
|
SerializedProperty layer;
|
|||
|
|
SerializedProperty useShakeEvent;
|
|||
|
|
SerializedProperty eventAtStart;
|
|||
|
|
SerializedProperty eventAtEnd;
|
|||
|
|
SerializedProperty showGizmo;
|
|||
|
|
SerializedProperty gizmoLabelColor;
|
|||
|
|
|
|||
|
|
SerializedProperty mainManagerName;
|
|||
|
|
|
|||
|
|
SerializedProperty externalCameraShakeEnabled;
|
|||
|
|
|
|||
|
|
|
|||
|
|
externalCameraShakeSystem shakeManager;
|
|||
|
|
|
|||
|
|
GUIStyle style = new GUIStyle ();
|
|||
|
|
|
|||
|
|
bool expanded;
|
|||
|
|
|
|||
|
|
GUIStyle buttonStyle = new GUIStyle ();
|
|||
|
|
|
|||
|
|
void OnEnable ()
|
|||
|
|
{
|
|||
|
|
useShakeListTriggeredByActions = serializedObject.FindProperty ("useShakeListTriggeredByActions");
|
|||
|
|
nameList = serializedObject.FindProperty ("nameList");
|
|||
|
|
nameIndex = serializedObject.FindProperty ("nameIndex");
|
|||
|
|
externalShakeName = serializedObject.FindProperty ("externalShakeName");
|
|||
|
|
setPlayerManually = serializedObject.FindProperty ("setPlayerManually");
|
|||
|
|
currentPlayer = serializedObject.FindProperty ("currentPlayer");
|
|||
|
|
shakeTriggeredByActionList = serializedObject.FindProperty ("shakeTriggeredByActionList");
|
|||
|
|
shakeUsingDistance = serializedObject.FindProperty ("shakeUsingDistance");
|
|||
|
|
minDistanceToShake = serializedObject.FindProperty ("minDistanceToShake");
|
|||
|
|
layer = serializedObject.FindProperty ("layer");
|
|||
|
|
useShakeEvent = serializedObject.FindProperty ("useShakeEvent");
|
|||
|
|
eventAtStart = serializedObject.FindProperty ("eventAtStart");
|
|||
|
|
eventAtEnd = serializedObject.FindProperty ("eventAtEnd");
|
|||
|
|
showGizmo = serializedObject.FindProperty ("showGizmo");
|
|||
|
|
gizmoLabelColor = serializedObject.FindProperty ("gizmoLabelColor");
|
|||
|
|
|
|||
|
|
mainManagerName = serializedObject.FindProperty ("mainManagerName");
|
|||
|
|
|
|||
|
|
externalCameraShakeEnabled = serializedObject.FindProperty ("externalCameraShakeEnabled");
|
|||
|
|
|
|||
|
|
shakeManager = (externalCameraShakeSystem)target;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void OnSceneGUI ()
|
|||
|
|
{
|
|||
|
|
if (!Application.isPlaying) {
|
|||
|
|
if (shakeManager.showGizmo) {
|
|||
|
|
|
|||
|
|
style.normal.textColor = shakeManager.gizmoLabelColor;
|
|||
|
|
style.alignment = TextAnchor.MiddleCenter;
|
|||
|
|
|
|||
|
|
Handles.Label (shakeManager.transform.position + shakeManager.transform.up * shakeManager.minDistanceToShake,
|
|||
|
|
"External Shake: " + shakeManager.externalShakeName, style);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void OnInspectorGUI ()
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginVertical (GUILayout.Height (30));
|
|||
|
|
|
|||
|
|
buttonStyle = new GUIStyle (GUI.skin.button);
|
|||
|
|
|
|||
|
|
buttonStyle.fontStyle = FontStyle.Bold;
|
|||
|
|
buttonStyle.fontSize = 12;
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
GUILayout.BeginVertical ("Main Settings", "window");
|
|||
|
|
EditorGUILayout.PropertyField (externalCameraShakeEnabled);
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
EditorGUILayout.PropertyField (mainManagerName);
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
if (!useShakeListTriggeredByActions.boolValue) {
|
|||
|
|
if (nameList.arraySize > 0) {
|
|||
|
|
nameIndex.intValue = EditorGUILayout.Popup ("External Shake Type", nameIndex.intValue, shakeManager.nameList);
|
|||
|
|
externalShakeName.stringValue = shakeManager.nameList [nameIndex.intValue];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
EditorGUILayout.PropertyField (setPlayerManually);
|
|||
|
|
if (setPlayerManually.boolValue || useShakeListTriggeredByActions.boolValue) {
|
|||
|
|
EditorGUILayout.PropertyField (currentPlayer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
EditorGUILayout.PropertyField (useShakeListTriggeredByActions);
|
|||
|
|
if (useShakeListTriggeredByActions.boolValue) {
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
GUILayout.BeginVertical ("Shake Triggered By Action List", "window");
|
|||
|
|
showShakeTriggeredByActionList (shakeTriggeredByActionList);
|
|||
|
|
GUILayout.EndVertical ();
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
EditorGUILayout.PropertyField (shakeUsingDistance);
|
|||
|
|
EditorGUILayout.PropertyField (minDistanceToShake);
|
|||
|
|
EditorGUILayout.PropertyField (layer);
|
|||
|
|
EditorGUILayout.PropertyField (useShakeEvent);
|
|||
|
|
if (useShakeEvent.boolValue) {
|
|||
|
|
EditorGUILayout.PropertyField (eventAtStart);
|
|||
|
|
EditorGUILayout.PropertyField (eventAtEnd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
}
|
|||
|
|
GUILayout.EndVertical ();
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
GUILayout.BeginVertical ("Gizmo Settings", "window");
|
|||
|
|
EditorGUILayout.PropertyField (showGizmo);
|
|||
|
|
if (showGizmo.boolValue) {
|
|||
|
|
EditorGUILayout.PropertyField (gizmoLabelColor);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndVertical ();
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
if (GUILayout.Button ("Update External Shake List")) {
|
|||
|
|
shakeManager.getExternalShakeList ();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!useShakeListTriggeredByActions.boolValue) {
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
GUILayout.BeginVertical ("Debug Options", "window");
|
|||
|
|
if (GUILayout.Button ("Test Shake")) {
|
|||
|
|
if (Application.isPlaying) {
|
|||
|
|
shakeManager.setCameraShake ();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GUILayout.EndVertical ();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
GUILayout.EndVertical ();
|
|||
|
|
if (GUI.changed) {
|
|||
|
|
serializedObject.ApplyModifiedProperties ();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void showShakeTriggeredByActionList (SerializedProperty list)
|
|||
|
|
{
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) {
|
|||
|
|
list.isExpanded = !list.isExpanded;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
if (list.isExpanded) {
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal ();
|
|||
|
|
if (GUILayout.Button ("Add Action")) {
|
|||
|
|
list.arraySize++;
|
|||
|
|
}
|
|||
|
|
if (GUILayout.Button ("Clear")) {
|
|||
|
|
list.arraySize = 0;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal ();
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
for (int i = 0; i < list.arraySize; i++) {
|
|||
|
|
expanded = false;
|
|||
|
|
GUILayout.BeginHorizontal ();
|
|||
|
|
GUILayout.BeginHorizontal ("box");
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
if (i < list.arraySize && i >= 0) {
|
|||
|
|
EditorGUILayout.BeginVertical ();
|
|||
|
|
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false);
|
|||
|
|
if (list.GetArrayElementAtIndex (i).isExpanded) {
|
|||
|
|
expanded = true;
|
|||
|
|
showShakeTriggeredByActionListElement (list.GetArrayElementAtIndex (i), i);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
EditorGUILayout.Space ();
|
|||
|
|
|
|||
|
|
GUILayout.EndVertical ();
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal ();
|
|||
|
|
if (expanded) {
|
|||
|
|
GUILayout.BeginVertical ();
|
|||
|
|
} else {
|
|||
|
|
GUILayout.BeginHorizontal ();
|
|||
|
|
}
|
|||
|
|
if (GUILayout.Button ("x")) {
|
|||
|
|
list.DeleteArrayElementAtIndex (i);
|
|||
|
|
}
|
|||
|
|
if (GUILayout.Button ("v")) {
|
|||
|
|
if (i >= 0) {
|
|||
|
|
list.MoveArrayElement (i, i + 1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (GUILayout.Button ("^")) {
|
|||
|
|
if (i < list.arraySize) {
|
|||
|
|
list.MoveArrayElement (i, i - 1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (expanded) {
|
|||
|
|
GUILayout.EndVertical ();
|
|||
|
|
} else {
|
|||
|
|
GUILayout.EndHorizontal ();
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal ();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void showShakeTriggeredByActionListElement (SerializedProperty list, int shakeIndex)
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginVertical ("box");
|
|||
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("actionName"));
|
|||
|
|
if (shakeManager.nameList.Length > 0) {
|
|||
|
|
list.FindPropertyRelative ("nameIndex").intValue = EditorGUILayout.Popup ("External Shake Type", list.FindPropertyRelative ("nameIndex").intValue, shakeManager.nameList);
|
|||
|
|
list.FindPropertyRelative ("shakeName").stringValue = shakeManager.nameList [list.FindPropertyRelative ("nameIndex").intValue];
|
|||
|
|
|
|||
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useShakeEvent"));
|
|||
|
|
if (list.FindPropertyRelative ("useShakeEvent").boolValue) {
|
|||
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventAtStart"));
|
|||
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventAtEnd"));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (GUILayout.Button ("Test Shake")) {
|
|||
|
|
if (Application.isPlaying) {
|
|||
|
|
shakeManager.setCameraShakeByAction (list.FindPropertyRelative ("actionName").stringValue);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GUILayout.EndVertical ();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif
|