c# - 如何循环 MoveTowards?
问题描述
在迷你游戏中,我在 Unity 中进行的工作我想循环往复。我想移动对象并回到第一个位置,但不仅仅是 1 次。现在我有了这段代码,它可以让我“移动到位置并返回系统”。如何更改此代码以使循环移动?
public class TestMovement : MonoBehaviour
{
public float speed = 3;
public Vector3 target = Vector3.zero;
private Vector3 origin;
void Start(){
origin = transform.position;
}
void Update(){
TestTransform ();
}
void TestTransform (){
transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime);
if (transform.position == target) target = origin;
}
}
解决方案
TestTransform 是从 Update 中调用的,这意味着它每帧调用一次。因此,您基本上已经处于一个循环中(只要您的游戏正在运行,就是一个无限循环)。让我们看看您现有的代码和您想要的结果:您现有的代码立即开始向目标移动。到达目标后,它将目标切换回原点,并开始向新目标移动。
您的代码在第一次通过时将“目标”更改为原点。之后,一旦它返回到新的“目标”(现在是“原点”),它就会坐在那里,测试 transform.position == 目标,并在每一帧上一遍又一遍地设置目标 = 原点。
如果您希望对象在原点和目标之间来回反弹,则需要进行一些更改:
- 您需要第三个 Vector3(我们称之为“currentTarget”)。
- 开始时,设置 currentTarget = target。
- 在 TestTransform 中,更改您要测试的位置并将“目标”更改为对“当前目标”进行操作。更改它时,您需要考虑 currentTarget 是否设置为 target 或 origin,然后选择另一个作为您的下一个目标。
最终结果应该是“currentTarget”在“target”和“origin”之间来回变化。
旁注:正如其他人在评论中提到的那样,测试向量的精确相等性并不总是有效 - 您应该检查向量之间的距离并等待它小于某个非常小的值。
推荐阅读
- java - Maven - pom.xml 中未指定的依赖项的“无法读取工件描述符”
- bash - 用于定位/查找文件名存储在变量中的文件的 Linux 命令
- pytorch - 我们如何在 PyTorch 中使 nn.linear() 和 nn.Conv2d() 的输入形状相同?
- laravel - pragmarx/countries-laravel 在托管时不起作用
- python - Seaborn PairPlot 绘制每个单独条目的矩阵误差
- xml - 从每个 csv 行中提取特定的单元格内容到 awk 中的文件
- apache-kafka - Zookeeper zNode 通过 Kerberos 访问
- pandas - Pandas-根据前一行值的总和创建列
- c - 如何阅读/理解 bpf 内核验证程序分析以调试错误?
- image - JPEGSetupEncode:RowsPerStrip 必须是 8 的倍数,因为使用枕头保存 tif 时出现 JPEG 错误