#c# #unity3d
Вопрос:
У меня есть 2d массив, хранящий игровые объекты, и метод обновления логики. Вот 1-й код:
public void UpdatePlayerPosition(Vector3 posStart, Vector3 posEnd)
{
_levelItems[(int)posEnd.x, (int)posEnd.z] = _levelItems[(int)posStart.x, (int)posStart.z];
_levelItems[(int)posStart.x, (int)posStart.z] = null;
}
Вот 2-й код
public void UpdatePlayerPosition(Vector3 posStart, Vector3 posEnd)
{
var placeStart = _levelItems[(int)posStart.x, (int)posStart.z];
var placeEnd = _levelItems[(int)posEnd.x, (int)posEnd.z];
placeEnd = placeStart;
placeStart = null;
}
1-й код работает нормально, однако я хотел бы, чтобы он был более читаемым, как 2-й, который не работает. Я знаю о рекомендациях vars и ценностях, поэтому я знаю, почему это работает неправильно. Есть ли какой-нибудь способ заставить его работать должным образом и хорошо выглядеть ? Лучшее, что я могу сделать, это
public void UpdatePlayerPosition(Vector3 posStart, Vector3 posEnd)
{
var placeStart = _levelItems[(int)posStart.x, (int)posStart.z];
var placeEnd = _levelItems[(int)posEnd.x, (int)posEnd.z];
_levelItems[(int)posEnd.x, (int)posEnd.z] = placeStart;
_levelItems[(int)posStart.x, (int)posStart.z] = null;
}
Ответ №1:
2-й код не будет работать, потому что вы просто присваиваете значение _levelItems[(int)posStart.x, (int)posStart.z]
и _levelItems[(int)posEnd.x, (int)posEnd.z]
placeStart
и placeEnd
соответственно. Затем вы просто меняете значение более поздних 2 переменных, а не массива. Вы должны изменить значение переменных массива напрямую, чтобы изменить их.
На мой взгляд, более чистый код будет выглядеть так:
public void UpdatePlayerPosition(Vector3 posStart, Vector3 posEnd)
{
int xStart = (int)posStart.x;
int zStart = (int)posStart.z;
int xEnd = (int)posEnd.x;
int zEnd = (int)posEnd.z;
_levelItems[xStart, zStart] = null;
_levelItems[xEnd, zEnd] = placeStart;
}