Unity3D遊戲開發之自由視角下的角色控制

2021-07-03 03:49:29 字數 2250 閱讀 7035

今天呢,我們繼續來**unity3d角色控制的內容,自由視角是指玩家可以按照自身座標系向著四個不同的方向移動,當玩家按下滑鼠右鍵時,可以繞y軸按照一定的角度旋轉攝像機,在旋轉的過程中,角色將旋轉相應的角度。在移動的過程中,攝像機會保持與玩家間的一定距離,然後跟隨角色進行移動。好了,下面我們正式開始今天的內容吧!

在開始今天的內容前,首先讓我們來學習下unity3d中較為重要的一部分知識,理解這些知識是我們開始學習今天內容的基礎。

1、input.getaxis():該方法用於在unity3d中根據座標軸名稱返回虛擬座標系中的值,通常情況下,使用控制器和鍵盤輸入時此值範圍在-1到1之間。這段話怎麼理解呢?我們來看下面這段指令碼:

[csharp]

view plain

copy

這段指令碼呢是根據滑鼠的位置來旋轉物體從而實現對物體的觀察,從這段指令碼中我們可以看出,通過獲取輸入軸的辦法,我們可以獲得滑鼠移動的方向進而實現對於物體的旋轉控制。在unity3d中我們可以通過edit->project setting->input來檢視專案中的座標軸名稱:

2、尤拉角eulerangles:該值是vector3型別的值,x、y、z分別代表繞x軸旋轉x度,繞y軸旋轉y度,繞z軸旋轉z度。因此,該值最為直觀的形式是可以允許我們直接以乙個三維向量的形式來修改乙個物體的角度,例如下面的指令碼:

[html]

view plain

copy

如果你已經理解了上面的話,那麼不出意外的,這段指令碼會如你所願的,按照滑鼠在水平方向上移動的方向繞y軸旋轉。通常情況下,我們不會單獨設定尤拉角其中乙個軸,例如eulerangles.x = 10,因為這將導致偏移和不希望的旋轉。當設定它們乙個新的值時,要同時設定全部。好在我們可以通過quaternion.euler()方法將乙個vector3型別的值轉化為乙個四元數,進而通過修改transform.rotation來實現相同的目的。

3、插值:所謂插值是指在離散資料的基礎上補插連續函式,使得這條連續曲線通過全部給定的離散資料點。插值是離散函式逼近的重要方法,利用它可通過函式在有限個點處的取值狀況,估算出函式在其他點處的近似值。在某些情況下,如果我們希望過程中處理得較為平滑,此時我們就可以使用插值的方法來實現對中間過程的模擬。在unity3d中我們可以使用兩種插值方法,即線性插值lerp,球形插值slerp。我們來看下面的指令碼:

[csharp]

view plain

copy

插值的方法很簡單,只要我們給出初始和結束的狀態、時間就可以了,大家可以自己看api。

[csharp]

view plain

copy

這裡定義四個方向,是按照逆時針方向轉的,相鄰的兩個方向間相差90度,所以我們只需要將當前的角度和目標角度相減就可以轉到目標角度的方向(其實這是以前寫的**,現在回頭再看,直接用尤拉角似乎更為簡單啊,呵呵)。這裡主要的內容就是這樣了。下面我們來看相機控制部分的**吧,這裡的**參考了mouseorbit指令碼,主要完成了滑鼠右鍵旋轉控制,博主在此基礎上增加了相機縮放的**。提到相機縮放,其實就是根據滑鼠滾輪滾動的方向和大小重新計算角色與相機的距離,與之類似地還有小地圖的放縮,其實同樣是通過修改距離來實現的。博主今天的乙個體會是官方的**能自己寫一遍的最好自己寫一遍,這樣好多東西就能在這個過程中給理解了。我們一起來看指令碼

[csharp]

view plain

copy

這裡很多朋友可能對我設定乙個狀態很不理解吧,這其實是為了讓玩家有乙個自由檢視角色的機會,否則當玩家按下滑鼠右鍵的話,角色就會轉向相機正對著的位置,這樣玩家就看不到角色的正面了。當然,這裡用到了插值,這樣能使角色在轉身的時候平滑一點,效果會更好。

效果演示(2m的限制讓很多展示都無可奈何)

如果在測試的時候出現bug。bug出現在如下位置:

[csharp]

view plain

copy

該方法主要的作用是當玩家同時按下方向控制鍵和滑鼠右鍵,玩家可以隨著滑鼠旋轉到對應的角度,這主要是為了滿足玩家雙手操作的需求,不過由於這行**,導致玩家在向左、向右、向後三個方向上的轉身失效,如果除去這行**,則原來的方向控制沒有任何問題,可是沒有這行**,玩家的操作感就會下降。後來博主想到我們對角色的旋轉實際上應該是放在滑鼠右鍵事件裡的,所以博主將**修改如下,這樣就解決了這個bug:

[csharp]

view plain

copy

不過經過博主測試,如果不採用插值的話,似乎效果更為真實啊(為什麼會和第一次測試的感覺不一樣啊,囧!)

Unity3D遊戲開發

入門級unity安裝教程 一 unity五大面板 unity3d的介紹 1 介面 選單 面板 元件 unity5.x 編輯器介紹 unity開啟篇 一 滑鼠右鍵 wsadeq前後左右上下移動 shift加速移動 滑鼠右鍵旋轉檢視 滑鼠中鍵移動檢視 alt 右鍵縮放 alt 左鍵旋轉物體視角 q移動場...

Unity3D遊戲開發初探

1 如何在遊戲指令碼程式中建立物件而不是一開始就建立好物件?使用gameobject的靜態方法 createprimitive view code 其中在createcube方法中,使用gameobject.createprimitive方法來建立cube型別的遊戲物件例項,設定了它出現的座標並為它...

Unity 3D遊戲開發導學

策劃 美工軟體工程師 測試工程師 客服等.unity是一款遊戲引擎 遊戲引擎 一款遊戲最最最核心的 程式框架。包含以下系統 渲染引擎,物理引擎,碰撞檢測系統,音效,指令碼引擎,動畫系統,人工智慧,網路引擎,以及場景管理。使用遊戲引擎,開發者可以重用已有的核心技術,將精力集中在遊戲邏輯和設計上,從而簡...