为什么我的raycast在几秒钟后停止工作?

问题描述 投票:1回答:1

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

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);
    }

   }




这是在我将敌人的控制者和动画师添加到被射线投射的乌克德击中的敌人之后开始的。

c# unity3d timing raycasting
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.