【发布时间】:2018-11-19 03:22:34
【问题描述】:
我想让我的 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;
}
我猜调整加速度和减速度的值会使动画更流畅。
【问题讨论】: