[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;
}
}
}
//-----------------------------------------------------------------
相關文章
- unity3d攝像機Unity3D
- 想用手機拍攝虛擬現實影片? 看看Teleport智慧攝像頭
- Maui Blazor 使用攝像頭實現UIBlazor
- 攝像機控制軟體CaptureGRID更好的幫您管理攝像機APT
- WiFi漫遊卡頓嚴重,如何有效改善實現無縫漫遊WiFi
- CameraPath實現簡單漫遊
- 網路攝像機-ISP基礎一
- 搭建一個攝像頭應用程式 應用程式內部攝像頭
- C#實現攝像頭呼叫、拍照C#
- 兩步實現安卓手機秒變網路攝像頭安卓
- 漫遊jedis-RESP通訊實現
- 一次實踐:給自己的手機攝像頭進行相機標定
- JavaCV的攝像頭實戰之一:基礎Java
- html5呼叫攝像頭實現拍照HTML
- 一個小白的程式設計自學記錄----相機攝像自動化程式設計
- unity3d--攝像機Unity3D
- unity3d中對像之間的相互作用的實現Unity3D
- 記一個頭像高光動畫的CSS實現動畫CSS
- 一個位元組的網路漫遊故事獨白
- 從虛擬世界伸到現實的機械臂,靠攝像機就能玩轉任何物體虛擬世界機械臂
- HTML5拍照、攝像機功能實戰HTML
- 360智慧攝像機能否防盜? 實用測評
- 小米Aqara智慧攝像機 實現家庭安防等自動化場景
- 計算機系統漫遊計算機
- 關於基於OPENCV攝像機標定的一點感受OpenCV
- MediaStream 實現帶攝像頭捕捉的表情包製作器AST
- python實現開啟筆記本攝像頭Python筆記
- 【Android】【opencv】實現攝像頭拍照和錄影AndroidOpenCV
- 智慧攝像機的網路安全如何保障?
- OpenGL 攝像機視角詳解
- AI泳池溺水識別攝像機AI
- 一個純前端實現的頭像生成網站前端網站
- 一個資料包的網際網路漫遊記
- 純JavaScript實現的呼叫裝置攝像頭並拍照的功能JavaScript
- 海康威視攝像頭-chrome谷歌瀏覽器高版本區域網下海康攝像頭web網頁實時播放Chrome谷歌瀏覽器Web網頁
- 橫版遊戲的攝像機移動理論與實踐(上)遊戲
- 實現酒店無線覆蓋和無線漫遊
- 攝像機矩陣P的性質小結矩陣