Я хочу, чтобы мой объект Rigidbody скользил вправо или влево.
Например, если он в 0 X, он будет скользить 1 в направлении, затем остановится в этом направлении и остановится.
Добавляя силу, объект продолжает двигаться в этом направлении, я хочу, чтобы объект переместился, а затем остановился.
Редактировать
Это то, что я пробовал
void Update() {
if (Input.GetKeyDown("d") && !isMoving) {
StartCoroutine(MoveToPos(Vector3.right));
}
if (Input.GetKeyDown("a") && !isMoving) {
StartCoroutine(MoveToPos(Vector3.left));
}
}
public IEnumerator MoveToPos(Vector3 direction) {
isMoving = true;
var t = 0f;
var startPosition = transform.position;
var value = direction == Vector3.right? 1 : -1;
while (t < 1f) {
t += 0.05f;
var endPosition = transform.position;
endPosition.x = startPosition.x + value * t;
transform.position = Vector3.Lerp(transform.position, endPosition, t);
Debug.Log(player.position);
yield return null;
}
isMoving = false;
}
Но, к сожалению, анимация очень уродливая, объект через некоторое время возвращается в конечное положение, не похоже, что объект скользит, а затем останавливается там. Как будто нет ускорения и замедления.
Редактировать 2
Я пытался настроить значения и сделать замедление движения. Вроде работал, но я думаю, что это все еще нуждается в улучшении.
public IEnumerator MoveToPos(Vector3 direction) {
isMoving = true;
var t = 0.0;
var startPosition = transform.position;
var value = direction == Vector3.right ? 1 : -1;
while (t < 1) {
if (t < 0.5) t += 0.1;
else t += 0.03125;
Debug.Log(t);
var endPosition = transform.position;
endPosition.x = startPosition.x + value * (float)t;
transform.position = Vector3.Lerp(transform.position, endPosition, (float)t);
yield return null;
}
isMoving = false;
}
Я предполагаю, что настройка значений ускорения и замедления сделает анимацию более плавной.