Я следовал руководству на YouTube, где разработчик добавил элементы, появляющиеся вокруг игрока через определенный интервал, с максимальным расстоянием на плитке в MapBox. То, чего я пытаюсь добиться, - это добавить их с указанием c долготы и широты.
Изменения, которые я внес, были сделаны в l oop через максимальное количество элементов, которые я хочу добавить, увеличивая i переменная. Затем вместо того, чтобы вызывать предмет вокруг игрока, как newLat = getPlayerPosition() + random;
, я жестко закодировал лат и лон, как: case 0: newLat = 48.30791f; newLon = 18.08611f; millenium_item.tag = "MI0"; break;
И каждый предмет добавляется в список предметов. Я ожидаю, что добавлю каждый элемент в список, а затем выведу их на карту, но вместо этого добавляется только один элемент, который имеет ту же широту и долготу, что и игрок:
case 3: newLat = 48.32232f; newLon = 18.09462f; millenium_item.tag = "MI3"; break;
Случай 3 добавляется, поскольку он имеет те же значения широты и долготы, что и у моего проигрывателя (где на самом деле находится телефон).
case 4: newLat = 48.32232f; newLon = 18.09538f; millenium_item.tag = "MI4"; break;
Случай 4 не добавляется, но, как вы можете видеть, он довольно близок к местонахождение дела 3.
Я не знаю, что я делаю неправильно. Полный код:
void SpawnItems() {
itemindex = 100;
for(int i = 0; i < count; i++)
{
if (googleSignIn.locationdata[i] == false)
{
MilleniumItemType type = (MilleniumItemType)(int)UnityEngine.Random.Range(0, Enum.GetValues(typeof(MilleniumItemType)).Length);
float newLat = 0;
float newLon = 0;
MilleniumPuzzle prefab = Resources.Load("MilleniumItems/puzzle", typeof(MilleniumPuzzle)) as MilleniumPuzzle;
MilleniumPuzzle millenium_item = Instantiate(prefab, Vector3.zero, Quaternion.Euler(-100, 0, 0)) as MilleniumPuzzle;
millenium_item.tileManager = tileManager;
switch (i)
{
...
case 3: newLat = 48.32232f; newLon = 18.09462f; millenium_item.tag = "MI3"; break;
case 4: newLat = 48.32232f; newLon = 18.09538f; millenium_item.tag = "MI4"; break;
case 5: newLat = 48.32310f; newLon = 18.09536f; millenium_item.tag = "MI5"; break;
...
}
/// OUR LAT: 48.32232 OUR LON: 18.09462
millenium_item.Init(newLat, newLon);
items.Add(millenium_item);
}
}
Тогда Init выглядит так:
public void Init(float _lat, float _lon) {
lat = _lat;
lon = _lon;
UpdatePosition ();
}
и:
public void UpdatePosition() {
float x, y;
Vector3 position = Vector3.zero;
geodeticOffsetInv (tileManager.getLat * Mathf.Deg2Rad, tileManager.getLon * Mathf.Deg2Rad, lat * Mathf.Deg2Rad, lon * Mathf.Deg2Rad, out x, out y);
if ((lat - tileManager.getLat) < 0 && (lon - tileManager.getLon) > 0 || (lat - tileManager.getLat) > 0 && (lon - tileManager.getLon) < 0) {
position = new Vector3(x, .5f, y);
}
else {
position = new Vector3 (-x, .5f, -y);
}
position.x *= 0.300122f;
position.z *= 0.123043f;
Debug.Log("Position of inited millenium puzzle: " + position.x + " z: " + position.z);
transform.position = position;
}