前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第三人称射击游戏-子弹方向问题

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

作者头像
祝你万事顺利
发布2019-05-28 23:11:03
1.6K0
发布2019-05-28 23:11:03
举报
文章被收录于专栏:Unity游戏开发Unity游戏开发
1.出射点

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

2019-04-29_140311.png

2019-04-29_140438.png

2.子弹飞行方向

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

UIcameraAndPlayer.png

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

代码语言:javascript
复制
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);
            }

Ray.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.出射点
  • 2.子弹飞行方向
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档