Я не совсем уверен, правильно ли я выбрал заголовок для вопроса, не стесняйтесь редактировать его, если вы считаете, что он вводит в заблуждение.
Я разрабатываю экшн-игру, в основе игрового процесса которой лежит музыка. Он содержит набор сущностей (игровых объектов), которые движутся в нескольких направлениях; верхние, правые, левые, нижние и диагональные движения (например, верхнее левое, верхнее правое, нижнее левое и т. д. и т. д.).
Чтобы определить положение этих сущностей, необходимо рассчитать значение, включающее темп музыки и несколько свойств самих сущностей, которые я могу создать в Unity.
Я использую следующую функцию для определения положения преобразования объектов:
private Vector3 _position;
private void DeterminePosition(float offset)
{
// In actual code, the _position is initialized under Start() method
// But for this simplification sake, I'll just put it here
_position = _position == null ? new Vector3(0, 0, 1f) : _position;
if (Direction == Direction.Up || Direction == Direction.RightUp || Direction == Direction.LeftUp)
{
_position.y = offset;
}
if (Direction == Direction.Down || Direction == Direction.RightDown || Direction == Direction.LeftDown)
{
_position.y = -offset;
}
if (Direction == Direction.Left || Direction == Direction.LeftDown || Direction == Direction.LeftUp)
{
_position.x = -offset;
}
if (Direction == Direction.Right || Direction == Direction.RightDown || Direction == Direction.RightUp)
{
_position.x = offset;
}
transform.position = _position;
}
Где offset
— это значение, о котором я говорил ранее.
Код работает отлично, как и предполагалось, однако игру нужно изменить. Вместо фиксированного направления (например, вверх, вправо, влево, снизу, вправо вверх, вниз влево и т. д. и т. д.) мы решили использовать значение градуса для направления (от 0 до 360 градусов).
И теперь я понятия не имею, как этому воспрепятствовать. Я пытался использовать следующие коды, но это не работает:
_position = new Vector3(offset, offset, transform.position.z);
// Where the direction is between 0 .. 360
transform.position = Quaternion.Euler(0, direction, 0) * _position;
Кто-нибудь еще может предложить решение?
Заранее спасибо!