Unity Lerp 實作講解

更新 發佈閱讀 5 分鐘


這篇文章主要講的是如何利用 Lerp(換成 Slerp 也能運行) 來實現移動。其實有另一個更快捷的方式直接用一些 Tween 插件,例如:LeanTween,DoTween⋯⋯。

利用 Lerp 實現移動可以分成兩大種 Update 和 IEnumerator 方案。

Update()

void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
moving = true;
}

if (moving)
{
transform.position = Vector3.Slerp(transform.position, position, speed * Time.deltaTime);

if (Vector3.Distance(transform.position, position) < 0.001)
{
moving = false;
}
}
}

IEnumerator

public IEnumerator move()
{
float currentSpeed = speed;
while (Vector3.Distance(transform.position, position) > 0.1)
{
transform.position = Vector3.Slerp(transform.position, position, currentSpeed * Time.deltaTime);
currentSpeed += acceleration;

yield return new WaitForSeconds(Time.deltaTime);
}
}

設定速度和加速度

raw-image

IEnumerator MovementWithSpeed()
{
float currentSpeed = speed;
while (Vector3.Distance(transform.position, position) > 0.1)
{
transform.position = Vector3.Lerp(transform.position, position, currentSpeed * Time.deltaTime);
currentSpeed += acceleration;

yield return new WaitForSeconds(Time.deltaTime);
}
}

設定移動時間

raw-image

IEnumerator MovementWithTime()
{
float currentT = Vector3.Distance(transform.position, position) / time * Time.deltaTime;
while (Vector3.Distance(transform.position, position) > 0.1)
{
transform.position = Vector3.Lerp(transform.position, position, currentT);

yield return new WaitForSeconds(Time.deltaTime);
}
}

延伸閱讀

Slerp vs Lerp: https://www.faustofonseca.com/tutorial/unity-vector3-lerp-vs-vector3-slerp

留言
avatar-img
留言分享你的想法!
avatar-img
夏葉
0會員
7內容數
這裏分享我遊戲開發的記錄,亦會分享開發的小技巧。
夏葉的其他內容
2024/11/27
緣由 生成一個格子是一件十分之簡單的事,但我不知道為甚麼每一次重新寫的時候,都會忘記如何寫。所以我在這裏記錄一下。 代碼 public float num; public GameObject currentGameObject; void Update() { if(Input.G
2024/11/27
緣由 生成一個格子是一件十分之簡單的事,但我不知道為甚麼每一次重新寫的時候,都會忘記如何寫。所以我在這裏記錄一下。 代碼 public float num; public GameObject currentGameObject; void Update() { if(Input.G
2023/11/26
從個連結中下載這個資料夾 https://github.com/h8man/NavMeshPlus 打開剛下載的資料夾,然後將一個名 NavMeshComponents 的資料夾放入你的 Unity 中。 創建一個 Square,作為平面,新增一個名為 Navigation Modifier 的
Thumbnail
2023/11/26
從個連結中下載這個資料夾 https://github.com/h8man/NavMeshPlus 打開剛下載的資料夾,然後將一個名 NavMeshComponents 的資料夾放入你的 Unity 中。 創建一個 Square,作為平面,新增一個名為 Navigation Modifier 的
Thumbnail
2023/11/19
Text Mesh Pro 是 Unity 內自置的 UI 文字系統。如果你已經用了 Unity 很多年的人會好奇,它和 Text 有甚麼的分別。總括來講 Text Mesh Pro 更加的靈活和可以做更多不同的變化。 Sprite Asset Sprite Asset 以簡單來說是 emoji
Thumbnail
2023/11/19
Text Mesh Pro 是 Unity 內自置的 UI 文字系統。如果你已經用了 Unity 很多年的人會好奇,它和 Text 有甚麼的分別。總括來講 Text Mesh Pro 更加的靈活和可以做更多不同的變化。 Sprite Asset Sprite Asset 以簡單來說是 emoji
Thumbnail
看更多
你可能也想看
Thumbnail
這篇內容,將會講解什麼是「do until」,以及與「do until」相關的知識。包括do until的簡介、break、continue。
Thumbnail
這篇內容,將會講解什麼是「do until」,以及與「do until」相關的知識。包括do until的簡介、break、continue。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
這篇教學專注在使用 Renpy 讓選項在選擇後消失和一個一個出現的功能上。透過建立變量和修改選項,讓玩家在選擇後影響後續劇情發展。教學將提供範例代碼和具體步驟,讓讀者能夠輕鬆上手。
Thumbnail
這篇教學專注在使用 Renpy 讓選項在選擇後消失和一個一個出現的功能上。透過建立變量和修改選項,讓玩家在選擇後影響後續劇情發展。教學將提供範例代碼和具體步驟,讓讀者能夠輕鬆上手。
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
Swiper.js 是一個功能齊全的輪播套件,除了輪播外,也可以客製化導航按鈕和頁碼等細項。目前支持 JS、React、Vue。但是 Swiper.js Vue 版本主要由 Composition API 風格構成,此篇文章將介紹 Options API 的撰寫方式,以及如何做樣式客製化。
Thumbnail
Swiper.js 是一個功能齊全的輪播套件,除了輪播外,也可以客製化導航按鈕和頁碼等細項。目前支持 JS、React、Vue。但是 Swiper.js Vue 版本主要由 Composition API 風格構成,此篇文章將介紹 Options API 的撰寫方式,以及如何做樣式客製化。
Thumbnail
新版Input System 要先來調整設定: (如果日後發現移動不了,可能是這邊有出問題,可以把這邊視為一個檢查點) 下載Input System 在script中的寫法: (這邊的功能是讀取移動的值而已,主要目的是讓unity讀到movement,絕對不是托篇幅的拉🥺) using
Thumbnail
新版Input System 要先來調整設定: (如果日後發現移動不了,可能是這邊有出問題,可以把這邊視為一個檢查點) 下載Input System 在script中的寫法: (這邊的功能是讀取移動的值而已,主要目的是讓unity讀到movement,絕對不是托篇幅的拉🥺) using
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News