public HashSet <int> GetVisiableBlock(Camera mapCamera, HashSet <int> fillSet = null) { HashSet <int> ret = fillSet != null ? fillSet : new HashSet <int> (); //地图的可见区域是一个四边形,因为当前摄像机是不能旋转的,所以只取左上和右下点 IntVector2 leftBottom = ScreenPosToMapCoord(mapCamera, new Vector2(0f, 0f)); IntVector2 leftTop = ScreenPosToMapCoord(mapCamera, new Vector2(0f, Screen.height)); IntVector2 rightTop = ScreenPosToMapCoord(mapCamera, new Vector2(Screen.width, Screen.height)); IntVector2 leftBottomBlock = MapDataManager.TileCoordToBlockCoord(leftBottom); IntVector2 rightTopBlock = MapDataManager.TileCoordToBlockCoord(rightTop); IntVector2 leftTopBlock = MapDataManager.TileCoordToBlockCoord(leftTop); for (int i = leftTopBlock.x; i <= rightTopBlock.x; ++i) { for (int j = leftBottomBlock.y; j <= leftTopBlock.y; ++j) { ret.Add(MapDataManager.BlockCoordToBlockId(i, j)); } } return(ret); }