我有一杆枪,它使用射线广播探测敌人。这段代码之前工作得很好,但是现在 什么时候 等待几秒钟后,我向敌人射击,射线广播无法检测到敌人,这是枪支密码
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);
}
}
在我添加了敌人控制者和动画师后,这种情况开始发生。
答案 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。