Unity principiante 2: la producción de mosaicos y la interacción del mundo (2d)

Este artículo proviene de las notas del maestro de aprendizaje chutianbo, enlace a la estación b de 56P a 71P

1. Producción de mapas de teselas

Haga clic con el botón derecho en la interfaz principal Sence➡GameObject➡2D Object➡Tilemap➡Rectanglar (esto crea una perspectiva de estilo RPG) para crear una
carpeta de mosaicos y arrastre el material al botón púrpura TIle Palette abierto en la esquina superior derecha, arrastre el material en
o directamente en el archivo Crear en la carpeta
2. ¿Qué debo hacer si el material es demasiado grande y necesita ser dividido?
Vuelva al material y cambie el Modo Sprite a Múltiple,
ingrese al Editor de Sprite, seleccione Slice en el esquina superior izquierda, seleccione Cuadrícula por tamaño de celda
3. El mosaico no se ajusta al borde,
regrese al material, busque Píxeles por unidad y cámbielo a 64 en línea con el borde
4. Con respecto al mosaico que cubre el personaje,
regrese al mapa de mosaicos debajo de la Cuadrícula debajo de la Jerarquía y busque el Representador de mapas de mosaicos a la derecha, cambie el orden en la capa a -10 (coloque la capa en la parte posterior) 5. Acerca del mosaico de regla
en
el archivo de mosaico Haga clic con el botón derecho en Create➡2D ➡Tiles➡Regla de mosaico (si no hay una alta probabilidad, no hay un complemento, solo busque otros artículos para enseñar)
6. Cómo hacer mosaicos rápidamente con reglas similares
Como arriba, seleccione la regla Overring tile
7. Cómo hacer mosaicos Los colisionadores están conectados entre sí (los mosaicos originales que creamos son todos un solo colisionador).
Agregue el componente Composite Coillider 2D al mapa de mosaico en la cuarta parte.
Verifique el utilizado por Compite en el TIlemap Collider 2D;
8. Acerca de las reglas como mosaico herencia
Si las reglas de herencia directa son similares a los mosaicos, si el cuerpo de colisión también se hereda, por lo que si hay un cuerpo de colisión diferente, debe recrearse
9. Realización de pseudo-perspectiva

En los juegos 2D, el "frente y el reverso" de la escena están determinados por el eje Y, por lo que Unity debe dibujar el objeto del juego de acuerdo con la coordenada Y del objeto del juego. Cuanto menor sea el valor de la coordenada Y del objeto del juego, más cerca está al frente, y cuanto mayor sea el
valor de la coordenada y debe bloquearse. Los objetos del juego con coordenadas y más pequeñas se dibujarán en la capa superior.
En el juego, si desea establecer una vista de pseudo perspectiva 2D, necesita para realizar cambios en la configuración del proyecto:
Editar > Configuración del proyecto > Gráficos > Configuración de la cámara > Modo de clasificación de transparencias = Eje personalizado > Eje de clasificación de transparencias x = 0 / y = 1 / z = 0

Por lo tanto, los materiales que usamos también deben colocarse en las plantas de los pies de los personajes en Sprite Edito en Sprite Mode.

2 Sobre la realización de la colisión

Si un objeto necesita colisionar, debe tener un componente de cuerpo rígido, a saber, Rigidbody 2d (este es el caso en los juegos 2d).
De manera similar, si necesita interactuar con otros objetos, también necesita un componente de cuerpo de colisión Box Collider 2D
2.1 Después de agregar dos componentes, el personaje cae directa y rápidamente
Apague la escala de gravedad (gravedad) debajo del componente de cuerpo rígido y configúrelo en 0;
2.2 En 2dRPG, es mejor configurar el cuadro de colisión alrededor de los pies (alrededor de 1/3 del cuerpo) para el efecto de perspectiva

3 Añadiendo un sistema de vida a nuestro personaje

Esto es muy simple, en el script que agregamos para el control de caracteres en la sección anterior, agregue

 public int maxHealth = 5;
  public int currentHealth;
      void Start()
    {
        //获得当前游戏对象的刚体组件
        rigidbody2d = GetComponent<Rigidbody2D>();
        //初始化当前生命值
        currentHealth = maxHealth;

    }

3.1 Es muy peligroso exponer directamente el importante valor de la vida en nuestro juego. Este valor no debe llamarse directamente de forma externa,
por lo que debemos encapsular currentHealth. Es decir, usar atributos para proteger sus campos internos

int currentHealth;
  public int Currenthealth
  { get { return currentHealth; } }
  //set { currentHealth = value; } }

De esta manera, hemos hecho un sistema de vida simple.

4 interacción mundial

Después de tener el sistema de vida, la vida cambiará debido a la operación del jugador, por lo que debemos agregar la función de cambiar la vida del jugador.

public void changehealth(int amount)
  {
      //限制生命值在0到maxhealth之间
      currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);
      Debug.Log("当前生命值:" + currentHealth + "/" + maxHealth);
  }

Aquí usamos la función Math.Clamp que viene con Unity, para que el volumen de sangre se pueda limitar entre 0 y el volumen de sangre máximo.
Enlace al documento oficial: Math.Clamp
4.2 Luego, después de tener esta función, podemos crear el conjunto mundial. una botella de sangre o una trampa de gotas de sangre, entonces el siguiente código realiza la función de comer una botella de sangre para devolver una gota de sangre al jugador, y al mismo tiempo no comer la botella de sangre cuando la sangre está llena, y el función de la botella de sangre que desaparece después de comer la botella de sangre

  public class Healthcollable : MonoBehaviour
{
 //记录碰撞次数
 int collideCount;
 public int amount=1;
private void OnTriggerEnter2D(Collider2D other)
 {
     collideCount += 1; 
     Debug.Log($"和当前物体发生碰撞的是{other},第{collideCount}此碰撞");
     //获取Ruby对象
     RubyController rubyController = other.GetComponent<RubyController>();
     //检测是谁碰撞了血瓶
     if (rubyController != null)
     {
     //如果Ruby不是满血
         if (rubyController.Currenthealth < rubyController.maxHealth) {
             rubyController.changehealth(amount);
             //消失血瓶
             Destroy(gameObject);
         }
         else
         {
             Debug.Log("Ruby不需要加血");
             Debug.Log("当前生命值:" + rubyController.Currenthealth + "/" + rubyController.maxHealth);
         }
     }
     else
     {
         Debug.Log("非Ruby对象");
     }
 }
}

La función OntiggerEnter2D es una función que se activa una sola vez al entrar;
4.3 De la misma manera estamos configurando un área que soltará sangre cuando la encontremos

public class Damageable : MonoBehaviour
{
 
 //掉血量
 public int DamageNum = -1;
 //进入范围触发一次
 private void OnTriggerStay2D(Collider2D collision)
 {
     RubyController rubyController = collision.GetComponent<RubyController>();
     if (rubyController != null)
     {

         rubyController.changehealth(DamageNum);

     }
     else
     {
         Debug.Log("非Ruby对象");
     }
 }
 //每一帧都会触发

}

OnTriggerStay2D es una función que se activa cada cuadro en el cuerpo de colisión, de esta manera, encontraremos que el personaje pierde sangre demasiado rápido y la sangre se vacía casi instantáneamente.
Así que agregamos una función de invencibilidad a corto plazo al personaje después de recibir daño.

 //设置无敌间隔
 public float timelnvincible = 2.0f;
 //设置是否无敌
  bool islnvincible;
 //定义变量,无敌进行时间(计时器)
 float invincibleTimer;

Agregue la detección de invencibilidad en la actualización (de hecho, personalmente creo que no parece razonable detectar esta función en cada cuadro)

  void Update()
 {
     //无敌时刻进入倒计时
     if (islnvincible)
     {
         invincibleTimer -= Time.deltaTime;
         if (invincibleTimer < 0)
         {
             islnvincible = false;
         }

     }
 }

Agregue el fragmento de código invencible a la función que cambia la vida escrita arriba

 //更改生命值
 public void changehealth(int amount)
 {
     if (amount < 0)
     {
     //如果无敌,那么直接跳出函数,否则玩家进入无敌,计时开始
         if (islnvincible)
         {
             return ;
         }
         islnvincible = true;
         invincibleTimer = timelnvincible;
     }
     //限制生命值在0到maxhealth之间
     currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);
     Debug.Log("当前生命值:" + currentHealth + "/" + maxHealth);
 }

Este artículo es solo un registro personal para el aprendizaje inicial de la unidad
Enlace al documento del maestro: Tile World

Supongo que te gusta

Origin blog.csdn.net/jijikok/article/details/125827657
Recomendado
Clasificación