我在枪上的3个孔中手动添加了3个没有Rigidbody的子弹,因此我可以从子弹出来的位置开始。这三颗子弹也是不停旋转的枪管子弹。
我创建了一个公牛预制件,该预制件具有刚体。该脚本已附在枪管上。
这是一个屏幕快照,显示了孔中的3个子弹,以便能够从中获得起始位置。它在层次结构中显示了带枪的无人机,在检查器中显示了脚本:
此屏幕快照显示了当我快速单击鼠标左键并发射一些子弹时发生的情况。看起来更像是爆米花机,然后是子弹:
子弹从枪管的3个孔中出来,但是它们掉落得太快,射击距离很短。我想做的是,子弹将根据枪管朝向的位置向前射击,并且子弹会击中物体的墙壁和其他东西,然后再使用Raycast对被击中的物体增加伤害。但现在我无法像子弹一样射击子弹。
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class ShootBullets : MonoBehaviour
{
public GameObject bulletPrefab;
public float bulletSpeed = 100f;
public bool automaticFire = false;
private List<GameObject> startPositions;
// Start is called before the first frame update
void Start()
{
startPositions = GameObject.FindGameObjectsWithTag("Bullet").ToList();
}
// Update is called once per frame
void Update()
{
if (automaticFire == false)
{
if (Input.GetMouseButtonDown(0))
{
for (int i = 0; i < startPositions.Count; i++)
{
GameObject bullet = Instantiate(bulletPrefab, startPositions[i].transform.position, Quaternion.identity) as GameObject;
Rigidbody bulletRB = bullet.GetComponent<Rigidbody>();
bulletRB.AddForce(Vector3.forward * bulletSpeed);
bulletRB.velocity = bullet.transform.forward * 40;
Destroy(bullet, 0.5f);
}
}
}
else
{
for (int i = 0; i < startPositions.Count; i++)
{
GameObject bullet = Instantiate(bulletPrefab, startPositions[i].transform.position, Quaternion.identity) as GameObject;
Rigidbody bulletRB = bullet.GetComponent<Rigidbody>();
bulletRB.AddForce(Vector3.forward * bulletSpeed);
bulletRB.velocity = bullet.transform.forward * 40;
Destroy(bullet, 0.5f);
}
}
}
}
我先尝试仅使用AddForce,然后仅使用力度,然后使用两者,但是并没有太大改变结果。
将子弹的刚体上的“拖动”参数设置为零。持续不断地拖曳减慢刚体的速度。