我正在使用Unity3D练习我的编程技巧。我有一个网格设置,其坐标为x,y类型的设置。
[0,0] to [10,10]
中间的所有数字(I.E.5,5将接近地图的中心)。
我现在要做的就是找出一个数学公式来计算我的角色可以移动的坐标。如果角色位于位置5,5并且移动半径为2,那么返回列表或坐标数组的最有效方法是什么?每个网格方块都是它自己的对象,并且它的X和Y都有公共变量,所以一旦我得到了可用的结果,在代码中实际使用它们并不难。
这是我到目前为止所做的事情(我现在忽略了超出范围的可能性,这很容易解决):
for(int x = currentGridSquare.xCoord - myMovementRange;
x <= currentGridSquare.xCoord + myMovementRange; x++){
for(int y = currentGridSquare.yCoord - myMovementRange;
y <= currentGridSquare + myMovementRange; y++)
{
//Starting at 5,5 with a movement range of 2 should
//start this process at the value of 3,3 which
// is incorrect
}
}
我可能太累了,实际上没有计算出这个公式,但我一直在寻找并且没有遇到任何事情,所以如果有人有这方面的经验并且知道快速的方法,我将非常感激。
更新:我希望返回的值是坐标。在这个例子中,从5,5开始,我想要的值将是[3,5],[4,4],[4,5],[4,6],[3,5],[4] ,5],[5,5],[6,5],[4,6],[5,6],[6,6]和[5,7]
答案 0 :(得分:0)
所以我使用了Ben提供的公式并提出了:
foreach(var gridSquare in allGridSquares)
{
if( (Mathf.Abs(myX - gridSquare.Xcoord) + (Mathf.Abs(myY - gridSquare.Ycoor) >= myMovementValue)
{
gridSquare.activate();
}
}
我知道如果网格开始变得大于距离公式会更复杂,如果是这种情况我会稍后更新,但是对于我的网格大小,这非常有效。