所以我目前有2个值x和y,我希望x递减/递增y,直到它变为0而不会过去。
float x = 9;
float y = 4;
if (x != 0) {
if (x > 0) {
x -= y;
}
else if (x < 0) {
x += y;
}
}
如果要运行x将被减去y 3次,将x的值保留为-2,其中下一帧将再次运行并添加y,这将再次结束。
答案 0 :(得分:0)
您可以通过在减法或添加后在0
引入剪辑来更改实现,如下所示。
if (x != 0) {
if (x > 0) {
x -= y;
x = Math.Max(x, 0.0f);
}
else if (x < 0) {
x += y;
x = Math.Min(x, 0.0f);
}
}
答案 1 :(得分:0)
您可以使用以下内容执行此操作:
if ( x != 0 )
{
x = x < 0 ? Math.Min(x + y, 0) : Math.Max(x - y, 0);
}
答案 2 :(得分:0)
不确定我是否理解正确,但是如果你希望 x递减/递增y直到它变为0而不会超过,那么应该这样做:
for( ; x>=0; x = x - y);
x = x + y;
答案 3 :(得分:0)
这个函数会在注释中给你这个结果,对于错误的参数,它会避免无限并返回X:
//[9, 4] = 1
//[-9, -4] = -1
private static float Unnamed(float x, float y)
{
float tmp = x;
float result = x;
while (true)
{
tmp -= y;
if (y > 0)
{
if (tmp > 0 && tmp < x)
result = tmp;
else
break;
}
else
{
if (tmp < 0 && tmp > x)
result = tmp;
else
break;
}
}
return result;
}
答案 4 :(得分:0)
好的,基于@ Codor的答案,我得到了这个
private float Approach(float value, float targetValue, float step) {
float result;
if (value < targetValue) {
result = Mathf.Min (value + step, targetValue);
} else {
result = Mathf.Max (value - step, targetValue);
}
return result;
}
工作正常,完全符合我的要求,永远不会超过目标价值。然后我遇到了一个已经内置的功能,它完全符合我的要求Mathf.MoveTowards(value, targetValue, step)
。