C# Процедурное поколение- Как делать всегда установленный номер?C#

Место общения программистов C#
Ответить
Anonymous
 C# Процедурное поколение- Как делать всегда установленный номер?

Сообщение Anonymous »

ОК, работая в Unity здесь и пытаясь выйти из этой основной динамики игры. В основном у меня есть все эти 3D -платформы, которые имеют определенные веса для них (вес, что означает, как часто они появляются в массиве, из которой игра может выбрать следующую платформу) - < /p>

прямо сейчас на каждой платформе есть набор из 4 кардинальных направлений (плюс вверх /вниз, но все они имеют), где она может появиться на следующей платформе, чтобы игрок, чтобы пройтись, в другом месте. Это перечисление, и я установил это вручную. After they step, it turns 1 alpha and thus doesn't look like a "marker", see here:

Изображение


As the player walks via joystick, I want the platforms to spawn in square «Установки» - скажем о длине 10 платформ - и я сделаю что -нибудь, когда уровень заполнен. Моя проблема в том, что я попробовал кучу разных систем, но не знаю, как это реализовать. Изображение модели, где существуют разные конфигурации, но в конечном итоге предел/границы 10x10:



здесь на основе «На основе проблемы» - это на основе. Точка зрения объекта: < /p>

foreach(Direction d in directionsAvailable)
{
Vector3 pos = transform.position;
float dist = container.GetComponent ().bounds.size.x;

switch (d) {
case Direction.Backward:
pos = new Vector3 (pos.x, pos.y, pos.z-dist);
break;
case Direction.Forward:
pos = new Vector3 (pos.x, pos.y, pos.z+dist);
break;
case Direction.Left:
pos = new Vector3 (pos.x-dist, pos.y, pos.z);
break;
case Direction.Right:
pos = new Vector3 (pos.x+dist, pos.y, pos.z);
break;
case Direction.Down:
pos = new Vector3 (pos.x, pos.y-(2*dist), pos.z);
break;
case Direction.Up:
pos = new Vector3 (pos.x, pos.y+(2*dist), pos.z); //hits itself, might have to do more dist
break;
default:
break;
}
< /code>

Вот как я проверяю, если платформа находится в положении или положении открыта: < /p>

public Platform PlatAtPos(Vector3 pos)
{
platformsSpawned = GameObject.FindObjectsOfType
();
foreach(Platform p in platformsSpawned)
{
if(p.originPos == pos || p.transform.position == pos) //or just delete one of them
{
return p;
}
}
return null;
}
public void checkForPlatsAround()
{
gameController = GameObject.FindObjectOfType ();
float dist = container.GetComponent ().bounds.size.x;
foreach (Platform.Direction dir in Enum.GetValues(typeof(Platform.Direction))) {
Vector3 pos = transform.position;

switch (dir) {
case Direction.Backward:
pos = new Vector3 (pos.x, pos.y, pos.z-dist);
break;
case Direction.Forward:
pos = new Vector3 (pos.x, pos.y, pos.z+dist);
break;
case Direction.Left:
pos = new Vector3 (pos.x-dist, pos.y, pos.z);
break;
case Direction.Right:
pos = new Vector3 (pos.x+dist, pos.y, pos.z);
break;
case Direction.Down:
pos = new Vector3 (pos.x, pos.y-(2*dist), pos.z);
break;
case Direction.Up:
pos = new Vector3 (pos.x, pos.y+(2*dist), pos.z); //hits itself, might have to do more dist
break;
default:
break;
}
if(gameController.PlatAtPos(pos) != null)
{
gameController.PlatAtPos (pos).showAsMarker ();
}
}
}
< /code>

Есть ли лучший /более четкий способ сделать это? Как я могу сделать это процедурно?


Подробнее здесь: https://stackoverflow.com/questions/496 ... set-number
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»