Unity 做FPS 需要的知识点 笔记一
文件头我们设置各种变量 给后面用
private CharacterController playercc ---- 这里只介绍使用CharacterController 即非物理系统的办法 我们把它叫做 playercc

init 初始化阶段我们做下面的工作
playercc = GetComponent<CharacterController>(); 获取本体的 CharacterController 组件 后面会操作它
cam = GetComponentInChildren<Camera>(); 新知识 获得 子对象的组件
Cursor.lockState = CursorLockMode.Locked; 将鼠标锁在屏幕中心 因为我们靠它来转向 以及 瞄准

非物理系统移动、静止 这是每一帧都要做的事情 即 update 过程
if playercc.isGrounded 可以判断是否站在地上
moveDirection.y -= gravity * Time.deltaTime; 配合上面做判断 如果不是站着 就模拟重力 生成一个 Y 轴的向量
gravity 是你自己设置的变量 设成20好像就可以了
h = transform.right * Input.GetAxis("Horizontal")
v = transform.forward * Input.GetAxis("Vertical") 获取你的输入 分别是 前后的向量 以及 左右的向量, 他们的量从 0 到 1 所以在后面 你还得乘上 movespeed
moveDirection = h + v 向量合并成最终方向
if (Input.GetButton("Jump") moveDirection.y = jumpSpeed; 我认为可以跟上面判断是否站在地面一起做了 因为都是给Y轴赋值
if Cursor.lockState == CursorLockMode.Locked
Lookvertical = -Input.GetAxis("Mouse Y");
Lookhorizontal = Input.GetAxis("Mouse X"); 如果是瞄准模式 那么就获取鼠标偏移量
rotationX += Lookvertical * lookSpeed; 计算镜头上下旋转 即你的头
rotationX = Mathf.Clamp(rotationX, look_down_angle_limit, look_up_angle_limit, ) 限制你的脖子 它无法做360度的旋转
Camera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
transform.rotation *= Quaternion.Euler(0, Lookhorizontal * lookSpeed, 0); 介绍说 应该使用Quaternion这个四元数组 但它又转换为euler这个三元数组 我觉得应该可以简化掉
playercc.Move(moveDirection * Time.deltaTime); 根据你的FPS来运动

游戏暂停的实现 包括暂停动画 将角色固定住 鼠标控制 及 最关键的 时间停止 等等
if (Input.GetKeyDown(BackKey))
{
if (MenuPanel.activeInHierarchy)
{
MenuPanel.SetActive(false);
Player.canMove = true;
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked; ---锁定鼠标 成为瞄准模式
Time.timeScale = 1.0f; ----时间正常流逝
ani.SetBool("START", false);
}
else
{
MenuPanel.SetActive(true);
Player.canMove = false;
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None; --- 不锁定鼠标 让你用鼠标做各种操作
Time.timeScale = 0.0f; ----暂停的关键
ani.SetBool("START", true);
}
}

那么 FPS 游戏的最基础部分 已经学完了,现在可以自己搭场景,能跑能跳。以后继续学习射击,降会包含射线检测、敌人AI索敌 等等很多新知识。 好 先这样了。