第一人称射击射击对撞机问题

时间:2019-06-22 20:39:23

标签: c# visual-studio-2010 unity3d

我正在创建FPS游戏,但遇到以下问题:

有时候,当我向敌人射击时,即使玩家在他们面前射击,也无法识别到击中。但是,当他们攻击玩家时,击中被正常识别。

他们有一个盒式对撞机和一个刚体。

此脚本已附加到播放器上:

using System.Collections.Generic;
using UnityEngine;

public class DisparaArma : MonoBehaviour
{
    private GerenciaArma gerenciaArma;

    public float nDisparo = 15f;
    private float TempoProximoDisparo;
    public float damage = 20f;

    private Animator ZoomCameraIn;
    private bool zoomed;

    private Camera Maincamera;
    private GameObject mira;
    // Start is called before the first frame update
    void Start()
    {
        gerenciaArma = GetComponent<GerenciaArma>();
        ZoomCameraIn = transform.Find(Tags.LOOK_ROOT).transform.Find(Tags.ZOOM_CAMERA).GetComponent<Animator>();

        mira = GameObject.FindWithTag(Tags.MIRA);
        Maincamera = Camera.main;
    }

    // Update is called once per frame
    void Update()
    {
        Atira();
        ZoomInAndOut();
    }

    void Atira()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if(gerenciaArma.SelecionaArma().tipoBala == WeaponBulletType.BULLET)
            {
                gerenciaArma.SelecionaArma().AnimacaoTiro();
                DisparaBala();


            }

        }
    }

    void ZoomInAndOut()
    {
        if (gerenciaArma.SelecionaArma().mira_tipo == TipoMira.AIM)
        {
            if (Input.GetMouseButtonDown(1))
            {
                ZoomCameraIn.Play(Animacoes.ZOOM_IN_ANIM);
               // gerenciaArma.SelecionaArma().Aim(true);
                mira.SetActive(false);
                print("VaiZoom");
            }

            if (Input.GetMouseButtonUp(1))//
            {
                ZoomCameraIn.Play(Animacoes.ZOOM_OUT_ANIM);
                //gerenciaArma.SelecionaArma().Aim(false);
                mira.SetActive(true);
            }
        }
    }

    void DisparaBala()
    {
        RaycastHit hit;
        if(Physics.Raycast(Maincamera.transform.position, Maincamera.transform.forward, out hit))
        {

            if (hit.transform.tag == Tags.ENEMY_TAG)
            {
                hit.transform.GetComponent<ScriptVida>().DanoAplicado(damage);
            }
        }
    }
}

这是附着在敌人身上的

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

public class ScriptVida : MonoBehaviour
{
    private IndioAnimações indio_Anim;
    private NavMeshAgent navAgent;
    private IndioController indio_Controller;

    public float vida = 100f;
    public bool is_Player, is_Cannibal, is_Tiger;

    private bool morto;
    // Start is called before the first frame update
    void Awake()
    {
        if (is_Tiger || is_Cannibal)
        {
            indio_Anim = GetComponent<IndioAnimações>();
            indio_Controller = GetComponent<IndioController>();
            navAgent = GetComponent<NavMeshAgent>();
        }

        if (is_Player)
        {

        }
    }

    public void DanoAplicado(float damage)
    {
        if (morto)
            return;
        vida -= damage;


        if (is_Player)
        {

        }

        if (is_Tiger || is_Cannibal)
        {
            if (indio_Controller.EnemyState == EnemyState.PATROL)
            {
                indio_Controller.chase_Distance = 50f;
            }
        }

        if (vida <= 0)
        {
            JogadorMorre();
            morto = true;
            print(vida);
        }

    }

    void JogadorMorre()
    {
        if (is_Cannibal)//
        {
            GetComponent<Animator>().enabled = false;
            GetComponent<BoxCollider>().isTrigger = false;
            GetComponent<Rigidbody>().AddTorque(-transform.forward * 50f);

            indio_Controller.enabled = false;
            navAgent.enabled = false;
            indio_Anim.enabled = false;
        }

        if (is_Tiger)
        {
            GetComponent<Animator>().enabled = false;
            GetComponent<BoxCollider>().isTrigger = false;
            GetComponent<Rigidbody>().AddTorque(-transform.forward * 50f);

            indio_Controller.enabled = false;
            navAgent.enabled = false;
            indio_Anim.enabled = false;
        }

        if (is_Player)
        {
            GameObject[] enemies = GameObject.FindGameObjectsWithTag(Tags.ENEMY_TAG);
            for (int i = 0; i < enemies.Length; i++)
            {
                enemies[i].GetComponent<IndioController>().enabled = false;
            }

            GetComponent<Movimentação>().enabled = false;
            GetComponent<DisparaArma>().enabled = false;
            GetComponent<GerenciaArma>().SelecionaArma().gameObject.SetActive(false);
        }

        if (tag == Tags.PLAYER_TAG)
        {
            Invoke("RestartGame", 3f);
        }

        else
        {
            Invoke("TurnOffGameObject", 3f);
        }
    }

    void RestartGame()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Gameplay");
    }

    void TurnOffGameObject()
    {
        gameObject.SetActive(false);
    }

}

我认为问题与撞机箱有关。 我该如何解决这些家伙?

0 个答案:

没有答案