unity3d 在Unity C#中,将对象向航点移动步数

mnemlml8  于 2023-03-09  发布在  C#
关注(0)|答案(2)|浏览(166)

所以我的目标是把一个对象移动一定的步数,到达一个统一的目的地。更具体地说,我想为一个对象设置一个移动的开始和终点。然后把这个距离除以一定的步数。然后当给用户一定的步数时,把这个步数移动到最终目的地。

  • 再给予一个例子,假设路径是从A到B,在两个地点之间移动100步。2然后当输入50时,向B移动50个地点并停留在那里。

我通过在团结中做路标来争取做到这一点,但我是团结的新手,所以我我有点卡住了。请帮助我:)

v9tzhpje

v9tzhpje1#

我不明白你的疑问,你已经回答了你自己的问题,引用了两个对象,让我们调用A和B,然后知道我们可以通过变换来访问这个位置,剩下的只是一些数学问题。

  • (B - A)=一条线,其长度等于A点和B点之间的距离,但其中心位于原点
  • (B - A)/ totalNumberOfSteps =因为上一条线代表我们的距离,让我们将其除以步数,以获得“一步”所代表的距离,但这条线仍以原点为中心,我们称之为C
  • C * currentNumberOfSteps =它应该行走的实际距离,我们称之为D,这个仍然以原点为中心
  • D + A =这将给予空间中的一个点,该点表示从A向B的N步
private Vector3 CalculateEndPoint (Vector3 a, Vector3 b)
      => ((b - a) / totalNumberOfSteps * currentStep) + a;

x3naxklr

x3naxklr2#

当然,有许多方法可以做到这一点,给定非常模糊的输入,这将是使用给定步长参数在startPointendPoint之间移动对象的通用动画例程

public static void MoveFromTo(this MonoBehaviour obj, Vector3 startPoint, Vector3 endPoint, float stepSize, int stepsToUse, float stepDuration)
{
    obj.StartCoroutine(MoveRoutine(obj.transform, startPoint, endPoint, stepSize, stepsToUse, stepDurarion)); 
}

private static IEnumerator MoveRoutine(Transform obj, Vector3 startPoint, Vector3 endPoint, float stepSize, int stepsToUse, float stepDuration)
{    
    obj.position = startPoint;

    for(var i = 0; i < stepsToUse; i++)
    {
        yield return new WaitForSeconds(stepDuration);

        obj.position = Vector3.MoveTowards(obj.position, endPoint, stepSize);  

        if(obj.position == endPoint) break;       
    }

    obj.position = endPoint;
}

地点

  • obj要移动的对象也将运行例程
  • startPoint开始位置
  • endPoint理论目标位置
  • stepSize每步移动的距离
  • stepsToUse最多使用多少步骤
  • stepDuration下一步骤之前的延迟(秒)

应用箝位,以便如果已经用小于给定的步骤达到endPoint,则不执行更多的步骤。

相关问题