Unity3D實(shí)現(xiàn)攝像機(jī)鏡頭移動并限制角度
本文實(shí)例為大家分享了Unity3D實(shí)現(xiàn)攝像機(jī)鏡頭移動并限制角度的具體代碼,供大家參考,具體內(nèi)容如下
攝像機(jī)鏡頭跟隨鼠標(biāo)移動,并限制上下左右的移動角度
public class ViewFromCream : MonoBehaviour
{
public int speed=5;
public Vector3 vect;
private float xcream;
private float ycream;
public void Update()
{
CreamView();
}
private void CreamView()
{
float x = Input.GetAxis("Mouse X");
float y = Input.GetAxis("Mouse Y");
if (x!=0||y!=0)
{
LimitAngle(60);
LimitAngleUandD(60);
this.transform.Rotate(-y * speed, 0, 0);
this.transform.Rotate(0, x * speed, 0, Space.World);
}
}
/// <summary>
/// 限制相機(jī)左右視角的角度
/// </summary>
/// <param name="angle">角度</param>
private void LimitAngle(float angle)
{
vect = this.transform.eulerAngles;
//當(dāng)前相機(jī)x軸旋轉(zhuǎn)的角度(0~360)
xcream = IsPosNum(vect.x);
if (xcream > angle)
this.transform.rotation = Quaternion.Euler(angle,vect.y,0);
else if (xcream < -angle)
this.transform.rotation = Quaternion.Euler(-angle, vect.y, 0);
}
/// <summary>
/// 限制相機(jī)上下視角的角度
/// </summary>
/// <param name="angle"></param>
private void LimitAngleUandD(float angle)
{
vect = this.transform.eulerAngles;
//當(dāng)前相機(jī)y軸旋轉(zhuǎn)的角度(0~360)
ycream = IsPosNum(vect.y);
if (ycream > angle)
this.transform.rotation = Quaternion.Euler(vect.x, angle, 0);
else if (ycream < -angle)
this.transform.rotation = Quaternion.Euler(vect.x, -angle, 0);
}
/// <summary>
/// 將角度轉(zhuǎn)換為-180~180的角度
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
private float IsPosNum(float x)
{
x -= 180;
if (x < 0)
return x + 180;
else return x - 180;
}
}
對IsPosNum方法進(jìn)行說明
之所以要將獲取的歐拉角轉(zhuǎn)換為-180°-180°之間,是因?yàn)樵讷@取eulerAngle中,x軸和y軸的值只有0-360,而沒有負(fù)數(shù),那么這將會復(fù)雜化我們角度的判斷,如限制左右角度為-60-60之間,那么我們就要判斷角度是否超過300度或是超過60度, 顯然超過300度的角度必定超過60度,那么就需要另外加條件進(jìn)行判斷;因此對獲取的值進(jìn)行轉(zhuǎn)化更為方便!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解CocosCreator中幾種計(jì)時(shí)器的使用方法
- CocosCreator學(xué)習(xí)之模塊化腳本
- 怎樣在CocosCreator中使用物理引擎關(guān)節(jié)
- 如何在CocosCreator中使用JSZip壓縮
- CocosCreator入門教程之用TS制作第一個(gè)游戲
- 解讀CocosCreator源碼之引擎啟動與主循環(huán)
- CocosCreator通用框架設(shè)計(jì)之資源管理
- 如何在CocosCreator中做一個(gè)List
- 如何在CocosCreator中使用http和WebSocket
- 剖析CocosCreator新資源管理系統(tǒng)
- CocosCreator怎樣使用cc.follow進(jìn)行鏡頭跟隨
相關(guān)文章
.NET企業(yè)級項(xiàng)目中遇到的國際化問題和解決方法
這篇文章主要介紹了.NET企業(yè)級項(xiàng)目中遇到的國際化問題和解決方法,說明了理國際化問題的一些典型例子和經(jīng)驗(yàn)之談,需要的朋友可以參考下2014-07-07
c#檢測usb設(shè)備撥插類庫USBClassLibrary分享
這篇文章主要介紹了c#檢測usb設(shè)備撥插類庫USBClassLibrary的簡單示例,需要的朋友可以參考下2014-04-04
C#實(shí)現(xiàn)動態(tài)數(shù)據(jù)繪圖graphic的方法示例
這篇文章主要介紹了C#實(shí)現(xiàn)動態(tài)數(shù)據(jù)繪圖graphic的方法,結(jié)合實(shí)例形式分析了C#根據(jù)動態(tài)數(shù)據(jù)繪制2D數(shù)據(jù)表格的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
C#8.0默認(rèn)接口實(shí)現(xiàn)的詳細(xì)實(shí)例
Microsoft使用C#8.0發(fā)布了許多新功能,他們引入的主要功能之一是默認(rèn)接口方法。這篇文章主要給大家介紹了關(guān)于C#8.0默認(rèn)接口實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2021-05-05
c# String擴(kuò)展 讓你在PadLeft和PadRight時(shí)不再受單雙字節(jié)問題困擾
這篇文章主要介紹了c# String擴(kuò)展 讓你在PadLeft和PadRight時(shí)不再受單雙字節(jié)問題困擾,需要的朋友可以參考下2020-04-04
Unity 從Resources中動態(tài)加載Sprite圖片的操作
這篇文章主要介紹了Unity 從Resources中動態(tài)加載Sprite圖片的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
c#基于NVelocity實(shí)現(xiàn)代碼生成
這篇文章主要介紹了c#基于NVelocity實(shí)現(xiàn)代碼生成的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01

