Mathf
Mathf.MoveTowards(float current, float target, float maxDelta)
current | 現在の値 |
target | 移動先となる値 |
maxDelta | 値に適用される最大の変更 |
等速で動きます。
[SerializeField] private Transform targetObj; [SerializeField] private Transform destination; private bool isMove; private float speed = 1f; void Update() { if (Input.GetMouseButtonDown(0)) { isMove = true; } if (isMove) { Vector3 curPos = targetObj.position; curPos.x = Mathf.MoveTowards(curPos.x, destination.position.x, Time.deltaTime * speed); targetObj.position = curPos; } }
Mathf.Lerp(float a, float b, float t)
a | 開始値 |
b | 終了値 |
t | 2つのfloatの補間値 |
徐々に早くなり、徐々に遅くなるといった動きができます。
[SerializeField] private Transform targetObj; [SerializeField] private Transform destination; private bool isMove; private float speed = 1f; void Update() { if (Input.GetMouseButtonDown(0)) { isMove = true; } if (isMove) { Vector3 curPos = targetObj.position; curPos.x = Mathf.Lerp(curPos.x, destination.position.x, Time.deltaTime * speed); targetObj.position = curPos; } }
Mathf.SmoothStep(float from, float to, float t)
from | 初期値 |
to | 目的の値 |
t | 目的地点(0~1の値。0.5なら真ん中) |
[SerializeField] private Transform target; private bool isMove; private float t; void Update() { if (Input.GetMouseButtonDown(0)) { isMove = true; } if (isMove) { t += Time.deltaTime; } Vector3 pos = target.position; pos.x = Mathf.SmoothStep(-3f, 3f, t); target.position = pos; }
Mathf.SmoothDamp(float current, float target, float currentVelocity, float smoothTime)
current | 移動元 |
target | 移動先 |
currentVelocity | 現在の速度が格納される |
smoothTime | 移動先へ到達するおおよその時間 |
[SerializeField] private Transform targetObj; private bool isMove; private float currentVelocity; void Update() { if (Input.GetMouseButtonDown(0)) { isMove = true; } Vector3 pos = targetObj.position; float current = pos.x; float target = 3f; float smoothTime = 1f; if (isMove) { pos.x = Mathf.SmoothDamp(pos.x, target, ref currentVelocity, smoothTime); targetObj.position = pos; } Debug.Log("現在の速度:" + currentVelocity);
Vector3
Vector3.MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta)
current | 現在位置 |
target | 目的地 |
maxDistanceDelta | 進む距離 |
[SerializeField] private Transform targetObj; [SerializeField] private Transform destination; private bool isMove; private float speed = 1f; void Update() { if (Input.GetMouseButtonDown(0)) { isMove = true; } if (isMove) { targetObj.position = Vector3.MoveTowards(targetObj.position, destination.position, Time.deltaTime * speed); } }
Vector3.Lerp(Vector3 a, Vector3 b, float t)
a | 現在地 |
b | 目標値 |
t | 2点間の距離を1とした場合の値 |
[SerializeField] private Transform targetObj; [SerializeField] private Transform destination; private bool isMove; private float speed = 1f; void Update() { if (Input.GetMouseButtonDown(0)) { isMove = true; } if (isMove) { targetObj.position = Vector3.Lerp(targetObj.position, destination.position, Time.deltaTime * speed); } }
コメント