Unity principiante 3: el control de movimiento del enemigo y la configuración del área de pérdida de sangre (2d)

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

Una vez que hayamos creado el mapa y los accesorios de recuperación, debemos agregar un enemigo al mapa.

Movimiento simple del enemigo 1

public class EmenyController : MonoBehaviour
{
    //设定移动速度变量
    public float speed = 0.1f;
    //声明一个2d刚体对象
     Rigidbody2D rigidbody2D;
    // 声明 Vector2 对象来存放敌人当前位置
    Vector2 position;
    //声明一个初始 y 坐标变量
    float initY;
    //声明一个移动方向的变量
    float direction;
    //存放移动距离的变量,设置为共有,开放在 unity 中的访问
    public float distance = 4;
    void Start()
    {
        // 获取这些对象或变量在游戏开始时的值
        rigidbody2D = GetComponent<Rigidbody2D>();
        //获取起始位置
        position = transform.position;
        //获取起始y坐标
        initY = position.y;
        //设定初始移动方向
        direction = 1.0f;
    }

    // Update is called once per frame

    private void FixedUpdate()
    {
        //通过刚体移动的方法调用,放入 fixupdate方法中,0.02秒执行一次
        MovePosition();
    }
    private void MovePosition()
    {
        if (position.y - initY < distance && direction > 0)
        {
            position.y += speed;
        }
        if (position.y - initY >= distance && direction > 0)
        {
            direction = -1.0f;
        }
        if (position.y - initY > 0 && direction < 0)
        {
            position.y -= speed;
        }
        if (position.y - initY <= 0 && direction < 0)
        {
            direction = 1.0f;
        }
        rigidbody2D.position = position;
     
    }
}

Este código abre la velocidad de movimiento y se mueve hacia adelante y hacia atrás determinando la distancia desde la posición inicial (solo configurada en el eje y); por supuesto, puede cambiar el código en el eje x

El segundo tipo de control móvil (del sitio web oficial)

public class EnemyController2 : MonoBehaviour
{
    public float speed;
    public bool vertical;
    Rigidbody2D rigidbodyroot;
    //朝一个方向走的时间
    public float changeTime = 3.0f;
    //计时器
    float timer;
    //方向
    int direction=1;

     void Start()
    {
        rigidbodyroot = GetComponent<Rigidbody2D>();
        timer = changeTime;
    

    }
    private void Update()
    {
     
        timer -= Time.deltaTime;
        if (timer < 0)
        {
            direction = -direction;
            timer = changeTime;
        }
    }
    private void FixedUpdate()
    {
     
        Vector2 position = rigidbodyroot.position;
        if (vertical)
        {
            position.y = position.y + speed * Time.deltaTime*direction;
            
        }
        else
        {
            position.x = position.x + speed * Time.deltaTime * direction;
         
        }
        rigidbodyroot.MovePosition(position);
    }
    //刚体碰撞事件
    private void OnCollisionEnter2D(Collision2D other)
    {
        RubyController rubyController = other.gameObject.GetComponent<RubyController>();
        if (rubyController != null)
        {
            rubyController.changehealth(-1);

        }
    }
   
}

Este código abre el tiempo de reingreso, la velocidad y la dirección de la marcha; la distancia a pie está controlada por el tiempo de marcha;
al mismo tiempo, cuando el robot toca al rubí protagonista, el protagonista pierde sangre;

Únete a la zona de sangrado

inserte la descripción de la imagen aquí
En el área de pérdida de sangre, usamos clavos como material de imagen, porque queremos recibir el juicio todo el tiempo, no solo cuando se presiona el gatillo, por lo que en el código usamos OnTriggerStay2D para indicar que el gatillo se activará en cada fotograma
.

        RubyController rubyController = collision.GetComponent<RubyController>();
        if (rubyController != null)
        {

            rubyController.changehealth(DamageNum);

        }

Pregunta 1: Cuando esta área necesite ser más grande, nuestros materiales serán reutilizados, aquí necesitamos usar materiales de mosaico

Lo primero que debemos hacer es colocar en mosaico el material. Necesitamos volver a la interfaz de material, encontrar el tipo de malla en modo sprite, usar Full Rect y luego marcar Auto
Tiling en Box Collider 2D en el prefabricado.
Pregunta 2: El código de juicio utilizado
en Unity viene con tres tipos de juicios OnTriggerEnter2D OnTriggerStay2D OnTriggerExit2D respectivamente significa una vez al entrar,
una vez cada cuadro en el disparador y una vez al salir;

El material utilizado en este artículo proviene del sitio web oficial
de Unity de Ruby's Adventure Link Unity Store.

Supongo que te gusta

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