unity 项目仿cs知识点
一、簡介
1、人物部分
a、人物移動
b、鏡頭旋轉
c、玩家開槍:動畫、音頻、枚舉、彈孔、倍鏡
2、敵人部分
a、敵人克隆
b、走向玩家:距離,方向、朝向、點乘、叉乘
二、人物部分
(1)、人物移動
談談Move和SimpleMove
1、SimpleMove
SimpleMove 只能在平面移動,不帶Y軸移動
移動自帶速度。所以不需要乘以Time.deltaTime
移動時自帶重力
2、Move
移動方向沒有限制
移動時候需要乘以Time.deltaTime
需要自己做重力
在(1)中單有第一人稱移動的代碼還不行,還需要通過鼠標控制人物方向,才能體現為第一人稱移動。
(2)、鏡頭旋轉(人物面向方向,腳本掛在人物上)
Vector3 cameraRotate;float rotateSpeed = 3f;void Update () {//獲取鼠標水平和豎直方向的偏移量float x = Input.GetAxis("Mouse X");float y = Input.GetAxis("Mouse Y");//左右旋轉(繞Y軸旋轉);cameraRotate.x -= y * rotateSpeed;//抬頭低頭(繞X軸旋轉)cameraRotate.y += x * rotateSpeed;//抬頭低頭范圍cameraRotate.x = Mathf.Clamp(cameraRotate.x, -45, 45);//左右旋轉范圍(CS人物是可以左右無限制旋轉的,所以這里可以去掉)//cameraRotate.y = Mathf.Clamp(cameraRotate.x,-90,90);transform.rotation = Quaternion.Euler(cameraRotate.x, cameraRotate.y, 0);}為了更好的移動,可以試著鼠標隱藏
Cursor.lockState = CursorLockMode.Locked;(3)、玩家開槍
Transform pos;//槍口位置private GameObject explosionFx;//爆炸特效private AudioClip explosionAudios, fireAudios;//爆炸音頻,開槍音頻void Start(){//動態加載資源(路徑: Assets/Resources/Prefabs/HitBlood)explosionFx = Resources.Load<GameObject>("Prefabs/HitBlood");explosionAudios = Resources.Load<AudioClip>("Audios/boom");fireAudios = Resources.Load<AudioClip>("Audios/shoot");}void Update(){if (Input.GetButtonDown("Fire1")){//點擊左鍵,槍口位置發出開槍音頻(自動消失)音量1AudioSource.PlayClipAtPoint(fireAudios, pos.position, 1f);RaycastHit hit;//碰撞信息//檢測射線(槍口位置,人物向前方向,碰撞信息,距離20米)if (Physics.Raycast(pos.position, transform.forward, out hit, 20)){GameObject go = Instantiate(explosionFx, hit.point, Quaternion.identity);Destroy(go, 1f);//播放爆炸特效(自動消失),音量1AudioSource.PlayClipAtPoint(explosionAudios, hit.point, 1f);Destroy(hit.collider.gameObject);}}}注意:
(a)、cs應該用射線發射,由于要實現倍鏡(我沒法用準星對齊),最后我選擇用攝像機中心發射,而非槍口發射
(b)、開槍時需要有開槍動畫
?、音頻
public class ResManage {//該類的目的是為了存儲字符串,簡潔其他類//聲音路徑public const string walk = "Sounds/playWalk";//走路聲音public const string run = "Sounds/playRun";//跑步聲音 } AudioClip landClip, runClip;//音頻片段AudioSource audios;//音頻組件void Start(){//音頻資源audios = GetComponent<AudioSource>();//動態加載資源,(體現ResManage類的目的)landClip = Resources.Load<AudioClip>(ResManage.walk);runClip = Resources.Load<AudioClip>(ResManage.run);}
(d)枚舉的應用
播放動畫時,通常都是用枚舉來寫(此處寫敵人的動畫)
用法:GetStates(States.Idle);
(e)、彈孔位置
(f)、倍鏡(減表示放大倍數)
camera.GetComponent().fieldOfView-=45;
三、敵人部分
(1)、克隆敵人
(以某點(x1,y1,z1)為圓心范圍1~5米生成5個敵人)
(2)、敵人走向玩家
距離問題:
利用Vector.Distance(敵人位置,玩家位置);判斷距離從而進行播放動畫朝玩家靠近。
方向問題:
//敵人指向玩家方向 dir = (player.transform.position - transform.position).normalized;朝向問題:
transform.LookAt(player.transform.position);(3)、判斷敵人位置
a、點乘
b、叉乘
總結
以上是生活随笔為你收集整理的unity 项目仿cs知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinXP瘦身办法
- 下一篇: 【论文解读|AAAI2021】HGSL