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

Documentos relacionados