Juego sensación, o ‘zumo de juego’ se refiere a la sensación táctil con experiencia en la interacción con los videojuegos, que decide cómo la diversión o la participación de la segunda a la segunda jugada del juego. A menudo es una combinación de muchos aspectos diferentes, incluyendo la rapidez con que se reproduce la animación del personaje en respuesta a la entrada de control y la cantidad de retroalimentación audiovisual se le proporciona para tomar ciertas acciones. Aunque estos aspectos son sutiles, sus impactos pueden ser strong> dramático strong> y hacer la diferencia en la creación de una experiencia memorable para sus jugadores! P> En este tutorial amigable para los principiantes, vamos a ver tres técnicas sencillas y eficaces para mejorar la sensación del juego utilizando la animación solo, sonido, y la manipulación de las cámaras! P>
No se pierda! extremos de la oferta en
Ul>
ACCESO ahora
Indice p>
JUEGO sobre Feel h3>
Antes de saltar a una discusión más profunda, deja que me presente que este tutorial se inspiró en estas tres charlas: p>
Mi toma de estas conversaciones se pueden resumir en estas 5 técnicas: p>
- Haga hincapié en el éxito del jugador! Li>
Ol>
- confeti del tiro, juego fomento de sonidos, pantalla de pausa de 0,01 milisegundos, etc.Combine todos estos efectos de hacer un momento de éxito aún más satisfactorio. Li>
Ul>
- Toque la emoción del jugador! Li>
Ol>
- a cámara lenta, cámara cinematográfica, sonido ambiental, de frases con sentido, etc.Combine todos estos efectos para dar un impacto más dramático en un determinado evento (por ejemplo, la muerte) li>
Ul>
- Añadir aleatoriedad! Li>
Ol>
- Menos exactitud (en tiradores), AI comportamiento aleatorio, efectos de sonido al azar, etc. Un poco de aleatoriedad puede darle vida a modo de juego repetitivo. Li>
Ul>
- Añadir permanencia! Li>
Ol>
- explosión, escombros, cadáveres enemigos, humo, sangre, objetos destruidos, el jugador etc.Show las consecuencias de sus acciones. Hacer que se sientan como si estuvieran interactuando con el mundo del juego. Li>
Ul>
- Hacer la diversión del jugador avatar para el control! Li>
Ol>
- Salto de longitud, triple salto, patada pared, inmersiones de estómago, etc.Make más sensibles, reacciones matizadas a la entrada del jugador. Esto permite a los jugadores para expresar su intención al sistema. Li>
Ul>
En un esfuerzo por demostrar que tales técnicas se pueden aplicar en cualquier juego para mejorar la sensación del juego, que va a cumplir este sencillo juego tipo Flappy Bird hecha por la Unidad, de esto: p>
p>
“ Hola … soy sólo este juego aburrido que dudo que tendrá que divertirse jugando. Nunca “. Em> p>
… a esto: p>
p>
“Mire mi increíble COLGAJOS! Me acaba de pasar LOS PILARES DE LA MUERTE! WEEEEEEEEEEEEEEEEEEE !!!!!!!!!!!!” em> strong> p>
En este tutorial, vamos a aprender específicamente cómo utilizar Cámara strong>, Animación strong> y Sonido strong> para mejorar la sensación del juego. Dentro del archivo de descarga del proyecto, hay algunas técnicas más avanzadas utilizadas como controles y efectos visuales para que pueda investigar más a fondo la codificación. Ahora, vamos a empezar la magia de transformar un juego débil y sin vida en un espectáculo y atractivo uno! P>
ÍNDICE h3>
Proyecto de instalación h4>
EVENTOS clave Análisis h4>
¿Cómo agregar jugosidad h4>
- La adición de batidos de pantalla li>
- Adición de Impactos de Animación li>
- Celebrando el éxito del reproductor con sistema de partículas li>
- Adición azar efectos de sonido li>
- La mejora de la sensación de juego con controles li>
Ul>
REFERENCIA / enlaces h4>
Proyecto de instalación h3>
‘Flappy Bird Estilo Ejemplo Juego’ creado por Unity Technologies em> p>
0. Juega el juego aquí! → https://avacadogames.itch.io/flappy-bird-style-example-game-unity (y llegar a sus propias ideas sobre lo que puede mejorarse) p>
1. Abre la Unidad y pulse Ctrl + 9 strong> para abrir la ventana ‘Activos tienda’. P>
2. Instalar ‘Estilo Flappy Bird Ejemplo Juego’ por Unity Technologies: p>
Descargar → https://assetstore.unity.com/packages/templates/flappy-bird-style-example-game-80330 p>
p>
3. Importar todos y abiertos Activos / Flappy Bird Estilo / _Scenes / Main strong>. P>
4. Comenzar a seguir el tutorial o empezar a añadir el jugo de partida de su propio! P>
Para descargar el código fuente utilizado en este tutorial, haga clic aquí. Asegúrese de que el paquete de la unidad se instala por primera vez, de lo contrario se podrían modificar el archivo del proyecto. P>
Eventos clave Análisis h3>
Hay tres eventos clave en este juego: p>
- bate Bird cuando se detecta entrada de jugador, li>
- puntuación aumenta cuando el jugador pasa con éxito la brecha entre los pilares, y li>
- el juego termina cuando el jugador choca con objetos. Li>
Ol>
1. Entrada jugador strong> → strong> Flaps pájaro p>
p>
2. jugador Anotó strong> → strong> sube p>
p>
3. Reproductor de muerte strong> → strong> texto ‘Game Over’ aparece p>
p>
Vamos a comenzar con la adición de impactos al primer evento:. Cuando se detecta la entrada de reproductor p>
Adición de pantalla Shake h3>
Es importante tener en cuenta que la retroalimentación sensible e intuitiva es vital para una sensación de buen juego. Cuando un jugador presiona una tecla, que esperan la acción correspondiente al ejecutarse inmediatamente, o por lo menos lo esperamos ver una señal visual de que se ha empezado a ejecutar. Que tiene una respuesta lenta a la entrada del jugador ( ‘Retardo de entrada’) hace que el juego parece lag y desconectado. Por la misma razón, que ayuda a tener algunas señales visuales claras de que el sistema ha reconocido la entrada. batido de pantalla es una de las técnicas más utilizadas para dar una retroalimentación inmediata a los jugadores. p>
Para añadir un efecto de movimiento de la pantalla para nuestro ejemplo Flappy ave de caza, vaya a Ventana>> Animación strong>, o pulse Ctrl + 6. P>
p>
‘Cámara principal’Seleccione en la Jerarquía, y crear un animador haciendo clic en ‘Crear’ en la ventana de animación. P>
Una secuencia de animación vacío, se creará automáticamente y se establece como el estado por defecto del animador. Vamos a llamar a esta clip como ‘MainCam_Idle’. Podemos crear otro clip mediante la ampliación de la lista de clips en la esquina superior izquierda y hacer clic en ‘Crear nuevo clip …’. Vamos a llamar a esta como ‘MainCam_Flap’. P>
p>
Activar ‘Modo de grabación’ y mover ligeramente la posición x, y de la cámara en cada fotograma. P>
p>
Abrir animador navegando a Ventana> Animación> animador. P>
p>
Haga clic en el estado por defecto (MainCam_Idle) y haga clic en ‘Crear Transición’. A continuación, haga clic en el clip de la ‘MainCam_Flap’ para crear una nueva flecha de transición. P>
Crea un nuevo disparador en ‘Parámetros’ y el nombre de ‘Flap’ p>
p>
Haga clic en la flecha de transición y añadir una condición haciendo clic en el botón ‘+’ en el Inspector. Establecer la condición de nuestro nuevo parámetro de disparo, ‘Flap’. P>
p>
Además, asegúrese de establecer la Duración de la transición a cero. Esto significa que no habrá ningún retraso en la transición de la animación a partir del estado de espera al estado ‘Flap’. Es crucial para hacer sentir la entrada del reproductor de respuesta, así que lo mejor es evitar tener una duración larga transición. P>
p>
Esta vez vamos a crear otra flecha transición que va desde ‘Flap’ a estado ‘inactivo’, y otra vez, establece la Duración de la transición a 0. P>
p>
Ahora el animador está todo listo para reproducir el clip de animación movimiento de la pantalla (MainCam_Flap), siempre que sea nuestra gatillo de parámetros (Flap) se llama. P>
Como un último paso, haga clic en el clip de animación (MainCam_Flap) y desactivar ‘salto temporal’ en el Inspector a menos que desee que la animación se repite sin cesar. P>
p>
- guión abierto ‘Bird’ y añadir una variable: li>
Ul>
public class Bird: MonoBehaviour {// referencia al componente animador de la cámara principal. privada animador camAnim;} 12345publicclassBird: MonoBehaviour {// referencia al animador component.privateAnimator camAnim de la cámara principal;}
- En función void Inicio (), agregue la siguiente línea: li>
Ul>
vacío Inicio () {// obtener referencia al componente animador acoplado a una cámara principal. camAnim = Camera.main.GetComponent();} 12345voidStart () {// Obtener referencia al componente animador acoplado a una cámara principal. camAnim = Camera.main.GetComponent ();}
- En función void Update (), hay una sección en la que se detecte una entrada del jugador. Li>
Ul>
// Busque entrada para activar una «aleta» .Si (Input.GetMouseButtonDown (0)) {// Indicar el animador de ello camAnim.SetTrigger ( «Flap»); } // 123456 Mirada de entrada para activar una «aleta» .Si (Input.GetMouseButtonDown (0)) {// Indicar el animador de ello camAnim.SetTrigger ( «Flap»);}
A continuación, la secuencia de comandos de aves debe mirar de esta manera: p>
Bird clase pública: MonoBehaviour {float pública upForce; bool isdead privada = false; anim pública animador; pública Rigidbody2D rb2d; camAnim animador privado; // referencia al componente animador de la cámara principal. vacío Inicio () {// obtener referencia al componente animador acoplado a una cámara principal. camAnim = Camera.main.GetComponent(); } Void Update () {if (isdead == false) {// Busque entrada para activar una «aleta». si (Input.GetMouseButtonDown (0)) {camAnim.SetTrigger ( «Flap»); // Indicar el animador de ello anim.SetTrigger ( «Flap»); rb2d.velocity = Vector2.zero; rb2d.AddForce (nuevo Vector2 (0, upForce)); }}}} 12345678910111213141516171819202122232425262728293031publicclassBird: MonoBehaviour {publicfloatupForce; privateboolisDead = false; publicAnimator anim; publicRigidbody2D rb2d; privateAnimator camAnim; // referencia al animador de la cámara principal component.voidStart () {// Obtener referencia al componente animador acoplado a una cámara principal. camAnim = Camera.main.GetComponent ();} voidUpdate () {if (isdead == false) {// Look para la entrada para disparar una «solapa» .if (Input.GetMouseButtonDown (0)) {camAnim. SetTrigger ( «Flap»); // Dile el animador de ello anim.SetTrigger ( «Flap»); rb2d.velocity = Vector2.zero; rb2d.AddForce (newVector2 (0, upForce));}}}} ahora la pantalla hará temblar cada vez que se hace clic con el botón izquierdo del ratón. Agradable! P>
Adición jugosidad a la Animación h3>
Cuando jugamos, tenemos una sensación de inmersión al ver cómo interactúan los objetos entre sí en el mundo. Obtenemos información como la gravedad del mundo, del personaje de peso, elasticidad, fuerza, y otras cosas. En un juego de plataformas como Celeste (2018), el salto no es sólo sobre el carácter que suben y bajan. Madeline, el personaje principal, en un principio se estira verticalmente al saltar hacia los lados y obtiene un poco aplastado, ya que ella aterriza en el suelo. Su pelo sigue al cuerpo con un poco de las formas de retardo y el polvo en el suelo mientras aterriza. Cada tanto detalle poco hace que el salto mucho más fluido y vivo. P>
¿Qué podemos hacer para que la acción mirada de nuestra ave más divertido? ¿Qué se siente cuando un pájaro bate en la realidad? ¿Cómo podemos exagerar un cierto aspecto de la misma? ¿Qué tipo de sentimiento es lo que quieres a los jugadores experimentar? … con todas estas consideraciones en mente, podemos pasar a la segunda parte:. Jugosidad añadir a la animación p>
En primer lugar, hemos aprendido que el tener una señal visual clara sobre la entrada del reproductor de ayuda a que la sensación de juego más sensible e intuitiva. Hagamos que nuestra ave a poco ampliar y también cambiar su color por un milisegundo al jugador entrada. P>
Presione Ctrl + 6 para abrir la ventana ‘Animación’. Esta vez, seleccione ‘Bird’ GameObject desde el punto de vista del proyecto. animación abierta ‘Flap’; Sólo tiene dos fotogramas clave a las 0:00 y en 0:02. p>
p>
- Activar ‘modo de grabación de fotogramas clave’ li>
- Cambio de color a gris, y la x, y la escala de 1.2 a 0:01. Li>
- Mover al siguiente fotograma y restablecer el color para crear un efecto de parpadeo. Li>
- Restablecer la parte posterior escala a la normalidad a 0:04 o en el final de la animación. Li>
Ul>
p>
… no dude en ajustar los valores o añadir más a su gusto! P>
p>
También puede crear un efecto visual como bocanadas de polvo, usando Sistema de partículas strong>. P>
p>
Haga clic en el sistema de partículas y cambie su nombre. (Por ejemplo ‘Flap FX’) p>
Si las partículas son visibles en la vista de la escena, pero no en la vista de juego, eso es porque los sprites se fijan para ser prestados por detrás del fondo por defecto. P>
p>
Puede cambiar el orden de hacer yendo a Inspector> sistema de partículas> Procesador> Clasificar capa ID strong> y el cambio predeterminado → midground o primer plano. P>
p>
En el Inspector, puede cambiar una gran cantidad de propiedades para hacer la apariencia deseada. Puede seguir los ajustes que hice a continuación o tratar de crear su propio efecto único! P>
- Renderizador & gt; Material de & gt; Sprites-partículas → sprites-predeterminado li>
- Duración = 5 → 0.10 li>
- Bucle = Activado → Desactivado li>
- Start Vida útil = 5 → (aleatorio entre dos constantes) 0,5 a 1,5 li>
Ul>
Para permitir aleatorio entre dos constantes strong>, simplemente haga clic en la flecha pequeña al lado del campo de entrada para ver más opciones. P>
p>
- Start Tamaño = 1 → 0,5 a 1 li>
- Velocidad de inicio = 1 → 1 a 3 li>
- Iniciar Color = Blanco Amarillo → li>
- Modifier Gravedad = 0 → 0,5 li>
- Emisión & gt; Tasa a Través del Tiempo = 10 → 3 li>
- Emisión & gt; Bursts & gt; Count & gt; 5 a 15 li>
- Forma & gt; Forma = Cono → buñuelo li>
- Tamaño largo de la vida → disminución lineal li>
Ul>
Challenge! H4>
Usando las mismas técnicas que aprendimos hoy en día, trate de darle más énfasis en los otros 2 eventos clave:. Es decir, la puntuación del jugador y la muerte p>
Consejo 1: Trate keyframing nada! El movimiento de la cámara, puede fotograma clave no sólo en el Posición strong>, sino también zrotation y el tamaño de la cámara. P>
Consejo 2:. Asegúrese de desmarcar salto temporal de una secuencia de animación, si no quiere que se repita p>
Tip 3: Animator.Play ( “AnimationName”, -1, 0); strong> también se puede utilizar en lugar de Animator.SetTrigger () strong>. El animador antiguas fuerzas para reproducir la animación de inmediato sin tener en cuenta las condiciones y ajustes de transición, mientras que la segunda hace uso de los parámetros de disparo a las condiciones de ajuste y configuración de la transición. Para obtener más información, vaya a https://docs.unity3d.com/ScriptReference/Animator.Play.html p>
Adición de efectos de sonido h3>
Nuestro pájaro ahora tiene impactos más visibles cuando se hace clic en el botón izquierdo del ratón y cuando pasamos entre dos pilares. Ya se ve mucho más divertido para interactuar con, pero todavía se está perdiendo una parte importante de la sensación del juego: el sonido. Para añadir un efecto de sonido de la aleta del ave, seleccione el GameObject Bird, haga clic en ‘Agregar componente’ en el Inspector y la búsqueda de ‘AudioSource’. P>
p>
Una vez que se añade, ir a la escritura del ‘pájaro’ y crear una variable para obtener una referencia al componente AudioSource. P>
Bird clase pública: {MonoBehaviour privada AudioSource AudioSource; // referencia al componente AudioSource} 12345publicclassBird:.. MonoBehaviour {privateAudioSource AudioSource; // referencia al componente AudioSource}Dentro de vacío función start (), asigne el componente AudioSource a la variable recién creada p>.
vacío Inicio () {// Obtener una referencia al componente AudioSource adjunto a este GameObject. AudioSource = getComponent();} 12345voidStart () {// Obtener una referencia al componente AudioSource adjunto a este GameObject.audioSource = getComponent ();} hit de dejar escapar y volver a la Unidad ahora . Arrastrar y soltar cualquiera de los clips de sonido de muestra que desea jugar por acción de la aleta en la sección ‘AudioClip’. P>
Estos efectos de sonido fueron creados usando una máquina de SFX libre en línea: Bfxr (https://www.bfxr.net/). Asegúrese de que ‘Play On Awake’ está desactivada. P>
p>
Ahora, vamos a volver a nuestro script y el aspecto de la sección donde se detecte una entrada del jugador y añadir una línea de código que hace que nuestro AudioSource para reproducir la AudioClip asignado. P>
// Look para la entrada para disparar una «solapa» .if (Input.GetMouseButtonDown (0)) {audioSource.Play (); // Esto juega el AudioClip unido al componente AudioSource} 123 456 // Look para la entrada para disparar una «solapa» .if (Input.GetMouseButtonDown (0)) {audioSource.Play ();. // Este controla la AudioClip unido a el componente AudioSource.}Eso es todo! Simple, ¿verdad? Pero lo que si tenemos múltiples efectos de sonido para ser jugado por un gatillo idénticos? En ese caso, se puede añadir una variedad de efectos de sonido que se reproducirá de forma aleatoria cada vez que el pájaro toma el aleteo de movimiento. Un poco de aleatoriedad ayuda a reducir la repetitividad en el juego así que … ¿por qué no? P>
Empecemos mediante la adición de una serie de AudioClip. (Matrices permitirá almacenar varios objetos en una sola variable, y tiene entre corchetes [] después del tipo en C #). P>
public class Bird: {MonoBehaviour pública AudioClip [] soundEffectList; // contiene una referencia a la lista de audioclips asignado en el inspector} 12345publicclassBird:. MonoBehaviour {publicAudioClip [] soundEffectList; // contiene una referencia a la lista de audioclips asignados en el inspector}Guardar y volver a la Unidad. . Usted habrá notado que la aleta ‘’ Efectos de sonido es de nueva creación en el inspector con una pequeña flecha al lado de él. Puede arrastrar y soltar varios clips de audio en esto. P>
p >
- En función void Update (), busque la sección donde se detecte una entrada de jugador, y luego añadir las siguientes líneas de código: li>
Ul>
// Busque entrada para activar una «aleta». si (Input.GetMouseButtonDown (0)) {int randomSound = Random.Range (0, soundEffectList.Length); // Esto devuelve un valor aleatorio entre 0 y la longitud de nuestra lista de efectos de sonido. audioSource.clip = (soundEffectList [randomSound]); // Esto establece un Audioclip al azar de nuestra lista para el componente AudioSource. audioSource.Play (); // Esto juega el Audioclip unida al componente AudioSource. } // 123456789101112 Busque entrada para activar una «aleta». si (Input.GetMouseButtonDown (0)) {intrandomSound = Random.Range (0, soundEffectList.Length); // Esto devuelve un valor aleatorio entre 0 y la longitud de nuestro efecto de sonido list.audioSource.clip = (soundEffectList [randomSound] ); // Esto establece un Audioclip al azar de nuestra lista para el componente AudioSource. audioSource.Play (); // Esto juega el AudioClip unido al componente AudioSource. }A continuación, la secuencia de comandos de aves debe tener este aspecto: p>
Bird clase pública: MonoBehaviour {float pública upForce; bool isdead privada = false; anim animador privado; camAnim animador privado; rb2d Rigidbody2D privado; pública AudioClip [] soundEffectList; // contiene una referencia a la lista de audioclips asignados en el inspector. AudioSource AudioSource privado; // referencia al componente AudioSource. vacío Inicio () {anim = getComponent(); camAnim = Camera.main.GetComponent (); rb2d = getComponent (); // Obtener referencia al componente AudioSource adjunto a este GameObject. AudioSource = getComponent (); } Void Update () {if (isdead == false) {// Busque entrada para activar una «aleta». si (Input.GetMouseButtonDown (0)) {int randomSound = Random.Range (0, soundEffectList.Length); // Esto devuelve un valor aleatorio entre 0 y la longitud de nuestra lista de efectos de sonido. audioSource.clip = (soundEffectList [randomSound]); // Esto establece un Audioclip al azar de nuestra lista para el componente AudioSource. audioSource.Play (); // Esto juega el Audioclip unida al componente AudioSource. camAnim.SetTrigger ( «Flap»); anim.SetTrigger ( «Flap»); rb2d.velocity = Vector2.zero; rb2d.AddForce (nuevo Vector2 (0, upForce)); }}} Void OnCollisionEnter2D (Collision2D otra) {rb2d.velocity = Vector2.zero; isdead = true; anim.SetTrigger ( «Die»); GameControl.instance.BirdDied (); }} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455publicclassBird: MonoBehaviour {publicfloatupForce; privateboolisDead = false; privateAnimator anim; privateAnimator camAnim; privateRigidbody2D rb2d; publicAudioClip [] soundEffectList; // contiene una referencia a la lista de audioclips asignadas en el inspector.privateAudioSource AudioSource; // Referencia a la AudioSource component.voidStart () {anim = getComponent (); camAnim = Camera.main.GetComponent (); rb2d = getComponent (); // Obtener referencia al componente AudioSource adjunto a la presente GameObject. AudioSource = getComponent ();} voidUpdate () {if (isdead == false) {// Look para la entrada para disparar una «solapa» .if (Input.GetMouseButtonDown (0)) {intrandomSound = Random.Range ( 0, soundEffectList.Length); // Esto devuelve un valor aleatorio entre 0 y la longitud de nuestro efecto de sonido list.audioSource.clip = (soundEffectList [randomSound]); // Esto establece un AudioClip al azar de nuestra lista para el AudioSource component.audioSource.Play (); // Esto juega el AudioClip unido a la AudioSource component.camAnim.SetTrigger ( «Flap»); anim.SetTrigger ( «Flap»); rb2d.velocity = Vector2.zero; rb2d.AddForce ( newVector2 (0, upForce));}}} voidOnCollisionEnter2D (Collision2D otra) {rb2d.velocity = Vector2.zero; isdead = true; anim.SetTrigger ( «Die»); GameControl.instance.BirdDied ();}} Bono: la mejora de juego se sienta con controles h3>
En la mayoría de series Mario, el más rápido el reproductor se ejecuta la mayor saltan. En Celeste, los jugadores pueden corregir su posición después de un salto corriendo por el aire. Estos controles generosos permiten a los jugadores a dominar los controles y disfrutar de superación de desafíos. Por otro lado, nuestra ave sólo puede Flappy única aleta de dibujar una curva constante en una velocidad fija, y su movimiento se basa en gran medida el tiempo de pulsación de tecla del jugador. Hay poco espacio para los jugadores a dominar los controles, se siente casi como el ave está fuera de control. Pero lo que si la celebración de una clave más larga significa que el pájaro volará más alto? P>
p>
Pájaro que vuela con un máximo de altura fija em> p>
p>
Vuelo del pájaro más alto con una pulsación de botón ya em> p>
Esto permite a los jugadores tener un control más preciso sobre el pájaro y se mejora en gran medida la sensación de juego. Para ello, abra la secuencia de comandos de aves y crear una variable de tipo float que rastrea la duración del vuelo. Este valor se incrementará mientras el reproductor está presionando el botón del ratón. P>
public class Bird: MonoBehaviour {// fuerza hacia arriba de la aleta. flotador privado upForce = 3; // Duración de la solapa. flapDuration privada flotador;} 12345678publicclassBird: MonoBehaviour {// fuerza hacia arriba de la flap.privatefloatupForce = 3; // Duración de la flap.privatefloatflapDuration;}Y entonces me gustaría crear otra variable flotante que establece hasta el límite de la primera variable. p>
public class Bird: MonoBehaviour {// Si flapDuration es mayor o igual a este valor, el pájaro no vuela más alto. flotador maxDuration privada = 0.7f;} 12345publicclassBird: MonoBehaviour {// Si flapDuration es mayor o igual a este valor, el pájaro no volará higher.privatefloatmaxDuration = 0.7f;}Podríamos simplemente decirle al pájaro para volar sólo cuando flapDuration em> es menor que maxDuration em> como tal: p>
void Update () {if (Input.GetMouseButton (0)) {if (flapDurationEn algún momento, la duración colgajo debe ser reiniciado. Voy a restablecerla cada vez que el jugador hace clic en el botón del ratón. P>
vacío Update () {// Busque entrada para activar una «aleta». si (Input.GetMouseButtonDown (0)) {flapDuration = 0; }} 12345678voidUpdate () {// Look para la entrada para disparar una «solapa» .if (Input.GetMouseButtonDown (0)) {flapDuration = 0;}}rápida Antes vs. Después h4>
p>
En una nota también he añadido una característica que hace que complementando la puntuación mostrar un mensaje al azar como “impresionante!” mientras que el jugador está en una racha de alta puntuación. p>
p>
Aquí está el código fuente correspondiente: p>
si (puntuación> 4 && puntuación <10) {scoreText.gameObject.GetComponent() Play ( «ScoreText 2», -1, 0).; } Else if (puntuación> = 10) {int aleatorio = Random.Range (0, 5); Interruptor (al azar) {case 0: highScoreText.text = «magnífico!»; descanso; Caso 1: highScoreText.text = «! impresionante»; descanso; Caso 2: highScoreText.text = «excelente!»; descanso; Caso 3: highScoreText.text =; «increíble!» descanso; Caso 4: highScoreText.text =; «fantástico!» descanso; Caso 5: highScoreText.text =; «Terrific!» descanso; } ScoreText.gameObject.GetComponent () Play ( «ScoreText 3», -1, 0).; } 12345678910111213141516171819202122232425262728293031if (puntuación> 4 && puntuación <10) {scoreText.gameObject.GetComponent () Play ( «ScoreText 2», -1, 0);.} Elseif (puntuación> = 10) {intrandom = Random.Range ( 0,5); conmutador (al azar) {case0: highScoreText.text = «magnífico!»; break; Caso 1: highScoreText.text = «impresionante!»; break; case2: highScoreText.text = «excelente!»; break; case3 : highScoreText.text = «increíble!»; break; case4: «fantástico!» highScoreText.text =; break; case5: «Terrific» highScoreText.text =; break;} scoreText.gameObject.GetComponent (). Play ( «ScoreText 3», – 1,0);} Conclusión h3>
En esta lección, hemos aprendido que la retroalimentación sensible e intuitiva al jugador entrada es vital para hacer una sensación de buen juego. Esta retroalimentación puede incluir munición rebote, ensanchamientos, derribo, el sonido de disparo base pesada en los tiradores, y más allá. También puede ser acerca de los controles, la animación de personajes, efectos visuales y efectos de sonido en juegos de plataformas. Todos estos ajustes poco contribuyen a la sensación de juego, pero con frecuencia se pasan por alto por muchos desarrolladores. Estos elementos pueden ser muy sutiles para ser notado de forma individual, pero cuando están armonizadas que añadir capas de satisfacción a la jugabilidad. Sin embargo, la mejor manera de aprender sensación del juego es experimentar a sí mismo y probar cosas nuevas -. Así que esperamos que ampliar los conocimientos que se imparten aquí p>
Espero que hayan disfrutado el tutorial de hoy y tener más confianza en cómo hacer un juego más vivo, sensible y divertido! P>
Referencia / Enlaces h3>
‘Estilo Flappy Bird Ejemplo Juego’ por Unity Technologies: h4>
Descargar → https://assetstore.unity.com/packages/templates/flappy-bird-style-example-game-80330 p>
Código Fuente ‘Estilo Flappy Bird Ejemplo Juego’: h4>
Descargar → Enlace p>
Documentación de la Unidad en: h4>
Animación Transición – https://docs.unity3d.com/Manual/class-Transition.html p>
Clasificación Capa – https://docs.unity3d.com/ScriptReference/SortingLayer.html p>
Animator.Play () – https://docs.unity3d.com/ScriptReference/Animator.Play.html p>
Otros: h4>
En línea gratuito SFX Maker – Bfxr (https://www.bfxr.net/) p>
Juega ver original. – https://avacadogames.itch.io/flappy-bird-style-example-game-unity p>
Juega Editado ver. – https://avacadogames.itch.io/flappy-bird-style-example-game-edited-game-feel-tutorial-zenva p>
Mensajes relacionados h3>
- En función void Update (), busque la sección donde se detecte una entrada de jugador, y luego añadir las siguientes líneas de código: li>
- Start Tamaño = 1 → 0,5 a 1 li>
- Renderizador & gt; Material de & gt; Sprites-partículas → sprites-predeterminado li>
- guión abierto ‘Bird’ y añadir una variable: li>
- bate Bird cuando se detecta entrada de jugador, li>
- La adición de batidos de pantalla li>
- Salto de longitud, triple salto, patada pared, inmersiones de estómago, etc.Make más sensibles, reacciones matizadas a la entrada del jugador. Esto permite a los jugadores para expresar su intención al sistema. Li>
- Hacer la diversión del jugador avatar para el control! Li>
- explosión, escombros, cadáveres enemigos, humo, sangre, objetos destruidos, el jugador etc.Show las consecuencias de sus acciones. Hacer que se sientan como si estuvieran interactuando con el mundo del juego. Li>
- Añadir permanencia! Li>
- Menos exactitud (en tiradores), AI comportamiento aleatorio, efectos de sonido al azar, etc. Un poco de aleatoriedad puede darle vida a modo de juego repetitivo. Li>
- Añadir aleatoriedad! Li>
- a cámara lenta, cámara cinematográfica, sonido ambiental, de frases con sentido, etc.Combine todos estos efectos para dar un impacto más dramático en un determinado evento (por ejemplo, la muerte) li>
- Toque la emoción del jugador! Li>
- confeti del tiro, juego fomento de sonidos, pantalla de pausa de 0,01 milisegundos, etc.Combine todos estos efectos de hacer un momento de éxito aún más satisfactorio. Li>