目錄
- 前言
- 方法
- 后言
- 組件代碼
前言
在unity中,要讓一個物體變得讓人感到輕飄飄的,就可以給一個物體添加上浮動組件。今天我們就來實現它。
方法
我們先來看一下 sin ? \sin sin函數的曲線。
在這條曲線上,隨著 x x x向右移動, y y y也就能浮動著運動了,但是,由于內存限制, x x x會溢出,就會導致循環不連貫。于是我們就選取曲線的一段循環節,找到循環節的最小 x x x值和最大 x x x值。
我們得到了循環節的最小 x x x值是 ? π -\pi ?π,最大 x x x值是 π \pi π,還有一個規律,就是如果你把 x x x值乘 a a a,那么最小 x x x值和最大 x x x值分別是 ? π a -\frac{\pi}{a} ?aπ?和 π a \frac{\pi}{a} aπ?。
至于高度的問題,只需要 sin ? \sin sin函數的結果乘以最大高度而可。最終公式應該就是這樣子: y = h sin ? a x y=h\sin ax y=hsinax
由此,現在打開unity,即可寫浮動組件。
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;public class Float : MonoBehaviour
{public float speed = 1;public float high = 1;private float x;public float ox;//用于設定物體浮動時的x軸public float oy;//用于設定物體浮動時的y軸public float oz;//用于設定物體浮動時的z軸void Start(){x = -3.14f / speed;ox = transform.position.x;oy = transform.position.y;oz = transform.position.z;}void Update(){transform.position = new Vector3(ox, oy + Mathf.Sin(x * speed) * high, oz);x += 0.01f;if (x > 3.14f / speed){x = -3.14f / speed;}}
}
之后,可以開始去看看效果了。
后言
在夢日記及其派生之中,需要用到循環地圖,這時,浮動組件雖然有用,遠不及循環地圖組件有用,下篇博客中,我們就實現這個循環地圖組件。