Game檢視中實現類Scene中Camera的控制(自身中心)
在網上找了找,感覺這個還不錯,並自己試了試,效果很不錯,就是沒有平滑效果,需要的自己加吧,哈哈。
下面就是網上找到的本版,還不錯!!
Unity Game視窗中還原Scene視窗攝像機操作 強化版
之前寫的那個版本看來真的是不行啊。最近研究了一下官方第一人稱指令碼,人家的平滑過渡真的是沒得說。借鑑了一下,寫出來了一個新的比較完美的控制。
之前我們的操作是通過滑鼠輸入的開始座標和轉動座標。其實官方有一個函式~
1 float yRot = Input.GetAxis("Mouse X"); 2 float xRot = Input.GetAxis("Mouse Y");
這就分別能獲取到滑鼠的X軸操作和Y軸操作了。
那為什麼用yRot獲取X軸,xRot獲取Y軸呢?
左面是滑鼠的頂檢視,右邊是Unity中的三維座標。可以觀察到,滑鼠X軸的平移對應的就是Unity中Y軸的旋轉。Y軸同理。
但是還是不能照搬官方的寫法,因為官方的寫法針對的是自身座標,就是Local。(注:LocalPosition並不等於物體的Local座標)
Scene視窗的攝像機是針對World的旋轉。
這裡就需要轉換一下。
using UnityEngine;
using System.Collections;
public class TCamerCtrl : MonoBehaviour
{
private float Speed = 20f;
private Vector3 CameraR;
void Start()
{
CameraR = Camera.main.transform.rotation.eulerAngles;
}
void Update()
{
Vector3 Face = transform.rotation * Vector3.forward;
Face = Face.normalized;
Vector3 Left = transform.rotation * Vector3.left;
Left = Left.normalized;
Vector3 Right = transform.rotation * Vector3.right;
Right = Right.normalized;
if (Input.GetMouseButton(1))
{
//官方指令碼
float yRot = Input.GetAxis("Mouse X")*2;
float xRot = Input.GetAxis("Mouse Y")*2;
Vector3 R = CameraR + new Vector3(-xRot, yRot, 0f);
CameraR = Vector3.Slerp(CameraR, R, Speed * Time.deltaTime);
transform.rotation = Quaternion.Euler(CameraR);
}
if (Input.GetKey("w"))
{
transform.position += Face * Speed * Time.deltaTime;
}
if (Input.GetKey("a"))
{
transform.position += Left * Speed * Time.deltaTime;
}
if (Input.GetKey("d"))
{
transform.position += Right * Speed * Time.deltaTime;
}
if (Input.GetKey("s"))
{
transform.position -= Face * Speed * Time.deltaTime;
}
if (Input.GetKey("q"))
{
transform.position -= Vector3.up * Speed * Time.deltaTime;
}
if (Input.GetKey("e"))
{
transform.position += Vector3.up * Speed * Time.deltaTime;
}
}
}
感謝原作者!
最後附上原連結:http://www.cnblogs.com/SHOR/p/5736596.html
相關文章
- 11 UML中的邏輯檢視、程序檢視、實現檢視、部署檢視
- Android中實現類似iOS的SwitchButton控制元件AndroidiOS控制元件
- ASP.NET Core 5.0 MVC中的檢視分類——佈局檢視、啟動檢視、具體檢視、分部檢視ASP.NETMVC
- scala中的匿名子類實現
- SQLite中中實現 if not exist 類似功能SQLite
- Hierarchy檢視裡的Transform和Camera元件ORM元件
- Android中水波紋使用之自定義檢視實現Android
- android studio中如何檢視類的關係等Android
- (8)mysql 中的檢視MySql
- 11、Oracle中的檢視Oracle
- 控制檯實時檢視 sqlSQL
- WPF實現html中的table控制元件HTML控制元件
- iOS 控制元件檢視基類之 UIViewiOS控制元件UIView
- 現實生活中的視覺符號視覺符號
- ORACLE中的物化檢視建立Oracle
- 檢視DB buffer 中的物件物件
- [Django REST framework - 檢視元件之檢視基類、檢視擴充套件類、檢視子類、檢視集]DjangoRESTFramework元件套件
- Java中各Set實現類的效能分析Java
- Python實現控制檯中的進度條Python
- SGA中Latch 的分類和查詢--結合v$latch檢視
- C#開發Unity遊戲教程之Scene檢視與指令碼的使用C#Unity遊戲指令碼
- IntelliJ IDEA 中uml外掛檢視某類的所有繼承或實現關係 + outline功能IntelliJIdea繼承
- 原生JS實現類似《掘金》網站的圖片檢視器JS網站
- 如何基於Django中的WebSockets和非同步檢視來實現實時通訊功能DjangoWeb非同步
- Android Camera 系列(二)控制CameraAndroid
- 從零開始寫 Docker(九)---實現 mydocker ps 檢視執行中的容器Docker
- 在 React 應用程式中實現簡單的頁面檢視跟蹤器React
- linux:檢視使用中的埠Linux
- hive中的 lateral view(側檢視)HiveView
- 檢視系統中的WWN號
- 檢視資料庫中的物件資料庫物件
- 檢視sqlite中的表結構SQLite
- 在.NET Core 中實現健康檢查
- 實現ABP中Person類的許可權功能
- VM中實現手機震動功能的類
- MFC中獲取程式自身的版本資訊
- Python中實現結構體類Python結構體
- Linux 中實時檢視日誌的3種方法Linux