Implementar ataques de jugadores. (Unidad)

Porque este ejemplo es que los juegos de disparos pueden tener diferentes efectos de ataque de otros ataques, pero son más o menos iguales, y puede haber algunas diferencias en la configuración de efectos y códigos.


En primer lugar, debe configurar los efectos de partículas, como la luz del arma, el humo del cañón, la luminosidad del arma y el sonido del arma. Los requisitos específicos se realizan de acuerdo con los efectos específicos. La configuración en la escena general está lista, si no, puede depurarla usted mismo. Hay un sistema de partículas en el clic derecho para crear el componente de efecto, a través del cual se puede configurar el efecto.

 Y montar los componentes correspondientes.

 Y para permitir que el jugador identifique el objetivo del ataque, generalmente agregando una capa única al enemigo, el jugador puede derrotar al enemigo y atacar para perder sangre. Cuando el volumen de sangre del enemigo <= 0, significa que el enemigo está muerto. y necesita ser destruido.

 Cree secuencias de comandos para lograr el efecto. Generalmente, los jugadores usan la detección de rayos para juzgar si se han encontrado con enemigos. El enemigo generalmente es detectado por un gatillo y ataca dentro del rango y no ataca fuera del rango.

 Código:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerShoot : MonoBehaviour
{
    // Start is called before the first frame update

    //玩家的攻击力
    public int atk = 20;
    //射击时间间隔
    float gunColdTime = 0.15f;
    //射击效果显示时间
    float gunDisplayTime = 0.2f;
    //射击音效
    AudioSource shootAudio;
    //射线
    Ray gunRay;
    RaycastHit gunHit;
    //粒子特效
    ParticleSystem gunParticleSystem;
    //枪源
    Light gunLight;
    //机枪光线
    LineRenderer gunLine;
    //射击对象
    LayerMask layerMask;
    //计时器
    float timer;

    void Start()
    {
        shootAudio = GetComponent<AudioSource>();
        gunParticleSystem=GetComponent<ParticleSystem>();
        gunLight=GetComponent<Light>();
        gunLine=GetComponent<LineRenderer>();
        layerMask = LayerMask.GetMask("shootTable");
    }

    // Update is called once per frame
    void Update()
    {
        timer += Time.deltaTime;
        //如果按下鼠标左键并且时间间隔大于冷却时间则进行攻击
        if (Input.GetKey(KeyCode.Mouse0) && timer>gunColdTime)
        {
            //射击
            shoot();
        }
        if (timer > gunColdTime * gunDisplayTime)
        {
            //开枪结束
            displayGun();
        }
    }
    //实现结束开枪
    void displayGun()
    {
        gunLight.enabled = false;
        gunLine.enabled = false;
    }
    //实现射击方法
    public void shoot()
    {
        timer = 0;
        //播放射击音效
        shootAudio.Play();
        //光源
        gunLight.enabled = true;
        //光枪
        gunLine.enabled = true;
        //射线的起始位置
        gunRay.origin = transform.position;
        //射线的方向
        gunRay.direction = transform.forward;
        //粒子特效
        gunParticleSystem.Stop(); //停止
        gunParticleSystem.Play(); //启动
        //枪的第一个点
        gunLine.SetPosition(0, transform.position);
        //判断是否射击到了场景里的游戏对象
        if(Physics.Raycast(gunRay, out gunHit, 100f, layerMask))
        {
            //判断是否达到敌人
            EnemyHP enemyHP = gunHit.collider.GetComponent<EnemyHP>();
            if (enemyHP != null)
            {
                enemyHP.Attacked(atk,gunHit.point);
            }
            gunLine.SetPosition(1, gunHit.point);
        }
        else
        {
            gunLine.SetPosition(1, gunRay.origin + gunRay.direction * 100f);
        }
    }
}


Implementación de imagen: 

 

 El método anterior no es único. Esta parte es un poco difícil y lleva tiempo comprender la lógica de implementación del ataque del jugador. Si hay un error, detectarlo y modificarlo, y corregirlo mediante modificaciones para lograr un efecto satisfactorio.

 El orden de los códigos anteriores es diferente, lo que puede provocar errores en la operación.Si es necesario, se requiere un uso completo para garantizar el funcionamiento normal del proyecto. Si comete un error, verifique cuidadosamente y ajuste para ver si se puede lograr el efecto. Si hay una mejor manera, ¡por favor deje un mensaje a continuación! ¡gracias por ver! ! !


-------------------------------------------------- --------- FIN ---------------------------------------- ----------------------- 

Supongo que te gusta

Origin blog.csdn.net/weixin_57813136/article/details/132131463
Recomendado
Clasificación