Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Передать в метод, нужный компонент вектора.

#c_sharp #unity3d


В коде много вот такого, причем когда обрабатывается одна ось - не обязательно должна
обрабатыватся другая.

AxisX = ((currentTouchPos.x - startTouchPos.x) / workZoneInPixX);
AxisY = ((currentTouchPos.y - startTouchPos.y) / workZoneInPixY);


Отличаются только оси и чуть чуть название переменных.
Как передать это в метод, чтобы обрабатывать все похожие запросы этим?
Чтобы сократить и избежать дублирования кода
Вижу это как то примерно вот так

float FormatXY(x_or_y)
Axis = ((currentTouchPos.x_or_y - startTouchPos.x_or_y) / workZoneInPixX_or_Y);
return Axis;


Но понятно, что таким образом я просто передам значения x или y, а мне бы передать
именно параметр x компонент вектора или y компонент вектора, и как то подставить это
в методе. 

Чтобы в результате, код

AxisX = FormatXY(X)


Был эквивалентен коду

AxisX = ((currentTouchPos.x - startTouchPos.x) / workZoneInPixX);


А код 

AxisX = FormatXY(Y)


Был эквивалентен коду 

AxisY = ((currentTouchPos.y - startTouchPos.y) / workZoneInPixY);

    


Ответы

Ответ 1



На беглый взгляд серебренной пули тут не найдешь. Думаю лучше написать две функции, типа CurrentTouchX() и CurrentTouchY() - куда запихать соответствующие выражения. Код сразу станет почище. Не думаю, что стоит городить что-то большее, ну может кто и придумает решение поинтереснее.

Ответ 2



Не судите строго первое что на ум пришло. enum formatAx{ "X", "Y" } float FormatXY(formatAx type){ if (type == formatAx.x) { return = ((currentTouchPos.x - startTouchPos.x) / workZoneInPixX); }else { return = ((currentTouchPos.y - startTouchPos.y) / workZoneInPixY); } } Вызов будет таким: AxisX = FormatXY(formatAx.X) Мог ошибиться, сам не проверял

Комментариев нет:

Отправить комментарий