Как я могу изменить этот блок кода для обнаружения столбцов, состоящих из 3 или более синих кубов (Unity)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу изменить этот блок кода для обнаружения столбцов, состоящих из 3 или более синих кубов (Unity)

Сообщение Anonymous »

Итак, в настоящее время у меня есть этот блок кода, который определяет, есть ли в ряду кубов 3 или более красных куба, расположенных рядом друг с другом. Игровая зона, которую будут занимать кубики, будет иметь ширину 5 кубиков и высоту 10-15 кубиков. Причина в том, что я собираюсь запрограммировать кубики так, чтобы они падали с верхней части игровой площадки, как блоки тетриса. Вот почему я использую код, который отбрасывает луч от пустого игрового объекта, идущий слева направо, и другой пустой игровой объект, который отбрасывает луч, идущий справа налево, которые блокируются кубиками некрасного цвета. Код работает для горизонтальных проверок, поскольку нужно проверить только 5 кубов. Если я использую тот же метод для проверки столбцов, я обнаружил, что, поскольку столбцы будут иметь высоту примерно 10-15 кубов, существует вероятность того, что может быть 3 или более синих кубов, где лучи как с верхней, так и с нижней стороны блокируются не синими кубами. .

Код: Выделить всё

private void CheckHorizontalMatches(string color)
{
RaycastHit2D hit = Physics2D.Raycast(transform.position, rayDirection, Mathf.Infinity, cubeLayer);
Debug.DrawRay(transform.position, rayDirection * 5f, Color.green); // Draw a green ray to visualize direction

GameObject startCube = null;
int count = 0;

while (hit.collider != null && hit.collider.tag == color && !detectedRedCubes.Contains(hit.collider.gameObject))
{
Debug.Log("Obj Name:" + hit.collider.gameObject);
count++;
startCube = hit.collider.gameObject;

// Check if the collided cube is not "Red" tagged, and if so, break out of the loop
if (hit.collider.tag != "Red")
{
break;
}

startCube.layer = LayerMask.NameToLayer("detectedRedCubesLayer");
detectedRedCubes.Add(startCube); // Add the cube to the list of detected cubes
hit = Physics2D.Raycast(startCube.transform.position, Vector2.right, Mathf.Infinity, cubeLayer & ~(1 = 3 && detectedRedCubes.Count >= 3)
{

}
}
Примечание: красные блоки могут «совпадать» только по горизонтали, а синие блоки — только по вертикали.
Пока меня устраивает горизонталь. бит кода, в котором он определяет, есть ли 3 или более кубиков красного цвета, поскольку в ряду может быть не более 5 красных кубиков. Настоящая проблема — обнаружить 3 или более синих кубика, сложенных друг на друга.

Подробнее здесь: https://stackoverflow.com/questions/784 ... or-more-bl
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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