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 studio中如何檢視類的關係等Android
- ASP.NET Core 5.0 MVC中的檢視分類——佈局檢視、啟動檢視、具體檢視、分部檢視ASP.NETMVC
- IntelliJ IDEA 中uml外掛檢視某類的所有繼承或實現關係 + outline功能IntelliJIdea繼承
- Android Camera 系列(二)控制CameraAndroid
- 控制檯實時檢視 sqlSQL
- scala中的匿名子類實現
- uml類圖中類版型區分--邊界類,控制類,實體類
- 11、Oracle中的檢視Oracle
- [Django REST framework - 檢視元件之檢視基類、檢視擴充套件類、檢視子類、檢視集]DjangoRESTFramework元件套件
- WPF實現html中的table控制元件HTML控制元件
- 原生JS實現類似《掘金》網站的圖片檢視器JS網站
- Spring MVC 中檢視的實現原理,在Spring MVC 中實現重定向和轉發,以及訪問靜態資源SpringMVC
- 中國疾病預防控制中心:研究發現中國學歷越高的女性越瘦
- linux:檢視使用中的埠Linux
- [譯] 通過檢視控制器容器和子檢視控制器避免龐大的檢視控制器
- 現實生活中的視覺符號視覺符號
- Linux 中實時檢視日誌的3種方法Linux
- 自己動手實現Java中的StringBuffer類Java
- angularjs中控制檢視的控制器的兩種注入依賴項及服務的寫法AngularJS
- HttpServletRequest中的方法是哪個類實現的?HTTPServlet
- drf : 通用檢視類和(GenericAPIView)5個檢視擴充套件類,九個檢視子類,檢視集。APIView套件
- 如何基於Django中的WebSockets和非同步檢視來實現實時通訊功能DjangoWeb非同步
- 從零開始寫 Docker(九)---實現 mydocker ps 檢視執行中的容器Docker
- 在 React 應用程式中實現簡單的頁面檢視跟蹤器React
- Android 使用graphics.Camera類實現自定義旋轉飄落Android
- hive中的 lateral view(側檢視)HiveView
- 在.NET Core 中實現健康檢查
- web頁面中接入空號檢測API教程,實現視覺化號碼檢測WebAPI視覺化
- 檢視控制器
- Flask 類檢視Flask
- django 的類檢視和函式檢視-雜談Django函式
- 實現【檢視更多】功能的程式碼
- Python在類中實現swith case功能Python
- 在 Kotlin 中“實現”trait/型別類KotlinAI型別
- Three.js中實現對InstanceMesh的碰撞檢測JS
- 人類自身都對不齊,怎麼對齊AI?新研究全面審視偏好在AI對齊中的作用AI
- 夾在理想與現實中的長視訊
- netty系列之:netty實現http2中的流控制NettyHTTP