В условии одно из значений — false, другое — true (получаемое в тернарном операторе), но тело условия всё равно выполняется.
В тернарном операторе x = true, _x = true; в массиве is_wall последнее значение — false:
Почему происходит данная аномалия?
float height = 0.16f;
float width = 0.06f;
float distancex = 0.06f;
float distancey = 0.2f;
bool x = Vector2.left==direction || Vector2.right==direction ? true : false;
RaycastHit2D[] hits = new RaycastHit2D[3];
bool[] not_null = new bool[3];
bool[] is_wall = new bool[3];
hits[0] = Physics2D.Raycast(transform.position, direction);
hits[1] = Physics2D.Raycast(transform.position+(x?new Vector3(0,height):new Vector3(width,0)), direction);
hits[2] = Physics2D.Raycast(transform.position + (x ? new Vector3(0, -height) : new Vector3(-width, 0)), direction);
for(int i = 0; i < hits.Length; i++)
{
not_null[i] = hits[i].collider != null;
is_wall[i] = not_null[i] ? hits[i].collider.tag.Equals("wall") : false;
}
if (!not_null[0] && !not_null[1] && !not_null[2])
return true;
for(int i = 0; i < 3; i++)
{
bool _x = hits[i].distance <= distancex;
bool _y = hits[i].distance <= distancey;
if (is_wall[i] && x ? _x : _y)
{
return false;
}
}
return true;
Рискну предположить, что ваша проблема в следующем: ваш код
is_wall[i] && x ? _x : _y
интерпретируется компилятором как
(is_wall[i] && x) ? _x : _y
а вам нужно
is_wall[i] && (x ? _x : _y)
Поставьте явные скобки.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей