溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity3d學習 相機的跟隨

發布時間:2020-02-23 01:31:11 來源:網絡 閱讀:618 作者:26度出太陽 欄目:游戲開發

最近在寫關于相機跟隨的邏輯,其實最早接觸相機跟隨是在Unity官網的一個叫Roll-a-ball tutorial上,其中簡單的涉及了關于相機如何跟隨物體的移動而移動,如下代碼:

Unity3d學習 相機的跟隨 簡單相機移動

  可以很容易的理解上述的代碼: 在初始化時計算與對應物體的向量差值,然后在LateUpdate中對相機位置進行及時更新,至于為什么要放在LateUpdate,因為LateUpdate是等所有腳本的Update跑完之后

在更新自己的邏輯,這樣相機得到物體的位置往往是最新的 。具體可以看 Unity關于腳本生命周期 中有提到。

  上述的代碼 , 相機是實時跟蹤的, 其實相機的跟蹤可以變的跟平滑一點,可以利用Unity中的Mathf.Lerp,在每一幀做一個線性的差值,這樣的話可以使相機跟隨變的更平滑一點,如下優化的代碼:

Unity3d學習 相機的跟隨 平滑的跟蹤

  上述代碼能滿足大多數情況,但是如果一個場景里有多個焦點呢? 比如現在要滿足的業務條件是:    

  •  當鼠標對屏幕進行拖拽時,需要移動相機

  •  當有多個焦點時,如何更好的切換

  我們先來實現第一個需求,先講講現在具備哪些條件:

  • Input.GetMouseButtonDown(0) : 這個表示在某一幀按下鼠標左鍵,會返回true,如果你一直按著不放(返回的是false),直到你松開再按下(才會再次返回true) 可以參考文檔

  • Input.GetMouseButton(0): 這個表示當前是鼠標左鍵按下,會返回true 可以參考文檔

  通過上述接口,我們可以實現拖拽了,思路的話就不細說,看代碼就行:

Unity3d學習 相機的跟隨 拖拽代碼

  這邊提一下在DragCamera函數中如果OriginDragPos不及時更新,屏幕在鼠標移動時會一直移動,因為在計算是產生的move向量一直有值,所以會不斷偏移,這邊看需求吧。

  上述的代碼已經可以實現相機的拖拽了,但是如果你的屏幕上有UI結構,按下UI結構時,點擊UI結構 ,其實也會調用 Input.GetMouseButtonDown(0),就會調用拖拽函數,但是

往往這種情況下,是不需要將m_bIsDrag設為true,所以如何優化屏蔽呢? 看如下代碼:

Unity3d學習 相機的跟隨 屏蔽UI

  這邊要提一下關于Unity5.X中GUI的事件系統 確定事件產生到接收 流程是 輸入模塊產生事件數據 PointerEventData ,通過投影模塊(射線)確定具體UI , 最終到具體UI來接收數據,

由于這不是本篇的重點,可以看一下 關于事件系統的博文 我們這里模仿了前兩步驟,確定當前鼠標輸入的點是否UI有就直接return.

  關于焦點確定,其實算是優化項吧 ,我這邊采樣的是委托/事件方式來發送對應的Tranform,當然也可以直接接口。

    相機移動的例子


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女