[Unity3D 版本5.X]實現一個自由漫遊的攝像機
我學習Unity3D一小段時間了,第一個製作目標就是實現一個自由漫遊的攝像機。
使用WSAD鍵控制攝像機的前後左右移動,使用滑鼠右鍵控制攝像機的旋轉。
這個功能比較簡單,程式碼也一目瞭然,不做過多解釋了,直接上程式碼。
這個指令碼不只可以用在攝像機上,也可以用在一般的GameObject上。
//-----------------------------------------------------------------
//1,把本類作為一個元件,包含在 GameObject 中。
//2,左手座標系。
//-----------------------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-----------------------------------------------------------------
public class FiCameraControl : MonoBehaviour
{
public float moveSpeed = 30.0f;
public float rotateSpeed = 0.2f;
public static Vector3 kUpDirection = new Vector3(0.0f, 1.0f, 0.0f);
//控制攝像機旋轉的成員變數。
private float m_fLastMousePosX = 0.0f;
private float m_fLastMousePosY = 0.0f;
private bool m_bMouseRightKeyDown = false;
//-----------------------------------------------------------------
void Start()
{
}
//-----------------------------------------------------------------
void Update()
{
//判斷旋轉
if (Input.GetMouseButtonDown(1)) //滑鼠右鍵剛剛按下了
{
if (m_bMouseRightKeyDown == false)
{
m_bMouseRightKeyDown = true;
Vector3 kMousePos = Input.mousePosition;
m_fLastMousePosX = kMousePos.x;
m_fLastMousePosY = kMousePos.y;
}
}
else if (Input.GetMouseButtonUp(1)) //滑鼠右鍵剛剛抬起了
{
if (m_bMouseRightKeyDown == true)
{
m_bMouseRightKeyDown = false;
m_fLastMousePosX = 0;
m_fLastMousePosY = 0;
}
}
else if (Input.GetMouseButton(1)) //滑鼠右鍵處於按下狀態中
{
if (m_bMouseRightKeyDown)
{
Vector3 kMousePos = Input.mousePosition;
float fDeltaX = kMousePos.x - m_fLastMousePosX;
float fDeltaY = kMousePos.y - m_fLastMousePosY;
m_fLastMousePosX = kMousePos.x;
m_fLastMousePosY = kMousePos.y;
Vector3 kNewEuler = transform.eulerAngles;
kNewEuler.x += (fDeltaY * rotateSpeed);
kNewEuler.y += -(fDeltaX * rotateSpeed);
transform.eulerAngles = kNewEuler;
}
}
//判斷位移
float fMoveDeltaX = 0.0f;
float fMoveDeltaZ = 0.0f;
float fDeltaTime = Time.deltaTime;
if (Input.GetKey(KeyCode.A))
{
fMoveDeltaX -= moveSpeed * fDeltaTime;
}
if (Input.GetKey(KeyCode.D))
{
fMoveDeltaX += moveSpeed * fDeltaTime;
}
if (Input.GetKey(KeyCode.W))
{
fMoveDeltaZ += moveSpeed * fDeltaTime;
}
if (Input.GetKey(KeyCode.S))
{
fMoveDeltaZ -= moveSpeed * fDeltaTime;
}
if (fMoveDeltaX != 0.0f || fMoveDeltaZ != 0.0f)
{
Vector3 kForward = transform.forward;
Vector3 kRight = Vector3.Cross(kUpDirection, kForward);
Vector3 kNewPos = transform.position;
kNewPos += kRight * fMoveDeltaX;
kNewPos += kForward * fMoveDeltaZ;
transform.position = kNewPos;
}
}
}
//-----------------------------------------------------------------
相關文章
- 攝像機控制軟體CaptureGRID更好的幫您管理攝像機APT
- Maui Blazor 使用攝像頭實現UIBlazor
- 橫版遊戲的攝像機移動理論與實踐(上)遊戲
- 搭建一個攝像頭應用程式 應用程式內部攝像頭
- 喵的Unity遊戲開發之路 - 軌道攝像機Unity遊戲開發
- JavaCV的攝像頭實戰之一:基礎Java
- 一次實踐:給自己的手機攝像頭進行相機標定
- python實現開啟筆記本攝像頭Python筆記
- 【Android】【opencv】實現攝像頭拍照和錄影AndroidOpenCV
- 一個小白的程式設計自學記錄----相機攝像自動化程式設計
- 從虛擬世界伸到現實的機械臂,靠攝像機就能玩轉任何物體虛擬世界機械臂
- 一個純前端實現的頭像生成網站前端網站
- MediaStream 實現帶攝像頭捕捉的表情包製作器AST
- HTML5拍照、攝像機功能實戰HTML
- 純JavaScript實現的呼叫裝置攝像頭並拍照的功能JavaScript
- 海康威視攝像頭-chrome谷歌瀏覽器高版本區域網下海康攝像頭web網頁實時播放Chrome谷歌瀏覽器Web網頁
- 28歲程式設計師實現財務自由退休:我只想做一個自由的“廢物”程式設計師
- shoujidiv,手機攝像頭改裝到頂部或底部 是怎麼實現的呢
- OpenGL 攝像機視角詳解
- AI泳池溺水識別攝像機AI
- 泥石流識別攝像機
- 記一個頭像高光動畫的CSS實現動畫CSS
- 攝像機矩陣P的性質小結矩陣
- 3D遊戲引擎之遊戲攝像機的使用 公開課直播視訊3D遊戲引擎
- 遊戲“碼農”的下一站:賣保險實現財富自由?遊戲
- 攝像機識別未戴安全帽
- 工作服穿戴識別攝像機
- 船隻監測識別攝像機
- WiFi漫遊卡頓嚴重,如何有效改善實現無縫漫遊WiFi
- 4G打獵攝像機拆機分析
- 短影片美顏sdk的漫畫拍攝和慢動作的實現流程
- JavaCV的攝像頭實戰之四:抓圖Java
- JavaCV的攝像頭實戰之五:推流Java
- 實現一個簡單版本的Vue及原始碼解析(一)Vue原始碼
- 第七個OpenGL程式,Camera 攝像機 (3d模型自轉)3D模型
- 逛過這個商城,攝像機竟然學會了獨立思考
- win10 2004怎樣新增網路攝像機_win10 2004新增網路攝像機步驟Win10
- 簡單介紹Pytorch實現WGAN用於動漫頭像生成PyTorch
- three.js 利用滑鼠移動攝像機JS