我试图将我的游戏世界划分为部门/区块。并根据播放器/对象的位置标识播放器/对象所在的图块。我的世界没有限制,所以世界可以是任何大小。磁贴大小已定义且恒定。因此,整个世界被划分为给定尺寸的正方形瓷砖。
示例:如果我将世界分成大小相等的正方形瓷砖,例如300x300。
更多示例输入和输出:
播放器位置为(10,10),图块编号应为(0,0)
玩家位置为(-10,10),图块编号应为(-1,0)
播放器位置为(10,-10),图块编号应为(0,-1)
播放器位置为(-10,-10),图块号应为(-1,-1)
播放器位置为(1,1),图块号应为(0,0)
播放器位置为(1,-1),图块编号应为(0,-1)
播放器位置为(-1,1),图块号应为(-1,0)
玩家位置为(-1,-1),图块号应为(-1,-1)
玩家位置为(-450,100),图块编号应为(-2,0)
玩家位置为(450,100),图块号应为(1,0)
播放器位置为(-450,-100),图块编号应为(-2,-1)
播放器位置为(450,-100),图块编号应为(1,-1)
我有以下代码,似乎只有X / Z为正数时,它才能正常工作。一旦它位于X / Z的负侧,我不确定如何计算位置。
public static Sector GetCurrentSector(Vector3 p_position)
{
int x = Mathf.FloorToInt(p_position.x / cellSize);
int z = Mathf.FloorToInt(p_position.z / cellSize);
return new Sector(x, z);
}
我已经检查了以下问题,这些问题似乎与我的问题有关:
注意:我也不知道这个问题叫什么!因此,这使我很难搜索。我的搜索使我找到了多个与圆,半径,圆内的点等相关的地方,
我建议您使用int而不是FloorToInt并使用整数除法:
public static Sector GetCurrentSector(Vector3 p_position)
{
int x = (int)p_position.x / (int)cellSize;
int z = (int)p_position.z / (int)cellSize;
return new Sector(x, z);
}
我的回答不正确,您的方法正确使用matf.FloorInt优于负数的整数除法。