Проблема состоит в том, что многие пути, помещенные в большие ящики прямоугольника. src = "https://i.sstatic.net/yu3p15x7.jpg"/>
Это мой код, и я попытался изменить метод isvalidwaypoint, но ничто не исправил его. В некоторых случаях путешественные точки вообще или в какой -то версии почти только путевые точки были в этих больших коробках. < /p>
Это логика метода: < /p>
bool IsValidWaypoint(int x, int y)
{
if (!IsWalkable(x, y))
return false;
// Ghost house exclusion
if (x >= 10 && x = 11 && y = 3)
return true;
// L-shaped corner (2 non-opposite)
if (count == 2)
{
if ((up && right) || (up && left) || (down && right) || (down && left))
return true;
}
// straight line or dead end
return false;
}
< /code>
Вот полный код: < /p>
using UnityEngine;
public class MazeGenerator : MonoBehaviour
{
public GameObject wallPrefab;
public GameObject cornerPrefab;
public GameObject pelletPrefab;
public GameObject powerPelletPrefab;
public GameObject floorPrefab;
public GameObject waypointPrefab;
public float tileSize = 1f;
string[] layout = new string[]
{
"WWWWWWWWWWWWWWWWWWWWWWWWWWWW",
"W............WW............W",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"WPWWWW.WWWWW.WW.WWWWW.WWWWPW",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"W..........................W",
"W.WWWW.WW.WWWWWWWW.WW.WWWW.W",
"W.WWWW.WW.WWWWWWWW.WW.WWWW.W",
"W......WW....WW....WW......W",
"WWWWWW.WWWWW WW WWWWW.WWWWWW",
" W.WWWWW WW WWWWW.W ",
" W.WW WW.W ",
" W.WW WWW--WWW WW.W ",
"WWWWWW.WW W W WW.WWWWWW",
" . W W . ",
"WWWWWW.WW W W WW.WWWWWW",
" W.WW WWWWWWWW WW.W ",
" W.WW WW.W ",
" W.WW WWWWWWWW WW.W ",
"WWWWWW.WW WWWWWWWW WW.WWWWWW",
"W............WW............W",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"WP..WW................WW..PW",
"WWW.WW.WW.WWWWWWWW.WW.WW.WWW",
"W......WW....WW....WW......W",
"W.WWWWWWWWWW.WW.WWWWWWWWWW.W",
"W..........................W",
"WWWWWWWWWWWWWWWWWWWWWWWWWWWW"
};
void Start()
{
GenerateMaze();
}
void GenerateMaze()
{
int height = layout.Length;
int width = layout[0].Length;
Vector3 mazeOffset = new Vector3(-width * tileSize / 2f, height * tileSize / 2f, 0f);
for (int y = 0; y < height; y++)
{
for (int x = 0; x < layout[y].Length; x++)
{
char cell = layout[y][x];
Vector3 position = new Vector3(x * tileSize, -y * tileSize, 0f) + mazeOffset;
GameObject toSpawn = cell switch
{
'W' => wallPrefab,
'.' => pelletPrefab,
'P' => powerPelletPrefab,
'C' => cornerPrefab,
' ' => floorPrefab,
_ => null
};
if (toSpawn != null)
Instantiate(toSpawn, position, Quaternion.identity, transform);
if (IsValidWaypoint(x, y))
{
GameObject wp = Instantiate(waypointPrefab, position, Quaternion.identity, transform);
wp.name = $"Waypoint_{x}_{y}";
}
}
}
}
bool IsPathCell(char c)
{
return c == '.' || c == 'P' || c == ' ';
}
bool IsWalkable(int x, int y)
{
if (y < 0 || y >= layout.Length || x < 0 || x >= layout[0].Length)
return false;
return IsPathCell(layout[y][x]);
}
bool IsValidWaypoint(int x, int y)
{
if (!IsWalkable(x, y))
return false;
// Ghost house exclusion
if (x >= 10 && x = 11 && y = 3)
return true;
// L-shaped corner (2 non-opposite)
if (count == 2)
{
if ((up && right) || (up && left) || (down && right) || (down && left))
return true;
}
// straight line or dead end
return false;
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ght-places
Как разместить автоматические путевые точки в нужных местах? ⇐ C#
Место общения программистов C#
-
Anonymous
1750978940
Anonymous
Проблема состоит в том, что многие пути, помещенные в большие ящики прямоугольника. src = "https://i.sstatic.net/yu3p15x7.jpg"/>
Это мой код, и я попытался изменить метод isvalidwaypoint, но ничто не исправил его. В некоторых случаях путешественные точки вообще или в какой -то версии почти только путевые точки были в этих больших коробках. < /p>
Это логика метода: < /p>
bool IsValidWaypoint(int x, int y)
{
if (!IsWalkable(x, y))
return false;
// Ghost house exclusion
if (x >= 10 && x = 11 && y = 3)
return true;
// L-shaped corner (2 non-opposite)
if (count == 2)
{
if ((up && right) || (up && left) || (down && right) || (down && left))
return true;
}
// straight line or dead end
return false;
}
< /code>
Вот полный код: < /p>
using UnityEngine;
public class MazeGenerator : MonoBehaviour
{
public GameObject wallPrefab;
public GameObject cornerPrefab;
public GameObject pelletPrefab;
public GameObject powerPelletPrefab;
public GameObject floorPrefab;
public GameObject waypointPrefab;
public float tileSize = 1f;
string[] layout = new string[]
{
"WWWWWWWWWWWWWWWWWWWWWWWWWWWW",
"W............WW............W",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"WPWWWW.WWWWW.WW.WWWWW.WWWWPW",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"W..........................W",
"W.WWWW.WW.WWWWWWWW.WW.WWWW.W",
"W.WWWW.WW.WWWWWWWW.WW.WWWW.W",
"W......WW....WW....WW......W",
"WWWWWW.WWWWW WW WWWWW.WWWWWW",
" W.WWWWW WW WWWWW.W ",
" W.WW WW.W ",
" W.WW WWW--WWW WW.W ",
"WWWWWW.WW W W WW.WWWWWW",
" . W W . ",
"WWWWWW.WW W W WW.WWWWWW",
" W.WW WWWWWWWW WW.W ",
" W.WW WW.W ",
" W.WW WWWWWWWW WW.W ",
"WWWWWW.WW WWWWWWWW WW.WWWWWW",
"W............WW............W",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"WP..WW................WW..PW",
"WWW.WW.WW.WWWWWWWW.WW.WW.WWW",
"W......WW....WW....WW......W",
"W.WWWWWWWWWW.WW.WWWWWWWWWW.W",
"W..........................W",
"WWWWWWWWWWWWWWWWWWWWWWWWWWWW"
};
void Start()
{
GenerateMaze();
}
void GenerateMaze()
{
int height = layout.Length;
int width = layout[0].Length;
Vector3 mazeOffset = new Vector3(-width * tileSize / 2f, height * tileSize / 2f, 0f);
for (int y = 0; y < height; y++)
{
for (int x = 0; x < layout[y].Length; x++)
{
char cell = layout[y][x];
Vector3 position = new Vector3(x * tileSize, -y * tileSize, 0f) + mazeOffset;
GameObject toSpawn = cell switch
{
'W' => wallPrefab,
'.' => pelletPrefab,
'P' => powerPelletPrefab,
'C' => cornerPrefab,
' ' => floorPrefab,
_ => null
};
if (toSpawn != null)
Instantiate(toSpawn, position, Quaternion.identity, transform);
if (IsValidWaypoint(x, y))
{
GameObject wp = Instantiate(waypointPrefab, position, Quaternion.identity, transform);
wp.name = $"Waypoint_{x}_{y}";
}
}
}
}
bool IsPathCell(char c)
{
return c == '.' || c == 'P' || c == ' ';
}
bool IsWalkable(int x, int y)
{
if (y < 0 || y >= layout.Length || x < 0 || x >= layout[0].Length)
return false;
return IsPathCell(layout[y][x]);
}
bool IsValidWaypoint(int x, int y)
{
if (!IsWalkable(x, y))
return false;
// Ghost house exclusion
if (x >= 10 && x = 11 && y = 3)
return true;
// L-shaped corner (2 non-opposite)
if (count == 2)
{
if ((up && right) || (up && left) || (down && right) || (down && left))
return true;
}
// straight line or dead end
return false;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79681247/how-to-place-the-waypoints-automatic-in-the-right-places[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия