欢迎光临散文网 会员登陆 & 注册

Unity 做FPS 需要的知识点 笔记一

2022-11-05 22:42 作者:东边的BiLi  | 我要投稿

文件头我们设置各种变量 给后面用

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索敌 等等很多新知识。 好 先这样了。

Unity 做FPS 需要的知识点 笔记一的评论 (共 条)

分享到微博请遵守国家法律