第三人称射击游戏-子弹方向问题

1.出射点

在TPS第三人称射击游戏中,我们希望子弹从场景中的角色的枪口进行发射,而不是从摄像机或者玩家身体中,这样在视觉效果上,可以看到玩家的枪支开火

2.子弹飞行方向

相比于第一人称,第三人称就会面临一个问题,子弹的飞行方向.子弹在场景中从枪口位置进行初设,但是我们希望子弹可以射击到我们在屏幕中的准星位置.

 

在场景中的准星实际是在UI上的图片不能作为我们实际子弹目标方向.因此我们需要使用不同坐标空间的位置转换.
1.首先从UICamera的坐标空间中,获取到准星在UICamera坐标空间中的屏幕坐标,由于UICamera和主Camera的屏幕坐标是一样的
2.我们将准星的屏幕坐标使用Camera.main.ScreenPointToRay这个方法获取一条从主摄像机发出到摄像机近裁剪面上的坐标位置的一条射线,这个射线就是实际我们在游戏中从摄像机到屏幕瞄准的位置的一条射线
3.这样我们就可以得到子弹的射击方向
即为摄像机位置 + 射线方向 * 1000f - 开火位置,我们将此方向进行标准化,就可以作为子弹的出射方向了.

if (controller.tag == "Player")
            {
                //玩家发射子弹
                bulletRotation = Quaternion.LookRotation(controller.transform.forward);
                //获得准星的屏幕坐标
                Vector3 targetPixScreenPoint = uICamera.WorldToScreenPoint(targetPix.position);
                Ray ray = Camera.main.ScreenPointToRay(targetPixScreenPoint);
                Debug.DrawRay(transform.position, Camera.main.transform.position + ray.direction * 1000f - transform.position, Color.red);
                //我们只需要方向 所以讲得到的方向进行标准化
                bulletDirection = Vector3.Normalize(Camera.main.transform.position + ray.direction * 1000f - transform.position);
            }

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值