plantilla base para movimiento básico
This commit is contained in:
Robii Aragon
2026-02-05 05:07:55 -08:00
parent ed7b223c04
commit fd87a6ffd5
14441 changed files with 13711084 additions and 20 deletions

View File

@@ -0,0 +1,513 @@
using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
[CanEditMultipleObjects]
[CustomEditor (typeof(zeroGravityRoomSystem))]
public class zeroGravityRoomSystemEditor : Editor
{
SerializedProperty roomHasRegularGravity;
SerializedProperty roomHasZeroGravity;
SerializedProperty gravityDirectionTransform;
SerializedProperty explanation;
SerializedProperty useNewGravityOutside;
SerializedProperty outsideHasZeroGravity;
SerializedProperty outsideGravityDirectionTransform;
SerializedProperty objectsAffectedByGravity;
SerializedProperty changeGravityForceForObjects;
SerializedProperty newGravityForceForObjects;
SerializedProperty charactersAffectedByGravity;
SerializedProperty changeGravityForceForCharacters;
SerializedProperty newGravityForceForCharacters;
SerializedProperty addForceToObjectsOnZeroGravityState;
SerializedProperty forceAmountToObjectOnZeroGravity;
SerializedProperty forceDirectionToObjectsOnZeroGravity;
SerializedProperty forceModeToObjectsOnZeroGravity;
SerializedProperty addInitialForceToObjectsOnZeroGravityState;
SerializedProperty initialForceToObjectsOnZeroGravity;
SerializedProperty initialForceRadiusToObjectsOnZeroGravity;
SerializedProperty initialForcePositionToObjectsOnZeroGravity;
SerializedProperty playerTag;
SerializedProperty nonAffectedObjectsTagList;
SerializedProperty charactersTagList;
SerializedProperty highestPointPoisition;
SerializedProperty lowestPointPosition;
SerializedProperty roomPointsParent;
SerializedProperty roomPointsList;
SerializedProperty charactersInsideListAtStart;
SerializedProperty charactersInsideList;
SerializedProperty addObjectsInsideParent;
SerializedProperty objectsInsideParent;
SerializedProperty objectsInsideList;
SerializedProperty useSounds;
SerializedProperty mainAudioSource;
SerializedProperty regularGravitySound;
SerializedProperty regularGravityAudioElement;
SerializedProperty zeroGravitySound;
SerializedProperty zeroGravityAudioElement;
SerializedProperty customGravitySound;
SerializedProperty customGravityAudioElement;
SerializedProperty useSoundsOnCharacters;
SerializedProperty soundOnEntering;
SerializedProperty onEnteringAudioElement;
SerializedProperty soundOnExiting;
SerializedProperty onExitingAudioElement;
SerializedProperty debugModeActive;
SerializedProperty debugModeListActive;
SerializedProperty showDebugPrint;
SerializedProperty objectInfoList;
SerializedProperty showGizmo;
SerializedProperty centerGizmoScale;
SerializedProperty roomCenterColor;
SerializedProperty gizmoLabelColor;
SerializedProperty linesColor;
SerializedProperty useHandleForWaypoints;
zeroGravityRoomSystem manager;
string labelText;
GUIStyle style = new GUIStyle ();
Quaternion currentWaypointRotation;
Vector3 oldPoint;
Vector3 newPoint;
Transform waypoint;
string currentName;
GUIStyle buttonStyle = new GUIStyle ();
void OnEnable ()
{
roomHasRegularGravity = serializedObject.FindProperty ("roomHasRegularGravity");
roomHasZeroGravity = serializedObject.FindProperty ("roomHasZeroGravity");
gravityDirectionTransform = serializedObject.FindProperty ("gravityDirectionTransform");
explanation = serializedObject.FindProperty ("explanation");
useNewGravityOutside = serializedObject.FindProperty ("useNewGravityOutside");
outsideHasZeroGravity = serializedObject.FindProperty ("outsideHasZeroGravity");
outsideGravityDirectionTransform = serializedObject.FindProperty ("outsideGravityDirectionTransform");
objectsAffectedByGravity = serializedObject.FindProperty ("objectsAffectedByGravity");
changeGravityForceForObjects = serializedObject.FindProperty ("changeGravityForceForObjects");
newGravityForceForObjects = serializedObject.FindProperty ("newGravityForceForObjects");
charactersAffectedByGravity = serializedObject.FindProperty ("charactersAffectedByGravity");
changeGravityForceForCharacters = serializedObject.FindProperty ("changeGravityForceForCharacters");
newGravityForceForCharacters = serializedObject.FindProperty ("newGravityForceForCharacters");
addForceToObjectsOnZeroGravityState = serializedObject.FindProperty ("addForceToObjectsOnZeroGravityState");
forceAmountToObjectOnZeroGravity = serializedObject.FindProperty ("forceAmountToObjectOnZeroGravity");
forceDirectionToObjectsOnZeroGravity = serializedObject.FindProperty ("forceDirectionToObjectsOnZeroGravity");
forceModeToObjectsOnZeroGravity = serializedObject.FindProperty ("forceModeToObjectsOnZeroGravity");
addInitialForceToObjectsOnZeroGravityState = serializedObject.FindProperty ("addInitialForceToObjectsOnZeroGravityState");
initialForceToObjectsOnZeroGravity = serializedObject.FindProperty ("initialForceToObjectsOnZeroGravity");
initialForceRadiusToObjectsOnZeroGravity = serializedObject.FindProperty ("initialForceRadiusToObjectsOnZeroGravity");
initialForcePositionToObjectsOnZeroGravity = serializedObject.FindProperty ("initialForcePositionToObjectsOnZeroGravity");
playerTag = serializedObject.FindProperty ("playerTag");
nonAffectedObjectsTagList = serializedObject.FindProperty ("nonAffectedObjectsTagList");
charactersTagList = serializedObject.FindProperty ("charactersTagList");
highestPointPoisition = serializedObject.FindProperty ("highestPointPoisition");
lowestPointPosition = serializedObject.FindProperty ("lowestPointPosition");
roomPointsParent = serializedObject.FindProperty ("roomPointsParent");
roomPointsList = serializedObject.FindProperty ("roomPointsList");
charactersInsideListAtStart = serializedObject.FindProperty ("charactersInsideListAtStart");
charactersInsideList = serializedObject.FindProperty ("charactersInsideList");
addObjectsInsideParent = serializedObject.FindProperty ("addObjectsInsideParent");
objectsInsideParent = serializedObject.FindProperty ("objectsInsideParent");
objectsInsideList = serializedObject.FindProperty ("objectsInsideList");
useSounds = serializedObject.FindProperty ("useSounds");
mainAudioSource = serializedObject.FindProperty ("mainAudioSource");
regularGravitySound = serializedObject.FindProperty ("regularGravitySound");
regularGravityAudioElement = serializedObject.FindProperty ("regularGravityAudioElement");
zeroGravitySound = serializedObject.FindProperty ("zeroGravitySound");
zeroGravityAudioElement = serializedObject.FindProperty ("zeroGravityAudioElement");
customGravitySound = serializedObject.FindProperty ("customGravitySound");
customGravityAudioElement = serializedObject.FindProperty ("customGravityAudioElement");
useSoundsOnCharacters = serializedObject.FindProperty ("useSoundsOnCharacters");
soundOnEntering = serializedObject.FindProperty ("soundOnEntering");
onEnteringAudioElement = serializedObject.FindProperty ("onEnteringAudioElement");
soundOnExiting = serializedObject.FindProperty ("soundOnExiting");
onExitingAudioElement = serializedObject.FindProperty ("onExitingAudioElement");
showDebugPrint = serializedObject.FindProperty ("showDebugPrint");
debugModeActive = serializedObject.FindProperty ("debugModeActive");
debugModeListActive = serializedObject.FindProperty ("debugModeListActive");
objectInfoList = serializedObject.FindProperty ("objectInfoList");
showGizmo = serializedObject.FindProperty ("showGizmo");
centerGizmoScale = serializedObject.FindProperty ("centerGizmoScale");
roomCenterColor = serializedObject.FindProperty ("roomCenterColor");
gizmoLabelColor = serializedObject.FindProperty ("gizmoLabelColor");
linesColor = serializedObject.FindProperty ("linesColor");
useHandleForWaypoints = serializedObject.FindProperty ("useHandleForWaypoints");
manager = (zeroGravityRoomSystem)target;
}
void OnSceneGUI ()
{
if (!Application.isPlaying) {
if (manager.showGizmo) {
style.normal.textColor = manager.gizmoLabelColor;
style.alignment = TextAnchor.MiddleCenter;
if (manager.roomPointsList.Count > 0) {
for (int i = 0; i < manager.roomPointsList.Count; i++) {
if (manager.roomPointsList [i]) {
waypoint = manager.roomPointsList [i];
Handles.Label (waypoint.position, waypoint.name, style);
if (manager.useHandleForWaypoints) {
currentWaypointRotation = Tools.pivotRotation == PivotRotation.Local ? waypoint.rotation : Quaternion.identity;
EditorGUI.BeginChangeCheck ();
oldPoint = waypoint.position;
oldPoint = Handles.DoPositionHandle (oldPoint, currentWaypointRotation);
if (EditorGUI.EndChangeCheck ()) {
Undo.RecordObject (waypoint, "move waypoint" + i);
waypoint.position = oldPoint;
}
}
}
}
}
currentName = manager.gameObject.name;
Handles.Label (manager.roomCenter, currentName, style);
Handles.Label (manager.highestPointPoisition.position, "Highest \n position", style);
Handles.Label (manager.lowestPointPosition.position, "Lowest \n position", style);
}
}
}
public override void OnInspectorGUI ()
{
GUILayout.BeginVertical (GUILayout.Height (30));
EditorGUILayout.Space ();
buttonStyle = new GUIStyle (GUI.skin.button);
buttonStyle.fontStyle = FontStyle.Bold;
buttonStyle.fontSize = 12;
GUILayout.BeginVertical ("Main Settings", "window");
EditorGUILayout.PropertyField (roomHasRegularGravity);
EditorGUILayout.PropertyField (roomHasZeroGravity);
EditorGUILayout.PropertyField (gravityDirectionTransform);
EditorGUILayout.Space ();
EditorGUILayout.PropertyField (explanation);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("New Gravity Outside Of Room Settings", "window");
EditorGUILayout.PropertyField (useNewGravityOutside);
if (useNewGravityOutside.boolValue) {
EditorGUILayout.PropertyField (outsideHasZeroGravity);
EditorGUILayout.PropertyField (outsideGravityDirectionTransform);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Objects Affected Settings", "window");
EditorGUILayout.PropertyField (objectsAffectedByGravity);
if (objectsAffectedByGravity.boolValue) {
EditorGUILayout.PropertyField (changeGravityForceForObjects);
if (changeGravityForceForObjects.boolValue) {
EditorGUILayout.PropertyField (newGravityForceForObjects);
}
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Characters Affected Settings", "window");
EditorGUILayout.PropertyField (charactersAffectedByGravity);
if (charactersAffectedByGravity.boolValue) {
EditorGUILayout.PropertyField (changeGravityForceForCharacters);
if (changeGravityForceForCharacters.boolValue) {
EditorGUILayout.PropertyField (newGravityForceForCharacters);
}
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Zero Gravity Settings", "window");
EditorGUILayout.PropertyField (addForceToObjectsOnZeroGravityState);
EditorGUILayout.PropertyField (forceAmountToObjectOnZeroGravity);
EditorGUILayout.PropertyField (forceDirectionToObjectsOnZeroGravity);
EditorGUILayout.PropertyField (forceModeToObjectsOnZeroGravity);
EditorGUILayout.PropertyField (addInitialForceToObjectsOnZeroGravityState);
EditorGUILayout.PropertyField (initialForceToObjectsOnZeroGravity);
EditorGUILayout.PropertyField (initialForceRadiusToObjectsOnZeroGravity);
EditorGUILayout.PropertyField (initialForcePositionToObjectsOnZeroGravity);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Tags To Affect", "window");
EditorGUILayout.PropertyField (playerTag);
showGameObjectList (nonAffectedObjectsTagList, "No Affected Objects Tag List", "Tag");
showGameObjectList (charactersTagList, "Characters Tag List", "Tag");
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Room Points List", "window");
EditorGUILayout.PropertyField (highestPointPoisition);
EditorGUILayout.PropertyField (lowestPointPosition);
EditorGUILayout.PropertyField (roomPointsParent);
EditorGUILayout.Space ();
showRoomPointList (roomPointsList, "Room Points List");
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Characters Inside Room List", "window");
showGameObjectList (charactersInsideListAtStart, "Characters Inside Room List At Start", "Characters");
EditorGUILayout.Space ();
showGameObjectList (charactersInsideList, "Characters Inside Room List", "Characters");
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Objects Inside Room List", "window");
EditorGUILayout.PropertyField (addObjectsInsideParent);
if (addObjectsInsideParent.boolValue) {
EditorGUILayout.PropertyField (objectsInsideParent);
}
EditorGUILayout.Space ();
showGameObjectList (objectsInsideList, "Objects Inside Room List", "Objects");
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Sound Settings", "window");
EditorGUILayout.PropertyField (useSounds);
if (useSounds.boolValue) {
EditorGUILayout.PropertyField (mainAudioSource);
EditorGUILayout.PropertyField (regularGravitySound);
EditorGUILayout.PropertyField (regularGravityAudioElement);
EditorGUILayout.PropertyField (zeroGravitySound);
EditorGUILayout.PropertyField (zeroGravityAudioElement);
EditorGUILayout.PropertyField (customGravitySound);
EditorGUILayout.PropertyField (customGravityAudioElement);
EditorGUILayout.PropertyField (useSoundsOnCharacters);
if (useSoundsOnCharacters.boolValue) {
EditorGUILayout.PropertyField (soundOnEntering);
EditorGUILayout.PropertyField (onEnteringAudioElement);
EditorGUILayout.PropertyField (soundOnExiting);
EditorGUILayout.PropertyField (onExitingAudioElement);
}
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Debug Settings", "window");
EditorGUILayout.PropertyField (debugModeActive);
if (debugModeActive.boolValue) {
EditorGUILayout.PropertyField (debugModeListActive);
showObjectsInfoList (objectInfoList);
}
EditorGUILayout.PropertyField (showDebugPrint);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Gizmo Settings", "window");
EditorGUILayout.PropertyField (showGizmo);
if (showGizmo.boolValue) {
EditorGUILayout.PropertyField (centerGizmoScale);
EditorGUILayout.PropertyField (roomCenterColor);
EditorGUILayout.PropertyField (gizmoLabelColor);
EditorGUILayout.PropertyField (linesColor);
EditorGUILayout.PropertyField (useHandleForWaypoints);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.EndVertical ();
if (GUI.changed) {
serializedObject.ApplyModifiedProperties ();
EditorUtility.SetDirty (target);
}
}
void showGameObjectList (SerializedProperty list, string listName, string objectsTypeName)
{
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + listName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
EditorGUILayout.Space ();
GUILayout.Label ("Number Of " + objectsTypeName + ": \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add Element")) {
list.arraySize++;
}
if (GUILayout.Button ("Clear")) {
list.ClearArray ();
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
GUILayout.BeginHorizontal ();
if (i < list.arraySize && i >= 0) {
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), new GUIContent ("", null, ""), false);
}
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
GUILayout.EndHorizontal ();
}
}
}
void showRoomPointList (SerializedProperty list, string listName)
{
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + listName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
EditorGUILayout.Space ();
GUILayout.Label ("Number Of Points: \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add Point")) {
manager.addRoomPoint ();
}
if (GUILayout.Button ("Clear")) {
manager.removeAllRoomPoints ();
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
if (GUILayout.Button ("Rename Room Points")) {
manager.renameRoomPoints ();
}
EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
GUILayout.BeginHorizontal ();
if (i < list.arraySize && i >= 0) {
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), new GUIContent ("", null, ""), false);
}
if (GUILayout.Button ("x")) {
manager.removeRoomPoint (i);
}
if (GUILayout.Button ("+")) {
manager.addRoomPoint (i);
}
GUILayout.EndHorizontal ();
}
}
}
void showObjectsInfoList (SerializedProperty list)
{
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
GUILayout.BeginVertical ("box");
EditorGUILayout.Space ();
GUILayout.Label ("Number Of Objects: \t" + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Expand All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = true;
}
}
if (GUILayout.Button ("Collapse All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = false;
}
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
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) {
showObjectsInfoListElement (list.GetArrayElementAtIndex (i));
}
GUILayout.EndVertical ();
}
GUILayout.EndHorizontal ();
GUILayout.EndHorizontal ();
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
}
void showObjectsInfoListElement (SerializedProperty list)
{
GUILayout.BeginVertical ("box");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("objectTransform"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("isInside"));
GUILayout.EndVertical ();
}
}
#endif