我试图将我的游戏世界划分为扇区/瓦片。并根据玩家/对象的位置确定玩家/对象所在的瓦片。我没有限制世界大小,因此世界可以是任何大小。瓦片大小是定义的且恒定的。因此,整个世界被划分为给定维度的正方形瓦片。
- 示例**:如果我把我的世界分成大小相等的方块,比如300x300。
- 如果玩家在位置(0,0)到(300,300)之间,则牌号应为(0,0)
- 如果玩家在位置(0,0)到(300,-300)之间,则牌号应为(0,-1)
- 如果玩家在位置(-300,0)到(-600,300)之间,则牌号应为(-2,-0)
- 更多示例输入和输出:**
- 玩家位置为(10,10),牌号应为(0,0)
- 玩家位置为(-1,0,1,0),牌号应为(-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);
}
- 我已经检查了以下问题,这些问题似乎与我的问题有关:**
- Dividing a 2D array into boxes-与我的缺陷完全相同
- getting rectangular coordinates of tiles of a 2D map-与我的问题完全相同
- How to create 3D tile maps using a Plane object divided into tiles?-似乎不是同一问题
- Convert 2d game world coordinates to screen position-似乎不是同一问题
- Converting from world coordinates to tile location-似乎是另一个问题
注:我也不知道这个问题叫什么!所以,它给我的搜索带来了很大的困难。我的搜索把我带到了多个与圆、半径、圆内点等有关的地方,
1条答案
按热度按时间qnzebej01#
我建议您使用int而不是FloorToInt,并使用整数除法:
我的答案是不正确的,你的方法是正确的使用matf。floorInt是更好的整数除法为负数。