【Unity小技巧】如何使飞行的子弹不会因速度过快造成穿透?

【Unity小技巧】如何使飞行的子弹不会因速度过快造成穿透?

解:我们只需要在子弹飞行的途中储存前后帧的位置,然后计算他们之间的距离,最后通过射线检测是否碰撞到物体即可,接下来让我们整理下代码(实际可不继承mono,自行管理子弹类和飞行方式)
public class bullet : MonoBehaviour
{
	 //子弹速度
    public float sp=100;

    public float dis;

    public Vector3 posRecord;

    public Ray ray;

    public RaycastHit hit;

    void Update()
    {
        BulletMovement();
    }

	//核心点
    public void BulletMovement()
    {
    	 //记录位置
        posRecord = transform.position;
        //子弹开始移动
        transform.position += transform.forward*sp*Time.deltaTime;
        //计算当前位置与记录位置的距离
        dis = (posRecord - transform.position).magnitude;
        //大于0说明子弹移动了
        if (dis > 0)
        {
        	//从记录的位置向子弹飞行的方向发出射线
          if(Physics.Raycast(posRecord,transform.forward,out hit,dis))
          {
          		  //检测到目标后处理自己的代码....
                BulletDestroy();
          }
        }
    }

    public void BulletDestroy()
    {
       gameObject.SetActive(false);
    }
}

如果想让子弹可以穿透敌人并正常造成伤害,可以在子弹碰撞到对象后将其存入List中,撞击时判断List中是否有该对象,然后执行接下来的代码,最后子弹销毁时只需要清除List列表即可。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值