【发布时间】:2017-01-12 05:10:37
【问题描述】:
好的,我正在 Unity 中制作视频游戏,目前正在研究 2D 四向定向运动状态机。我的空闲动画不知道该怎么走。我已经浏览了这个代码 x 100,我几乎可以肯定那里有更好的方法......
X 和 Y 是浮点数,所以我需要将它们与 Epsilon 进行比较。我已经做了一个 switch 语句,现在这个 if 语句。最终的最终目标是一次计算的 switch 语句,因为我这里基本上是做 4 个 if 语句
private void SetCharacterDirection(float x, float y)
{
if (Mathf.Abs(x) - Mathf.Abs(y) > Mathf.Epsilon)
{
_characterDirection = Mathf.Abs(x) > Mathf.Epsilon ? CharacterDirections.Right : CharacterDirections.Left;
}
else
{
_characterDirection = Mathf.Abs(y) > Mathf.Epsilon ? CharacterDirections.Up : CharacterDirections.Down;
}
}
有一些使用绝对值、余弦、math.floor()、math.ceiling 甚至向量2 的魔法组合;但我一直在看这个很久,看不到它。请帮忙。
【问题讨论】:
-
您实际上并不需要使用 epsilon 进行大于/小于比较 - 仅用于“相等”,并且 C# 对浮点比较比 C++ 更宽容。为什么要比较 X 和 Y?这些代表什么?
-
它们代表方向。如果它们都不是 0,我需要最接近整数值(1x、1y、-1x 或 -1y)的整数
-
例如:(0.4X, -0.5Y) == (0X, -1Y) 还有:(0.1X, -0.2Y) == (0X, -1Y)
标签: c# switch-statement unity5