【发布时间】:2020-04-03 07:03:55
【问题描述】:
我正在创建一个电梯,它不断地从 A 点移动到 B 点。
我不能只使用transform.position ( location here * speed here etc),因为我有一个有Rigidbody 的播放器,如果使用它,每当我在电梯上时,它都会让我的播放器闪烁。我还尝试在播放器在电梯上时对其进行父级(并在它跳跃时取消父级等),这修复了闪烁,但它在某种程度上破坏了播放器的跳跃机制。
最后的手段是使用Rigidbody 到我的电梯并使用以下代码移动它:
private void FixedUpdate()
{
Vector2 l_mypos = new Vector2(transform.position.x, transform.position.y);
Vector2 l_target = new Vector2(_targetPoint.position.x, _targetPoint.position.y);
if (l_mypos != l_target)
{
MoveElevator(l_target);
Debug.Log(l_mypos + " - " + l_target);
}
else
Debug.Log("reached");
}
private void MoveElevator(Vector2 toTarget)
{
Vector2 direction = (toTarget - (Vector2)transform.position).normalized;
_elevatorRB.MovePosition((Vector2)transform.position + direction * _speed * Time.deltaTime);
}
这会将电梯移向给定的方向,但它没有达到“到达”状态。我在那里放置了一个 debug.log 以查看 mpos 和 target 以查看差异。它以0, 10, 0 - 0, 10, 0 结尾,这意味着我的目标和电梯的位置已经相同。但是没有达到else条件,电梯一直在B点闪烁。
【问题讨论】:
标签: unity3d physics rigid-bodies