c# - 在循环中的 3 个点之间移动球体游戏对象
问题描述
我正在定义三个游戏对象点,其中一个球体游戏对象应该在一个循环中从一个位置移动到另一个位置,例如 1-2-3-1-2-3 ....(如三角形)。我能够实现具有Vector3.MoveTowards()
功能的运动,但它只需要 2 分。有没有办法通过多个点实现相同的目标?(至少3个或更多)
public class SlideBetweenPoints : MonoBehaviour
{
public Transform pointA, pointB, pointC;
public float speed;
void Update ()
{
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(pointA.position , pointB.position , step);
}
}
解决方案
是的,只需朝着一个点移动,当你到达它时,就转到下一个点。
请注意,目前您总是从 重新开始pointA
。为了不断向目标位置移动,您必须使用
transform.position = Vector3.MoveTowards(transform.position, targetPosition, step);
我宁愿使用更通用的列表,例如
public class SlideBetweenPoints : MonoBehaviour
{
public List<Transform> points;
public float speed;
private int index;
void Update ()
{
transform.position = Vector3.MoveTowards(transform.position, points[index].position, speed * Time.deltaTime);
if(transform.position == points[index].position)
{
// increase index with wrap around
index = (index + 1) % points.Count;
}
}
}
wheretransform.position == points[index]
使用精确的1e-5
for 相等。如果你真的需要它,你还可以检查精确匹配的位置:
if(Mathf.Approximately(0, (transform.position- points[index].position).sqrMagnitude))
{
index = (index + 1) % points.Count;
}
推荐阅读
- wordpress - WooCommerce 显示管理员详细信息
- python - tf.ExponentialMovingAverage 的结果与预期不符
- itk - 使用 itk 将 3D 二值图像转换为 3D 网格
- r - 按变量的连续运行对数据进行分组
- cordova - Hammer.js 滑动不适用于 Cordova InAppBrowser
- r - 基于线斜率的线颜色
- azure-cognitive-search - 使用 Lucene 查询语法的 Azure 搜索返回不正确的结果
- vba - 438 对象不支持此属性或方法 vba
- javascript - 如何通过承诺链传递变量
- python - 在 For 循环中从 Windows 批处理文件中的数组访问项目