Implementar la detección de golpes para cada tipo de MapChip
Entorno de verificación
- Windows
-
- Ventanas 11
- Unity Editor
-
- 2021.3.3F1
- Paquete del sistema de entrada
-
- 1.3.0
Requisitos previos para esta sugerencia
Los siguientes ajustes se han realizado de antemano como premisa para la descripción de este consejo.
¿Cuáles son los requisitos previos para este consejo?
- Crear un mapa 2D descendente con los mapas de teselas estándar de Unity
- Manejo de colisiones con física estándar (2D)
- Implemente la detección de visitas con mapas de teselas
Acerca del préstamo de materiales de mapas
Procesamos préstamos de los siguientes sitios.
Al principio
Esta vez, los MapChips se colocan en un TileMap, y se decide si realizar la determinación de aciertos de acuerdo con el tipo de MapTip colocado.
Dado que este consejo es en gran medida el mismo que otro Consejo "Implementar la detección de visitas con mapas de mosaico", Por favor, consulte allí para obtener una explicación detallada. Aquí, solo se explica el procedimiento para el mismo contenido y solo se agregan las diferencias.
Implementación de personajes andantes
Primero, prepare una imagen de sprite que el jugador controlará para realizar la operación de detección de golpes y agregarla a su proyecto. Esta vez, el tamaño de la punta del mapa es de 32 píxeles, así que haré que la imagen tenga el mismo tamaño.
Omitiré la animación de caminar esta vez porque el procedimiento será largo si se implementa. Si desea implementarlo, consulte los siguientes consejos.
Seleccione la imagen que agregó al proyecto. Como queremos hacer coincidir la unidad con el chip de mapa, establezca el "Número de píxeles por unidad" en "32".
Una vez configurado, haga clic en el botón "Aplicar" a continuación.
Una vez establecida la imagen, suelte la imagen en la vista y agregue el objeto.
Establece el proceso de movimiento del personaje. Agregue el script y déjelo llamado Player
.
El script tiene este aspecto: Este es un proceso de movimiento simple que mueve el sprite con el teclado.
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// キーボードの情報を取得
var keyboard = Keyboard.current;
// スプライトの移動処理
if (keyboard.leftArrowKey.isPressed)
{
transform.Translate(-0.1f, 0, 0, Space.World);
}
if (keyboard.rightArrowKey.isPressed)
{
transform.Translate(0.1f, 0, 0, Space.World);
}
if (keyboard.upArrowKey.isPressed)
{
transform.Translate(0, 0.1f, 0, Space.World);
}
if (keyboard.downArrowKey.isPressed)
{
transform.Translate(0, -0.1f, 0, Space.World);
}
}
}
El script que cree se adjunta al objeto de carácter.
Ejecuta el juego y comprueba si el personaje se mueve con el teclado.
Preparación de MapTips
Prepare una imagen de información de mapa y agréguela al proyecto. A medida que aumenta el número de fichas de mapas, la configuración se vuelve problemática, por lo que esta vez hemos preparado solo dos cuadrados, uno que se puede caminar y otro que no se puede caminar.
Seleccione las imágenes que agregó a su proyecto y configure los ajustes para MapChips. Consulte los siguientes consejos para obtener más información:
Una vez configurado, haga clic en el botón Aplicar y luego en el botón Editor de Sprite.
Divide por 32 píxeles.
Seleccione la pestaña Paleta de mosaico para crear una paleta. Si no hay pestañas, puede mostrarlas desde el menú con "Window > 2D -> Tile Palette". El nombre de la paleta puede ser cualquier cosa, pero aquí está "MapChipPalette".
Como lo guardaremos en una carpeta, cree una nueva carpeta "MapChipPalette" en la carpeta Scene y especifíquela.
Se ha agregado una carpeta MapChipPalette al proyecto.
A continuación, agregará MapTips a la paleta. Arrastre y suelte la imagen de maptip dividido en la paleta.
Se han agregado MapTips a la paleta.
Crear un mapa
Deje a un lado la configuración de detección de golpes y cree primero el mapa. Puede configurar la detección de golpes más tarde. En primer lugar, agregue un mapa de teselas a la jerarquía.
Una vez agregado, seleccione Tilemap. La vista muestra una cuadrícula.
Primero, establezca un mapchip que no se convierta en una pared en la vista.
Por el momento, lo puse por todas partes.
A continuación, coloque la punta de mapa de piedra que servirá como pared.
Esta vez no hubo ningún problema, pero si tu personaje va a estar detrás del mapa, establece el orden de capas en un número mayor que Tilemap.
Por supuesto, incluso si mueves el juego en este punto, te deslizarás a través de la pared y caminarás.
Configuración de detección de impactos de MapChip
A partir de aquí, estableceremos si debemos ingresar el juicio de acierto para cada tipo de chip de mapa. Primero, abra la carpeta "MapChipPalette" que creó cuando creó la paleta.
Hay un maptip establecido en la paleta interior, así que primero seleccione un maptip sobre el que pueda caminar.
En el Inspector, establezca el valor Tipo de colisionador en Ninguno. Más tarde, agregará una configuración de detección de colisiones a Tilemap, pero configurarla en "Ninguno" evitará que este mapchip choque.
El otro maptip de piedra se establece en "Grid". Dado que esta vez no es un maptip transparente, no hay problema con "sprite", pero si lo configura en "sprite", no se juzgará presionando la parte transparente de la imagen.
Eso es todo lo que hay en MapTip. Es fácil porque solo hay dos de ellos esta vez, pero si tienes una gran cantidad de chips de mapas, debes configurar esa cantidad.
Configuración de detección de colisiones
A partir de aquí, es casi lo mismo que el contenido de "Implementar detección de golpes con mapa de mosaico".
Primero, realice los ajustes necesarios para la detección de colisiones de personajes. Agregue "Physics 2D -> Circle Collider 2D" como componente. Esta vez, el sprite es redondo, así que lo hice un círculo, pero seleccione Caja o Cápsula de acuerdo con la forma.
También añadiremos "Física 2D -> Rigidbody 2D".
Establezca la escala de gravedad en 0 para evitar que la gravedad caiga. Además, marque Z para "Corregir rotación" para evitar que el sprite gire.
Para Tilemap, agregue el componente Tilemap -> Tilemap Collider 2D.
Puede ver que se ha agregado una línea verde alrededor de la punta del mapa de piedra en la vista. Esto significa que la detección de golpes está configurada solo para piedras. Puede ver que se refleja la configuración de tipo de colisionador de la punta de mapa en la paleta anterior.
Intenta ejecutar el juego y caminar hacia la pared. Creo que puedes asegurarte de que el personaje se detenga frente a la pared correctamente. Puede ver que se puede implementar fácilmente sin escribir ningún programa relacionado con la detección de golpes.
Combinación de la detección de golpes de MapChip
Como se menciona en los consejos a continuación, cuando realmente lo mueve, el comportamiento de la detección de golpes en la pared es un poco extraño. La causa y la solución se describen en las sugerencias siguientes.
Sin embargo, al combinar la parte de detección de golpes del chip del mapa, el comportamiento extraño se corregirá y la carga de procesamiento se reducirá al mismo tiempo, así que hagámoslo como mínimo.
Primero, marque "Usar en compuesto" en Tilemap Collider 2D.
En Agregar componente, seleccione Física 2D -> Colisionador compuesto 2D.
También se agregará "Rigidbody 2D", así que haga "Tipo de cuerpo" a "Estático".
Entonces, creo que puedes confirmar que el juicio de golpe de la piedra no es para cada chip de mapa y se combina.
Ahora ejecuta el juego y asegúrate de que funciona correctamente.