为什么我的光线投射在几秒钟后停止工作?

时间:2020-01-04 01:24:20

标签: c# unity3d timing raycasting

我有一杆枪,它使用射线广播探测敌人。这段代码之前工作得很好,但是现在 什么时候 等待几秒钟后,我向敌人射击,射线广播无法检测到敌人,这是枪支密码

using System.Collections;
   using UnityEngine;

   public class Gun : MonoBehaviour
   {
    public float damage = 25f;
    public float range = .00000000000000000000000001f;
    public float fireRate = 1f;

   public int maxAmmo = 5;
    private int currentAmmo;
    public float reloadTime = 3f;
   public bool isReloading = true;

    public Camera fpsCam;
    public ParticleSystem MuzzleFlash;
    public GameObject impactEffect;
    public float impactForce = 30f;

    private float nextTimeToFire = 0f;

    public Animator animator;



    private void Start()
    {
        currentAmmo = maxAmmo;


    }

    void OnEnable()
    {
        isReloading = false;
        animator.SetBool("Reloading", false);
    }

    // Update is called once per frame
    void Update()
    {

        if (isReloading)
            return;


        if (currentAmmo <= 0)
        {
          StartCoroutine(Reload());
            return;
        }

        if (Input.GetButtonDown("Fire1") && Time.time >= nextTimeToFire)
        {
            nextTimeToFire = Time.time + 1f / fireRate;
            Shoot();
        }
    }

    IEnumerator Reload()
    {
        isReloading = true;
        Debug.Log("RELOAD");

        animator.SetBool("Reloading", true);

        yield return new WaitForSeconds(reloadTime - .25f);
        animator.SetBool("Reloading", false);
        yield return new WaitForSeconds(.25f);

        currentAmmo = maxAmmo;


        isReloading = false;

    }

    void Shoot()
    {
        MuzzleFlash.Play();

        currentAmmo--;

        RaycastHit hit;
        if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
        {
            Debug.Log(hit.transform.name);

            Enemy enemy = hit.transform.GetComponent<Enemy>();
            if (enemy != null)
            {
                enemy.TakeDamage(damage);
            }

            if (hit.rigidbody != null)
            {
                hit.rigidbody.AddForce(hit.normal * impactForce);
            }


            if (isReloading == true)
            {
                animator.SetBool("Shooting", false);

            }
        }

        GameObject impactGO =  Instantiate(impactEffect, hit.point, 
   Quaternion.LookRotation(hit.normal));
        Destroy(impactGO, 2f);

    }
   }

这是敌人的剧本


    **public class Enemy : MonoBehaviour
   {
    public float health = 50f;

    public void TakeDamage(float amount)
    {
        health -= amount;

        if (health <= 0f)
        {
            Die();
        }
    }



    void Die ()
    {
        Destroy(gameObject);
    }

   }




在我添加了敌人控制者和动画师后,这种情况开始发生。

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,并且花了数小时来弄清楚发生了什么。如果您同时在敌人上使用Nav Mesh Agent和Rigidbody,请尝试将“碰撞检测”更改为“连续”而不是“离散”。

我发现这则旧文章对我有帮助: https://answers.unity.com/questions/658434/why-do-raycasts-ignore-navmesh-agents.html

答案 1 :(得分:0)

好吧,我的游戏只是让我重做了一些东西,它最终由于某种原因而起作用了,我ge之以鼻,原因是因为我使用的是预制件,因为那是唯一的区别。

答案 2 :(得分:-1)

当射程太小时,武器就必须非常接近敌人的对撞机。尝试将其增加到10.0f。