所以我的目标是把一个对象移动一定的步数,到达一个统一的目的地。更具体地说,我想为一个对象设置一个移动的开始和终点。然后把这个距离除以一定的步数。然后当给用户一定的步数时,把这个步数移动到最终目的地。
我通过在团结中做路标来争取做到这一点,但我是团结的新手,所以我我有点卡住了。请帮助我:)
v9tzhpje1#
我不明白你的疑问,你已经回答了你自己的问题,引用了两个对象,让我们调用A和B,然后知道我们可以通过变换来访问这个位置,剩下的只是一些数学问题。
private Vector3 CalculateEndPoint (Vector3 a, Vector3 b) => ((b - a) / totalNumberOfSteps * currentStep) + a;
x3naxklr2#
当然,有许多方法可以做到这一点,给定非常模糊的输入,这将是使用给定步长参数在startPoint和endPoint之间移动对象的通用动画例程
startPoint
endPoint
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
stepSize
stepsToUse
stepDuration
应用箝位,以便如果已经用小于给定的步骤达到endPoint,则不执行更多的步骤。
2条答案
按热度按时间v9tzhpje1#
我不明白你的疑问,你已经回答了你自己的问题,引用了两个对象,让我们调用A和B,然后知道我们可以通过变换来访问这个位置,剩下的只是一些数学问题。
x3naxklr2#
当然,有许多方法可以做到这一点,给定非常模糊的输入,这将是使用给定步长参数在
startPoint
和endPoint
之间移动对象的通用动画例程地点
obj
要移动的对象也将运行例程startPoint
开始位置endPoint
理论目标位置stepSize
每步移动的距离stepsToUse
最多使用多少步骤stepDuration
下一步骤之前的延迟(秒)应用箝位,以便如果已经用小于给定的步骤达到
endPoint
,则不执行更多的步骤。