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

閱讀時間約 5 分鐘

一、前言

  這篇文章將會講述常見的座標(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. 物理與座標的差異

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

五、後記

  原本我打算用一篇文章結束旋轉的部份,結果從早上測試到晚上,了解到了許多旋轉的知識,從三維座標到四元數、單次執行與每帧執行、平滑旋轉直接旋轉,甚至旋轉的軸向、座標空間都會影響,旋轉真是複雜阿。
為什麼會看到廣告
103會員
246Content count
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章將會講述設計模式中的狀態模式,其資料源自於書籍、網路、個人理解,從簡介→架構→撰寫→測試的整個流程進行介紹與分享。
這篇文章將會介紹建構式(Constructor),這是一個隱藏在程式腳本中的重要知識,我們極常使用建構式,但新手程式員幾乎不會知道它。
這篇文章將會講述 Unity Visual Effect Graph 的系統簡介,並且簡單介紹這項系統主線上的四個核心組件。
這篇文章將會講述子彈射擊與命中的思路,不包含實際程式設計。
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
這篇文章將會講述最近的一個程式設計體悟,並且分享近期要參加的獨立遊戲製作者聚會,會展示課程的其中一個作品。
這篇文章將會講述設計模式中的狀態模式,其資料源自於書籍、網路、個人理解,從簡介→架構→撰寫→測試的整個流程進行介紹與分享。
這篇文章將會介紹建構式(Constructor),這是一個隱藏在程式腳本中的重要知識,我們極常使用建構式,但新手程式員幾乎不會知道它。
這篇文章將會講述 Unity Visual Effect Graph 的系統簡介,並且簡單介紹這項系統主線上的四個核心組件。
這篇文章將會講述子彈射擊與命中的思路,不包含實際程式設計。
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
這篇文章將會講述最近的一個程式設計體悟,並且分享近期要參加的獨立遊戲製作者聚會,會展示課程的其中一個作品。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 變數 宣告變數不能使用數字開頭,或是除了_之外的符號。 ·整數 int ·浮點數 float、double float 精度低、佔的資源較少,double
Thumbnail
如何使用Game CI 提供的Github Action 將建置專案自動化
Thumbnail
Unity (美股代號:U) 是全球最大的遊戲製作平台與龍頭引擎。不過股價自高點滑落並盤據20-30元已經有一段時間。此次財報非常樂觀,值得一看。
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Unity在這週公布了2022年Q1的財報,財報發布後股價下挫30%,下跌至30美元,已經遠遠跌破兩年前的上市價。Unity雪崩式的下跌是因為Q1的營運不理想、未來的營運預期不理想、還是單純是隨著近期成長股估值修正而下跌呢?這篇文會分析Unity 2022Q1財報及預測Unity未來的營運狀況。
Thumbnail
來談一下最近我很感興趣的一個投標,遊戲開發平台 Unity。
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 變數 宣告變數不能使用數字開頭,或是除了_之外的符號。 ·整數 int ·浮點數 float、double float 精度低、佔的資源較少,double
Thumbnail
如何使用Game CI 提供的Github Action 將建置專案自動化
Thumbnail
Unity (美股代號:U) 是全球最大的遊戲製作平台與龍頭引擎。不過股價自高點滑落並盤據20-30元已經有一段時間。此次財報非常樂觀,值得一看。
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Unity在這週公布了2022年Q1的財報,財報發布後股價下挫30%,下跌至30美元,已經遠遠跌破兩年前的上市價。Unity雪崩式的下跌是因為Q1的營運不理想、未來的營運預期不理想、還是單純是隨著近期成長股估值修正而下跌呢?這篇文會分析Unity 2022Q1財報及預測Unity未來的營運狀況。
Thumbnail
來談一下最近我很感興趣的一個投標,遊戲開發平台 Unity。