在点之间来回移动 3d 对象
Posted
技术标签:
【中文标题】在点之间来回移动 3d 对象【英文标题】:Moving a 3d object back and forth between points 【发布时间】:2015-07-02 06:10:15 【问题描述】:我试图制作一个脚本,在两点之间来回移动一个对象。但它只是在无限中飞翔。我整个晚上都试图找出问题所在,但我不知道。 这是代码:
using UnityEngine;
public class MovementBetweenPoints : MonoBehaviour
public Transform[] keyPoints;
public float speed;
private int currentKeyPoint;
// Use this for initialization
void Start ()
transform.position = keyPoints[0].position;
currentKeyPoint = 1;
// Update is called once per frame
void Update ()
if (transform.position == keyPoints[currentKeyPoint].position)
currentKeyPoint++;
if (currentKeyPoint >= keyPoints.Length)
currentKeyPoint = 0;
transform.position = Vector3.MoveTowards(transform.position, keyPoints[currentKeyPoint].position, speed * Time.deltaTime);
【问题讨论】:
尝试使用Debug.Log
来查看它是否会成为您的keyPoints
之一。 currentKeyPoint
的值会改变吗?
它适用于我的统一,我只是将其插入,确保您在检查器中设置了变换和速度
不要使用相等运算符比较浮点数。使用范围或一些 eplison 值,因为取决于帧速率、速度等,transform.position 永远不会等于当前关键点。
@Heisenbug 这不完全正确,Vector3.MoveTowards
将说明这一点。根据文档,If the target is closer than maxDistanceDelta/ then the returned value will be equal to target
docs.unity3d.com/ScriptReference/Vector3.MoveTowards.html
但是是的,通常我会同意你的看法。
【参考方案1】:
您的脚本可以正常工作。您需要确保在检查器中将速度设置为大于 0 的值,并且关键点数组也包含检查器中的一些游戏对象,您可以开始了
【讨论】:
【参考方案2】:我确定问题出在这部分代码中,您可以在其中检查对象的位置在某个航点是否相等。而不是:
if (transform.position == keyPoints[currentKeyPoint].position)
currentKeyPoint++;
尝试做一些不那么激进的事情,并留出一点余地,例如:
if (Vector3.Distance(transform.position - keyPoints[currentKeyPoint].position) <= min_Distance)
currentKeyPoint++;
因为速度不同的两个物体几乎不可能在同一点匹配。取而代之的是,您将使用 min_Distance 来检查它。
【讨论】:
以上是关于在点之间来回移动 3d 对象的主要内容,如果未能解决你的问题,请参考以下文章
在 Flex 中,如何在 MXML 应用程序文件和 MXML 组件文件之间来回传递 var 对象
带有 Unity 3D 的 C#:当用户移动鼠标时,如何使相机围绕对象移动