Trigger Puzzle System v1.1 Manual
Transcripción
Trigger Puzzle System v1.1 Manual
Trigger Puzzle System v1.1 Manual (Versión en Español) Índice 1. Introducción 2. Detalles y conceptos del sistema 3. Activadores (Trigger Objects) 3.1. Extendiendo Activadores 4. Objetos Activables (Triggable Objects) 4.1. Acciones 5. Configurar proyecto para escenas de ejemplo 6. Soporte 2 1. Introducción El propósito de este asset es crear un flujo de trabajo que permita el diseño de puzzles de manera ágil y flexible. Está fuertemente pensado para que los roles de diseño de nivel sean flexibles, de esta manera, un artista puede contribuir a la creación de los puzzles con el mínimo apoyo de programadores, esto no quiere decir que los programadores lo tengan todo hecho con este sistema; podemos decir que allana el terreno para que exista un buen flujo de trabajo entre programador y diseñador de nivel. 2. Detalles y conceptos del sistema Para entender este sistema debemos diferenciar entre Trigger Object y Triggable Object. Un objeto con el componente Trigger Object es un activador. Puedes pensar en él como en un botón o un accionador, es el objeto con el que el jugador interactúa directamente. A partir de ahora nos referiremos a los objetos con este componente, como activadores. Un objeto con el componente Triggable Object es un objeto activable. Por ejemplo: una puerta cerrada que se abre una vez se activa. Nos referiremos a estos objetos con este componente como objetos activables. Un objeto activable puede tener tantos activadores como se requieran. Imaginémonos una puerta como objeto activable, a este le podremos asignar una serie de botones que actúan como activadores. Cuando el jugador pulse los botones la puerta se abrirá. 3 3. Activadores (Trigger Objects) Los activadores descritos anteriormente tienen una serie de propiedades que permiten variar su comportamiento lógico desde el inspector. El campo Trigger Type permite cambiar la lógica con la que funcionan los activadores: Activable: Permite activarse como un botón normal. Una vez se acciona el activador, en este modo, no se puede volver a interactuar con él. Hold: Es necesario mantener pulsado el activador para que permanezca encendido. Switchable: Permite encender y apagar el activador. Timable: Permite encender el activador durante un intervalo de tiempo, en segundos, tras el cual se apagará. El campo Activation System permite definir cómo se enciende el activador: Active by collision: Hace que el activador se encienda por colisión. Cuando se selecciona esta opción, se dibujará un nuevo campo en el inspector "Collision Filter". Te permitirá filtrar colisiones por Layer mask, tags o nombre de game object. Active by keyboard: Hace que el activador se encienda mediante una tecla configurada en el Input Manager. Nota importante: Para que el activador funcione correctamente, debe tener un collider (2D o 3D) marcado como is trigger. 4 3.1. Extendiendo Activadores Aparte del funcionamiento anteriormente descrito, esto no es suficiente. Nuestros activadores deben de actuar de diferente forma según nuestras necesidades. Por ejemplo un activador en el suelo debería ser capaz de iluminarse o de hundirse, con el fin de poder apreciarse como un botón. Otro activador podría ser una antorcha que necesita ser encendida. A esto lo llamamos Comportamientos (Behaviours). Para crear un comportamiento o behaviour debemos crear nuestro propio componente, este debe extenderse de la clase TriggerPS.TriggerExtendedBehaviour. Desde esta clase se puede comprobar el estado del trigger al que se ha asociado con this.trigger.isActive(), permitiendo ejecutar lógicas adicionales. En el asset se incluyen algunos ejemplos. En el Ejemplo 1 tenemos el siguiente behaviour que permite a los triggers cambiar de color. public class ColorBehaviour : TriggerPS.TriggerExtendedBehaviour { public Color colorOff, colorOn; // Choose the object color when trigger is ON/OFF private Renderer m_Renderer; protected override void Awake() { base.Awake(); // Call Awake() in base class! m_Renderer = gameObject.GetComponent<Renderer>(); m_Renderer.material.color = colorOff; } public void Update() { // Checks if trigger was activated and if color material is still from color off if (this.trigger.isActive() && m_Renderer.material.color == colorOff) { m_Renderer.material.color = colorOn; // Checks if trigger is inactivated and if color material is still from color on } else if (!this.trigger.isActive() && m_Renderer.material.color == colorOn) { m_Renderer.material.color = colorOff; } } } 5 4. Objetos Activables (Triggable Objects) El objeto activable se trata del objeto que ejecutará alguna acción una vez los activadores se han encendidos. Los activadores se asignan en el inspector, seleccionando el objeto con el componente Triggable Object . En el editor se muestran las conexiones, entre el objeto activable y los activadores, de color rojo. En runtime estos cambian a color verde cuando los activadores se encienden. Cuando en un objeto activable se encienden todos sus activadores, este ejecuta lo que llamamos Acciones. Hablaremos de ello más adelante y trataremos de explicar qué podemos configurar en el inspector. Para ellos nos saltaremos el check Have Actions del cual hablaremos más adelante. Si activamos el check Debug obtendremos en la consola información cuando un objeto activable se ha accionado. El campo Activation Method establece la mecánica con la que se acciona el objeto: Simple: Ejecuta las acciones del objeto activable una vez se han encendido todos sus activadores. Combination: Ejecuta las acciones del objeto activable cuando los activadores se han encendido en un orden concreto. Este orden será el mismo en el que está dispuesta la lista de activadores en el objeto activable. En la imagen superior perteneciente al Ejemplo 2 - observamos que los activadores están configurados para que el orden de pulsación de las palancas sean Lever 3 - Lever 1 - Lever 2. Cualquier otra combinación reiniciará el sistema de activadores. 6 4.1. Acciones Como decíamos anteriormente, un objeto activable ejecuta acciones una vez que sus activadores se han encendido. Estas acciones pueden ser desde el movimiento de un objeto o la ejecución de la animación de un sprite. Para aplicar una o más acciones a un objeto activable debemos crear un componente. Este debe extenderse de la clase TriggableAction. Esta clase implementa en primer lugar el campo alias. Nos será útil cuando queramos reutilizar una acción. Por ejemplo: Podemos utilizar una acción que permite mover un objeto para cerrar o abrir una puerta. Una acción se ejecuta cuando el objeto se activa y otra cuando se desactiva. Una vez que asignamos un alias, este nombre permanece bajo la opción Have Actions, cuando está marcada. Nota Importante: Para que las acciones se ejecuten debemos tener marcada la opción Have Actions. Si quisiéramos desactivar todas las acciones rápidamente entonces la desmarcaríamos. La clase TriggableAction también implementa un enum que permite elegir en qué momento se ejecutará: 7 Action When Active: La acción se ejecuta cuando el objeto activable sea accionado. Action When Deactive: La acción se ejecuta cuando el objeto activable se ha desactivado. Action When Ordered Error: La acción se ejecuta cuando se enciende una combinación errónea de activadores. Disabled Action: Deshabilita la acción, provoca que nunca se ejecute. Cuando creemos nuestro componente derivada de esta clase, el comportamiento que queramos crear deberá ser programada en la función doAction(). Esta función se llama desde TriggableObject en los momentos descritos anteriormente. La siguiente acción está disponible en el Ejemplo 1 y permite mover un objeto hasta la posición final deseada: public class MoveObjectAction : TriggerPS.TriggableAction { public Vector3 finalPosition; // Final object position public float movementTime; // This function will be called from the TriggableObject when it gets activated public override void doAction() { StartCoroutine(openDoor(movementTime)); } IEnumerator openDoor(float time) { float elapsedTime = 0f; Vector3 startingPosition = transform.position; while (elapsedTime < time) { transform.position = Vector3.Lerp(startingPosition, finalPosition, (elapsedTime/time)); elapsedTime += Time.deltaTime; yield return 0; } } } 8 5. Configurar proyecto para escenas de ejemplo Este asset incluye tres escenas de ejemplo donde se pueden observar diferentes configuraciones e ideas de implementación de puzzles. Sin embargo, para poder reproducirlas sin problemas se deben seguir los siguientes pasos. Debemos agregar las escenas de unity en Build Settings. Settings). (File --> Build Esto es debido a que en los primeros ejemplos hay un script que intercambia de una escena a otra y produce este requerimiento. A continuación hacemos click en (Edit --> Project Settings --> Input) y añadimos el campo Use, en el Input Manager, que es activado con la tecla space. 9 6. Soporte Si tienes alguna duda o necesitas ayuda para adaptar el código por favor contacta con nosotros. Si tienes sugerencias también, cualquier comentario será bien recibido. Estamos disponibles a través del contacto de soporte vía email [email protected] o bien a través del formulario de nuestro sitio web en Code Nite Studios. En el sitio web http://trigger.codenitestudios.com/ pronto se pondrá a disposición de la comunidad un espacio web con videos, tutoriales, foro de soporte, bibliotecas de acciones y comportamientos, etc. 10