TPS射击游戏要实现的功能有:
- 滑屏控制
- 角色的横向旋转
- 相机的纵向旋转(区别于横向旋转)
- 相机贴墙拉近(不能穿墙)
- 相机观察旋转(角色不转相机转用于观察四周)
- 开火按钮和旋转屏幕功能共存(边开枪边转向瞄准)
射击瞄准技术方案二选一,很重要!!!
市面上的TPS射击游戏基本上有两种实现射击瞄准
方案一:以枪口射击方向为基准,相机跟着人做角度偏移
方案二:以相机的正方向为基准,使用IK组件让角色的上半身强制瞄准摄像机正前方N米的位置
方案1详解,以枪口为基准,相机跟随人动
方案2详解
1、滑屏控制
当按下屏幕时,获取屏幕的横轴、纵轴delta值
//滑动屏幕横轴delta值
mousX = Input.GetAxis("Mouse X");
//滑动屏幕纵轴delta值
mousY = Input.GetAxis("Mouse Y");
题外话:企业项目的滑屏系统设计到多事件、多手指操作,代码比较复杂,可以去看一些优秀的操控源码学习一下。
2、角色的横向旋转
这个一般有两种做法,已知滑动屏幕横轴和纵轴的delta值
mousX = Input.GetAxis("Mouse X");
transform.Rotate(Vector3.up, mousX * HorizonRotateSpeed);
rotateXValue += mousX * HorizonRotateSpeed;
Vector3 dir = new Vector3(0, rotateXValue, 0);
transform.rotation = Quaternion.Euler(dir);
3、相机的纵向旋转
请注意,角色的横向旋转是Y轴自转,这个很好理解,而纵向旋转是相机沿图中蓝线的向量旋转
当滑动屏幕deltaY发生变化时,相机的坐标沿蓝色轴发生空间三维旋转,并且朝向始终是看向蓝线,那具体看蓝线上的哪个点?看第一张图天蓝色的那个箭头线,需要给相机坐标配置一个与角色的位置差值,比如右1米,高2米,后1.5米
相机绕肩膀轴(大概在肩膀位置,就这么叫吧)旋转代码如下:
//offsetWithPlayer相机相对角色的坐标插值
//x代表左右、y代表上下、z代表前后
/相机旋转轴:角色坐标+轴高度+角色右方向
Vector3 RotateAxisHeight = new Vector3(0, 1.3f, 0);//1.3大概在肩膀位置
void OnUpdate()
{
//先计算相机位置
cameraPos = Player.transform.position + Player.right * (1 + offsetWithPlayer.x);
cameraPos = cameraPos + Player.transform.up * (1 + offsetWithPlayer.y);
cameraPos = cameraPos - Player.transform.forward * (1 + offsetWithPlayer.z);
//更新相机位置
followCamera.position = cameraPos;
//相机位置绕肩膀轴旋转rotateValue角度
followCamera.RotateAround(Player.position + RotateAxisHeight, followTarget.right, rotateValue);
}
4、相机碰撞拉近
5、相机观察旋转
6、开火按钮和旋转屏幕功能共存
7、射击方向方案选择,以枪口为基准还是以相机为基准。
技术难点:
枪与墙
由于是第三人称射击游戏,角色和相机之间有夹角,所以枪口点和准星是有误差的,下面是和平精英手游截图,我用AK射击柱子文章来源:https://www.toymoban.com/news/detail-576998.html
j文章来源地址https://www.toymoban.com/news/detail-576998.html
到了这里,关于[游戏开发][Unity] TPS射击游戏相机实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!