因為剛好在弄一些平滑化的東西
所以順手上來分享一個簡單的平滑曲線 Sin 曲線 的小應用囉~
數學真的是很妙又很美的東西阿,雖然我也不喜歡那些密密麻麻的恐怖運算
Sin 曲線是一條伏流於 -1 ~ 1 的平滑曲線
循環於弧度的 0 ~ 2 * PI 之間
應用這個原理我們可以抓出其中的 0 ~ 1 的部分,也就是 0 ~ PI 之間
ps. Sin( 0 ) = 0 , Sin( PI / 2 ) = 1 , Sin( PI ) = 0
所以單純要 0 ~ 1 得要取 0 ~ PI / 2 唷
另外在程式上,乘法比除法快很多,所以沒必要的話就多使用乘法來運算吧~
ex : PI / 2 = PI * 0.5f
然後利用這個部份去做一些平滑的運算
例如 加速,減速,平滑來回 之類的動態模擬
簡單的用法如下
假設我要取一個 0.4 ~ 1.0 中間,隨著時間連動的連續平滑值,可以這麼做
float nValue = 0.6f * Mathf.Sin(Mathf.PingPong(Time.time * 2.0f, Mathf.PI)) + 0.4f;
畢竟是 Unity,我也就偷懶用一些 Unity 的東西囉
PingPong 的效果是將第一個參數的值,換算後來回介於 0 ~ 第二個參數之間
因為超過 PI 就會變負的,所以我將 Unity 提供的時間數值規範在 0 ~ PI 之間
再將這個值丟給 Sin ,就能得到一條平滑 0 ~ 1 之間的曲線
然後因為我想將得出的數值規範在 0.4 ~ 1.0 之間
所以再加上一點小手續就完成囉~
而如果不想規範在 0 ~ 1 之間,而是要 -1 ~ 1 之間的話
直接像下面這樣把 time 丟進去就可以囉
float nValue = 0.6f * Mathf.Sin(Time.time) + 0.4f;
我是應用在 Alpha 變化上,以及一些需要平滑運動的場景變換上
跟大家分享囉~
Unity 基本上都有在很多地方提供這類的功能
但在一些熱愛數學的因子下,還有實在懶的挖那些功能,所以就自己玩數學囉~