Unity C# | 旋轉(Rotate)#1-常見的座標旋轉方式

更新 發佈閱讀 6 分鐘

一、前言

  這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。

二、座標旋轉

  旋轉是許多遊戲都必定使用的功能,但是它是一個非常複雜的系統,除了旋轉從三維座標改為四維的四元數以外,座標計算與旋轉方式組合出多種狀態,直接轉動與平滑移動的不同,導致成為許多人的夢魘。

1. 默認旋轉方向

  首先,我們談談旋轉這件事情,從最基礎的部分開始講起,當我們以某個軸向為基準旋轉90度,那物體會依據某個軸向順時鐘旋轉,如果要逆時鐘旋轉就必須要旋轉負90度,或軸向基準改為負軸向。

2. 直接完成目標

  如果希望讓物件旋轉90度,程式碼也很直接的撰寫成:執行後物體會旋轉90度,那當執行程式後,物體會直接完成目標,不會有中間的旋轉過程,無論是哪一種旋轉方式皆是如此。

3. 平滑移動的方法

  如果希望達成平滑的旋轉,有幾種方式可以達成目標:第一種方式是運用插值(Lerp)的方式去改變物件座標,物體會平滑的移動過去;第二種方式是運用逐格旋轉的方式,讓它逐步轉過去;第三種方法是運用非同步程式碼撰寫,每隔幾毫秒轉動一次,會比第二種方法更注重時間的精確。

三、常用的座標旋轉方法

  這篇文章將會講述普通的座標系統旋轉,因為 Unity 有為四元數設計幾套有用的函式,讓我們可以忽略四元數的複雜,因此不包含四元數的介紹、插值的使用等等,僅介紹常見的旋轉函式。

1. Transform.Rotate()

  這是最基礎與最常用的旋轉方式,其中所有的 Space 都可以省略,系統會默認 Space.Self,總共有以下三種:

transform.Rotate(Vector3 eulerAngles, Space);

  在函式的參數中,只需要輸入一個 Vector3,就會依據上面的XYZ值開始旋轉,假設X=1,那每次執行函式,這個 Vector3 的X就會 +1。

Rotate(float x , float y, float z, Space)

  在函式的參數中,需要輸入三次浮點數(float)代表XYZ,當我們輸入參數,就會依據上面的XYZ值開始旋轉,假設X=1,那每次執行函式,這個 Vector3 的X就會 +1。

Rotate(Vector3 axis, float angle, Space)

  在函數的參數中,第一個座標代表轉軸,例如輸入 vector.up,後面則可以旋轉角度,例如5度,當我們輸入上述這兩者,代表函式每執行一次,這個物件就會以Y軸為軸心,旋轉5度。

2. Transform.RotateAround

  這是以某個點為圓心,繞著它旋轉,相當於星球的周轉,其需要一個點座標作為圓心,一個旋轉的軸向,一個旋轉的角度。

RotateAround(Vector3 point, Vector3 axis, float angle)

  在這個函式中,我們可以輸入一個點座標、軸向、角度,這樣物件就會以點座標為中心,以某個軸向為基準,每次執行都轉動一次度數。

RotateAround(Vector3 point, Vector3 axis, float angle, Space)

  在這個函式中,多出了一個旋轉空間,可以讓這個旋轉的座標屬於世界座標或當地座標,。

RotateAround(Transform target, Vector3 axis, float angle)

  在這個函式中,則可以抓取一個座標系統,我推測這個會比較適合移動型的座標,可以比較節省資源。

3. Transform.LookAt

  這個函式都很簡單,就是面對某個座標點,不過這個座標對象可以是一個座標系統,也能是一個世界座標,其中WorldUp是在面對後進行微調,屬於非必須的選擇。

LookAt(Transform target, [Vector3 worldUp])

  在這個函式中,座標是一個當地座標系統,該物件會面向這個目標。

LookAt(Vector3 worldPosition, [Vector3 worldUp])

  在這個函式中,座標是一個世界座標,該物件會面向這個目標。

LookAt(Transform target, Vector3 worldUp, bool isLocal)

  在這個函式中,跟第一個函式一樣,不過 WorldUp 參數為必填,並且會需要註記是否為當地座標。

四、物理旋轉與座標旋轉

  大多數時候,遊戲僅需要使用座標旋轉,物理旋轉的效能消耗更多,許多功能也不需要物理效果,有一個比較容易理解的方式,如果遊戲很注重遊戲碰撞後的物理效果模擬,則使用物理旋轉較為合適。

1. 運用座標系統旋轉

  似乎大多數的遊戲,雖然有使用物理系統,不過這些遊戲的旋轉依然使用座標系統,這可能是因為旋轉相對於移動來說較為簡單,不會有太複雜的資訊或注意事項。

2. 物理系統的矩陣

  因此可以推測,如果要使用物理系統來旋轉,則可能用於模擬器或需要更擬真的物理系統,連旋轉都要使用物理系統的旋轉。

3. 物理與座標的差異

  他們之間最大的差異,在於受到外力影響受的改變,如果是正在運作的座標系統,受到外力後不會改變,物理系統則是擁有更複雜的計算,因此能邊進行旋轉邊受力。

五、後記

  原本我打算用一篇文章結束旋轉的部份,結果從早上測試到晚上,了解到了許多旋轉的知識,從三維座標到四元數、單次執行與每帧執行、平滑旋轉直接旋轉,甚至旋轉的軸向、座標空間都會影響,旋轉真是複雜阿。

留言
avatar-img
瓶裝雪的沙龍
117會員
247內容數
你好,我是瓶裝雪!我是一名遊戲設計師!
瓶裝雪的沙龍的其他內容
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/01/26
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
2024/01/26
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
這篇文章將會講述座標(Transform)與剛體(Rigidbody)在移動上的優點與缺點,並且迪出我的經驗與看法。
Thumbnail
這篇文章將會講述座標(Transform)與剛體(Rigidbody)在移動上的優點與缺點,並且迪出我的經驗與看法。
Thumbnail
這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。
Thumbnail
這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。
Thumbnail
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
Thumbnail
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 變數 宣告變數不能使用數字開頭,或是除了_之外的符號。 ·整數 int ·浮點數 float、double float 精度低、佔的資源較少,double
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 變數 宣告變數不能使用數字開頭,或是除了_之外的符號。 ·整數 int ·浮點數 float、double float 精度低、佔的資源較少,double
Thumbnail
構成L-system的,是一串由符號所構成的字串。這字串裡頭的符號,可以是字母或者是任何喜歡的鬼畫符,想要用emoji也可以,只要你喜歡,沒什麼不可以。
Thumbnail
構成L-system的,是一串由符號所構成的字串。這字串裡頭的符號,可以是字母或者是任何喜歡的鬼畫符,想要用emoji也可以,只要你喜歡,沒什麼不可以。
Thumbnail
這篇文章將會講述圓形波的設計思路、製作流程和應用方向。
Thumbnail
這篇文章將會講述圓形波的設計思路、製作流程和應用方向。
Thumbnail
這篇文章將會講述在Unity中跟角度有關的兩項變數有什麼樣的地位和運作方式,我們只要撰寫跟角色角度有關的程式碼,就絕對不會繞開這兩個變數。
Thumbnail
這篇文章將會講述在Unity中跟角度有關的兩項變數有什麼樣的地位和運作方式,我們只要撰寫跟角色角度有關的程式碼,就絕對不會繞開這兩個變數。
Thumbnail
本文使用LibreCAD繪製太極圖,採用較為傳統的方式,運用指令來給定值;對筆者來說,是個正統但效率較差的繪圖技巧。 筆者在學生時期,曾經因繪圖速度太快,被老師抓到,筆者採用非正規繪圖技巧,因此會分兩章節,來看看這種繪圖技巧的差異。
Thumbnail
本文使用LibreCAD繪製太極圖,採用較為傳統的方式,運用指令來給定值;對筆者來說,是個正統但效率較差的繪圖技巧。 筆者在學生時期,曾經因繪圖速度太快,被老師抓到,筆者採用非正規繪圖技巧,因此會分兩章節,來看看這種繪圖技巧的差異。
Thumbnail
這篇文章為介紹C#基礎知識的一部分,如果你是直接開始寫程式的C#程式員,可以看看這篇文章補足一些基礎知識。
Thumbnail
這篇文章為介紹C#基礎知識的一部分,如果你是直接開始寫程式的C#程式員,可以看看這篇文章補足一些基礎知識。
Thumbnail
這是上Krenz老師的透視課第三堂筆記。 這堂課的重點是「旋轉」。
Thumbnail
這是上Krenz老師的透視課第三堂筆記。 這堂課的重點是「旋轉」。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News