[游戏开发][Unity] TPS射击游戏相机实现

TPS射击游戏要实现的功能有:

  1. 滑屏控制
  2. 角色的横向旋转
  3. 相机的纵向旋转(区别于横向旋转)
  4. 相机贴墙拉近(不能穿墙)
  5. 相机观察旋转(角色不转相机转用于观察四周)
  6. 开火按钮和旋转屏幕功能共存(边开枪边转向瞄准)

射击瞄准技术方案二选一,很重要!!!

市面上的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射击柱子

j

猜你喜欢

转载自blog.csdn.net/liuyongjie1992/article/details/131773006