由于某种原因,我的对象从不翻译正确的数量。这是为什么?我试过使用其他功能,但是它们与以下功能的动画方式不同。因此,我该如何设置它,使其在原先的位置以下精确地平移200个像素。
更新: 由于尚未找到解决方案,因此我将提供有关该问题的更深入的说明。
我有6个UIImage,所有这些均附加到名为“ LogDrop”的脚本中。还有一个GameControl脚本,一旦用户执行某项操作,就会将一个名为“活动”的布尔值设置为“真”。在“ LogDrop”脚本中,更新功能正在连续运行,并检查“ active”是否设置为true,如果设置为true,则所有日志都应该减少300个空格。
当我启动程序时,用户会触发活动的布尔值,并且日志向下移动,但不能向下移动300个空格。
我当前的更新代码为:
void Update()
{
if (active)
{
if (!positionSet)
{
endPosition = new Vector3(transform.position.x, transform.position.y - 300, transform.position.z);
positionSet = true;
}
if (Vector3.Distance(transform.position, endPosition) > 0.00001)
{
transform.position = Vector3.MoveTowards(transform.position, endPosition, 250 * Time.deltaTime);
}
else
{
active = false;
positionSet = false;
}
}
}
当我运行程序并触发“活动”时,日志甚至向下移动730.8个空格。我不知道值730.8的来源...一旦日志移动并完成移动,“活动”将重新设置为false。但是,当用户再次触发布尔值时,即使该函数再次运行,日志也不会再次移动。
答案 0 :(得分:0)
Vector3.MoveTowards计算并返回当前位置和目标位置之间的位置。 (第一个和第二个参数)。第三个参数是每次通话朝目标位置移动的距离(或距离)。
如果希望对象每次调用精确移动200个单位,则必须确保第三个参数等于或大于200f。
但是,您出于目的使用了错误的功能。
实际上,您可以直接直接设置位置
var endPosition = new Vector3(
transform.position.x,
transform.position.y - 200,
transform.position.z);
transform.position = endPosition;
编辑:
根据Vector3.MoveTowards文档,您的代码应该可以按需要工作。 (移动对象并在endPosition处停止)
我想事实并非如此,这就是为什么你在这里。我也许可以为您提供这种小巧的解决方案。
void Update()
{
if(active)
{
if(!positionSet)
{
endPosition = new Vector3(transform.position.x, transform.position.y - 200, transform.position.z);
positionSet = true;
}
var step = 250 * Time.deltaTime;
if (Vector3.Distance(transform.position, endPosition) < step) {
transform.position = endPosition;
}else {
transform.position = Vector3.MoveTowards(transform.position, endPosition, step);
}
}
}