Пятница, 29 Марта 2024, 17:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблема с массивом. (При проверки условия учитывается только первый из массива.)
Проблема с массивом.
SpringДата: Понедельник, 05 Октября 2020, 22:36 | Сообщение # 1
частый гость
Сейчас нет на сайте
Код
foreach (Vector3 WallVec in WallsVec)
{
    if (NextPlayerPos != PlayerPos && !WallVec.Equals(NextPlayerPos)){
        PlayerPos = NextPlayerPos;
    }
        else{
        NextPlayerPos = PlayerPos;
    }
}

Персонаж перемещается по координатной сетке, если координата следующего шага равна координате из массива, то перемещение персонажа не должно происходить. Однако это работает только с первой координатой из массива, остальные не учитываются и персонаж вступает в стену.
Помогите разобраться в этом.


Сообщение отредактировал Spring - Вторник, 06 Октября 2020, 00:15
drcrackДата: Вторник, 06 Октября 2020, 01:35 | Сообщение # 2
старожил
Сейчас нет на сайте
Потому что ты не прерываешь цикл и даже если он что-то находит, крутится дальше и перезаписывает координаты

Добавь break после NextPlayerPos = PlayerPos;

И Equals это точное сравнение, странно видеть его в явном виде вызываемое для float вектора, используй == для сравнения векторов с учетом ошибок округления


Сообщение отредактировал drcrack - Вторник, 06 Октября 2020, 03:17
SpringДата: Вторник, 06 Октября 2020, 09:18 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата drcrack ()
Добавь break после NextPlayerPos = PlayerPos;

Не сработало, всё также на первую координату персонаж вступить не может, на остальные вступает.
Цитата drcrack ()
Equals это точное сравнение, странно видеть его в явном виде вызываемое для float вектора

У меня в векторе только целые числа, не считая по y, поэтому сделал именно так, но на всякий случай изменю.
Код
if (NextPlayerPos != PlayerPos) {
    //for (int i = 0;i != WallsVec.Length;i++)
    foreach (Vector3 WallVec in WallsVec)
    {
        //if (NextPlayerPos != WallsVec[i])
            if (NextPlayerPos != WallVec)
            {
            PlayerPos = NextPlayerPos;
        }
            else {
            NextPlayerPos = PlayerPos;
            break;
        }
    }
}

Ещё я попробовал через for, это ничего не изменило.


Сообщение отредактировал Spring - Вторник, 06 Октября 2020, 09:23
Robinzon787Дата: Вторник, 06 Октября 2020, 10:07 | Сообщение # 4
Construct'орщик
Сейчас нет на сайте
Вероятно в блок else ты вообще не попадаешь

Переустановил ос - начал жизнь с чистого листа.
SpringДата: Вторник, 06 Октября 2020, 20:11 | Сообщение # 5
частый гость
Сейчас нет на сайте
Подсказали только такой выход:
Код
if (NextPlayerPos != PlayerPos) {
    foreach (Vector3 WallVec in WallsVec)
    {
        if (NextPlayerPos == WallVec)
            {
                canMove = false;
                break;
            }
            else {
                canMove = true;
            }
        }
    }
    if (canMove) {
    PlayerPos = NextPlayerPos;
}

С таким кодом всё работает. А если честно не вижу большой разницы между тем что я делал раньше и тем что сейчас. crazy


Сообщение отредактировал Spring - Вторник, 06 Октября 2020, 20:35
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблема с массивом. (При проверки условия учитывается только первый из массива.)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг