Unity 做FPS 需要的知識點 筆記一
文件頭我們設置各種變量 給后面用
private CharacterController playercc ---- 這里只介紹使用CharacterController 即非物理系統(tǒng)的辦法? 我們把它叫做 playercc

init 初始化階段我們做下面的工作
playercc = GetComponent<CharacterController>();? 獲取本體的 CharacterController 組件 后面會操作它
cam = GetComponentInChildren<Camera>();? ?新知識 獲得 子對象的組件
Cursor.lockState = CursorLockMode.Locked;? ?將鼠標鎖在屏幕中心? 因為我們靠它來轉(zhuǎn)向 以及 瞄準

非物理系統(tǒng)移動、靜止? 這是每一幀都要做的事情 即 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; 計算鏡頭上下旋轉(zhuǎn)? 即你的頭
rotationX = Mathf.Clamp(rotationX, look_down_angle_limit, look_up_angle_limit, )? 限制你的脖子 它無法做360度的旋轉(zhuǎn)
Camera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
transform.rotation *= Quaternion.Euler(0, Lookhorizontal * lookSpeed, 0);? 介紹說 應該使用Quaternion這個四元數(shù)組 但它又轉(zhuǎn)換為euler這個三元數(shù)組 我覺得應該可以簡化掉
playercc.Move(moveDirection * Time.deltaTime);? 根據(jù)你的FPS來運動

游戲暫停的實現(xiàn)? 包括暫停動畫 將角色固定住 鼠標控制 及 最關(guān)鍵的 時間停止 等等
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;? ----暫停的關(guān)鍵
? ? ? ? ? ? ? ? ? ? ani.SetBool("START", true);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

那么 FPS 游戲的最基礎部分 已經(jīng)學完了,現(xiàn)在可以自己搭場景,能跑能跳。以后繼續(xù)學習射擊,降會包含射線檢測、敵人AI索敵 等等很多新知識。 好 先這樣了。