波を実装したいことがあったので、LineRenderer
と Mathf.Sin を利用して波の動きを作ってみる
波をずらすために、現在の座標に応じた値を加算している
private void Update() { _offset += Time.deltaTime; for (var i = 0; i < Divide; i++) { var pos = _lineRenderer.GetPosition(i); var value = pos.y + _offset + i / (float)Divide; pos.x = Mathf.Sin(Mathf.PI * 2 * value); _lineRenderer.SetPosition(i, pos); } }
最終的な波がこちら、パラメータを追加して周期や幅などを調整できる
コード
using UnityEngine; public class SampleMonoBehaviour : MonoBehaviour { [SerializeField] private LineRenderer _lineRenderer; /// <summary> /// 波の周期 /// </summary> [SerializeField] private float _period = 1f; /// <summary> /// 波の幅 /// </summary> [SerializeField] private float _width = 1f; /// <summary> /// 波の周期ずらし /// </summary> private float _offset; /// <summary> /// LineRenderer の分割数 /// </summary> private const int Divide = 100; private void Start() { // LineRenderer を分割 _lineRenderer.positionCount = Divide; for (var i = 0; i < Divide; i++) _lineRenderer.SetPosition(i, Vector3.up * i); } private void Update() { _offset += Time.deltaTime; for (var i = 0; i < Divide; i++) { var pos = _lineRenderer.GetPosition(i); var value = pos.y + _offset + i / (float)Divide * _period; pos.x = Mathf.Sin(Mathf.PI * 2 * value) * _width; _lineRenderer.SetPosition(i, pos); } } }