Unity C# | 旋轉(Rotate)#2-平滑的旋轉方式

更新於 發佈於 閱讀時間約 4 分鐘

一、前言

  這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。

二、單次旋轉與平滑旋轉

  在上一篇文章中,我們學會了常見的旋轉,介紹了旋轉的基本知識,分享旋轉的多載函式,並分析物理旋轉與座標旋轉的差異,有興趣可以去參考上一篇文章,接下來這邊會講述單次與平滑的差異,並介紹兩種旋轉體系。

1. 單次旋轉的效果

  在程式腳本(Script)中,單次執行一次旋轉,會直接從現在的位置到達終點位置,不會有中間的動畫,會以順時針的方向旋轉,在設計上,這種旋轉方式會直接完成,因此會有很強烈的回饋感,可以進行很精確的操作。

2. 平滑旋轉的效果

  當我們在製作注重美術的遊戲時,平滑旋轉則是重中之重,優秀且經過設計的旋轉提供了良好的視覺效果,並且玩家不會感受到突兀,能很好的沉浸在遊戲設計師所創造的世界中。

3. 旋轉的兩種體系

  在 Unity 的引擎中,有兩種旋轉體系,第一種是以歐拉角(Euler Angles)的座標變換(Transform)體系;第二種是以四元數(Quaternion)體系。
  前者方便易懂好使用,後者複雜詳細不易錯;在歐拉角中,在軸靠得很近時會出現萬象鎖的問題,並且在資源上消耗較大,因為要重新計算;而四元數的體系就沒這個問題了,而且比較節省資源。

三、歐拉角(Eluer Angles)-簡易的旋轉

  雖然歐拉角看起來有不少問題,不過他還是很常使用,最主要的問題是因為使用難度低、程式碼數量少,只要避開複雜的旋轉,僅用於簡單的旋轉,那歐拉角完全沒問題。
  因為前一篇文章已經撰寫過歐拉角的旋轉的旋轉函式如何使用,這篇文章將會搭配影片並分享使用與觀察體驗,提出在遊戲設計中值得使用的內容。

1. Transform.Rotate()

  從影片中可以看到,這種旋轉方式並沒有太大的問題,如果每一個影格旋轉一格看起來太突兀,可以改變成每一個影格轉動半格,也因此可以理解為何這會是最常被使用的旋轉函式了。

2. Transform.RotateAround

  這個旋轉還包含了座標的轉換,不過它主要是以某個點為圓心公轉,可以用行星公轉來比喻,只要我們決定好點與公轉速度,它就會開始旋轉了。

3. Transform.LookAt

  這個函式的功能是看向某一個目標,在影片中,搭配上一個公轉函式,能很好的呈現這兩個函式的效果,也就是追蹤某個目標,並強硬的看向對像。

四、四元數(Quaternion)-複雜的旋轉

  我至今還沒完全搞懂四元數的插值使用方式,不過這邊將會把他們的一些函式的使用方式分享出來,有興趣的也可以到官網上查看。
  我在接觸到 Vector3 的 Lerp 時到是有稍微搞懂,它是一個比較像從A點到B點之間把所有狀態提取出來,有一個插值比例,接近A的比例為0,接近B的比例為1,而 Lerp 與 Slerp 的差別在於,這條線是一個直線還是曲獻。

1. Quaternion.Lerp

  這個函式需要三個參數:起始四元數、目標四元數和插值比例(t)。插值比例的範圍在0到1之間,0代表完全使用起始四元數,1代表完全使用目標四元數。
Quaternion Lerp(Quaternion a, Quaternion b, float t);

2. Quaternion.Slerp

  這個函式需要三個參數:起始四元數、目標四元數和插值比例(t),跟前面的 Lerp完全相同。在我找到的教學中,若使用 Slerp 的話,在旋轉的過程中會保持同樣的轉速,保持曲線旋轉的平滑性。
Quaternion Slerp(Quaternion a, Quaternion b, float t);

3. Quaternion.RotateTowards

  這個函式用於將一個四元數逐漸旋轉到另一個四元數,它接受三個參數:當前四元數、目標四元數、最大旋轉角度。最大旋轉角度指定了每次旋轉的最大幅度。通過調整最大旋轉角度,就可以控制旋轉速度和平滑度。
Quaternion RotateTowards(Quaternion from, Quaternion to, float maxDegreesDelta);

五、後記

  原本我式打算把兩種旋轉方式都弄出來,不過在 Lerp 上面我卡住非常久,直到一段時間後我觀看 Youtube 的影片才稍微了解。
為什麼會看到廣告
avatar-img
106會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
這篇文章將會講述設計模式中的狀態模式,其資料源自於書籍、網路、個人理解,從簡介→架構→撰寫→測試的整個流程進行介紹與分享。
這篇文章將會介紹建構式(Constructor),這是一個隱藏在程式腳本中的重要知識,我們極常使用建構式,但新手程式員幾乎不會知道它。
這篇文章將會講述 Unity Visual Effect Graph 的系統簡介,並且簡單介紹這項系統主線上的四個核心組件。
這篇文章將會講述子彈射擊與命中的思路,不包含實際程式設計。
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
這篇文章將會講述設計模式中的狀態模式,其資料源自於書籍、網路、個人理解,從簡介→架構→撰寫→測試的整個流程進行介紹與分享。
這篇文章將會介紹建構式(Constructor),這是一個隱藏在程式腳本中的重要知識,我們極常使用建構式,但新手程式員幾乎不會知道它。
這篇文章將會講述 Unity Visual Effect Graph 的系統簡介,並且簡單介紹這項系統主線上的四個核心組件。
這篇文章將會講述子彈射擊與命中的思路,不包含實際程式設計。
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在有刷馬達的轉子生產案例當中,一直有個讓筆者覺得有趣但又雞肋的設計,此舉會讓生產難度大幅度地提升,但三不五時就會出現,那就是斜槽轉子。 斜槽的設計是為了降低馬達頓轉轉矩的存在,雖然名為轉矩,但卻是個不受歡迎的存在;一般人較常接觸的場合僅在嘗試用手去轉動馬達時,在剛要轉動的瞬間,會有種卡卡的感覺,那
Thumbnail
首先是Y-Δ轉換口語的念法,筆者習慣稱為Y-Delte轉換,直接以英文發音為主;而它還有個中文名稱為星角轉換,也就是星形跟三角形轉換。 這是一份筆者常常使用的小工具,用來快速調整Y接或Δ接馬達設計變換時,線圈繞線條件的更改;但作為馬達設計者而言,是絕不需要考慮的Δ接設計方案。主要是Δ接會在馬達的三
使用向量來處理問題有很多好處,其中一個好處,就是可以減少變數的數量。在這節中,會用一個簡單的例子來介紹,使用向量跟不使用向量,對變數的數量會有什麼樣的影響。
Thumbnail
ThreeJS ArcballControl呼叫update方法後,視角被翻轉問題的解決記錄
Thumbnail
直觀理解 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率。 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少) 應用 導數:在物理學中應用廣泛,例如描述速度和加速度。 偏導數:在多變量分析、優
Thumbnail
上次我們完成用Unity 建完一張椅子,還有學習基本變數的應用,那我們就繼續寫更多的腳本來讓物體有更多的ㄅㄧㄢ #一般不會用Unity來建模啦,主要還是要靠其他3D軟體導入 ●Gravity Scale 重力預設為1,是造成物體下墜的主因,可以先調到0。 (Unity有支援負
Thumbnail
隨機不重疊的圓形 | p5.js 變化版,dist() 除了用來判斷兩個圓是否重疊,也可以拿來判斷滑鼠在哪個圓內。
Thumbnail
使用反三角函數鐘的反正切函數 math.atan2() 計算出兩個座標之間的角度。 實現方法 邊界的最大最小值,相減求得對邊,鄰邊由檢測ROI的寬或高,求得角度 定義旋轉方向性,由邊界最大最小值的座標位子得知,旋轉方向性 程式範例 利用圖中白色物體的上邊界兩個座標點位,算出物體旋轉角度。
Thumbnail
輪胎轉動是用spin還是rotate?繞圓環是用turn、circle還是cycle?芭蕾舞轉圈、轉陀螺、開車轉彎、轉方向盤、滑鼠的鼠標轉圈圈到底要用哪個英文字?circle和cycle哪裡不同?如果你被煩到暈了,這篇用超清楚的規則幫你一次搞定。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在有刷馬達的轉子生產案例當中,一直有個讓筆者覺得有趣但又雞肋的設計,此舉會讓生產難度大幅度地提升,但三不五時就會出現,那就是斜槽轉子。 斜槽的設計是為了降低馬達頓轉轉矩的存在,雖然名為轉矩,但卻是個不受歡迎的存在;一般人較常接觸的場合僅在嘗試用手去轉動馬達時,在剛要轉動的瞬間,會有種卡卡的感覺,那
Thumbnail
首先是Y-Δ轉換口語的念法,筆者習慣稱為Y-Delte轉換,直接以英文發音為主;而它還有個中文名稱為星角轉換,也就是星形跟三角形轉換。 這是一份筆者常常使用的小工具,用來快速調整Y接或Δ接馬達設計變換時,線圈繞線條件的更改;但作為馬達設計者而言,是絕不需要考慮的Δ接設計方案。主要是Δ接會在馬達的三
使用向量來處理問題有很多好處,其中一個好處,就是可以減少變數的數量。在這節中,會用一個簡單的例子來介紹,使用向量跟不使用向量,對變數的數量會有什麼樣的影響。
Thumbnail
ThreeJS ArcballControl呼叫update方法後,視角被翻轉問題的解決記錄
Thumbnail
直觀理解 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率。 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少) 應用 導數:在物理學中應用廣泛,例如描述速度和加速度。 偏導數:在多變量分析、優
Thumbnail
上次我們完成用Unity 建完一張椅子,還有學習基本變數的應用,那我們就繼續寫更多的腳本來讓物體有更多的ㄅㄧㄢ #一般不會用Unity來建模啦,主要還是要靠其他3D軟體導入 ●Gravity Scale 重力預設為1,是造成物體下墜的主因,可以先調到0。 (Unity有支援負
Thumbnail
隨機不重疊的圓形 | p5.js 變化版,dist() 除了用來判斷兩個圓是否重疊,也可以拿來判斷滑鼠在哪個圓內。
Thumbnail
使用反三角函數鐘的反正切函數 math.atan2() 計算出兩個座標之間的角度。 實現方法 邊界的最大最小值,相減求得對邊,鄰邊由檢測ROI的寬或高,求得角度 定義旋轉方向性,由邊界最大最小值的座標位子得知,旋轉方向性 程式範例 利用圖中白色物體的上邊界兩個座標點位,算出物體旋轉角度。
Thumbnail
輪胎轉動是用spin還是rotate?繞圓環是用turn、circle還是cycle?芭蕾舞轉圈、轉陀螺、開車轉彎、轉方向盤、滑鼠的鼠標轉圈圈到底要用哪個英文字?circle和cycle哪裡不同?如果你被煩到暈了,這篇用超清楚的規則幫你一次搞定。