Unity2D: несколько объектов вращаются вокруг одного и того же центра, но начиная со смещенных позиций - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу, чтобы мои три плавающие 2D-платформы в моей игре вращались вокруг одного и того же центраЯ добился этого следующим образом:

public GameObject Object;

public float RotateSpeed;
public float Radius;

private Vector2 _centre;
private float _angle;

private void Start()
{
    _centre = transform.position;
}

private void Update()
{

    _angle += RotateSpeed * Time.deltaTime;

    var offset = new Vector2(Mathf.Sin(_angle), Mathf.Cos(_angle)) * Radius;
    Object.transform.position = _centre + offset;
}

Это работает просто отлично, однако - только для ОДНОЙ платформы.Если я добавлю больше платформ в микс, все они начнутся с одной и той же позиции в нашем воображаемом круге вокруг центра ИЛИ, если я смещу их, все они будут вращаться с другим центром (если смещение равно x = 2, тоцентр также смещен на 2).Как сделать так, чтобы 3 платформенных круга окружали один и тот же центр, но начиная с 3 разных начальных точек на круге?(Например, 0 °, 180 °, 270 °) или около того?(В настоящее время все 3 начинаются с 0)

Спасибо

РЕДАКТИРОВАТЬ:

Это то, как я хотел бы повернуть ti.4 прямоугольника являются платформой.Все они должны вращаться вокруг воображаемого центра.Они имеют одинаковую скорость, поэтому никогда не сближаются.Кроме того, они все остаются в вертикальном положении.Синие линии и красные линии также являются воображаемыми.В центре нет объекта.Надеюсь, это поможет

enter image description here

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Поскольку экземпляр Vector2 _centre создается в качестве начальной позиции объекта, попробуйте получить преобразование оси, а не преобразование самого объекта

public float RotateSpeed;
public float Radius;

public Transform _centre; // in the inspector input the pivot transform
public float _angle; // set it in the inspector
// private float _angle; use this with the code in the start method

private void Start()
{
    /*
    _angle = Mathf.asin((pivot.position.x - transform.position.x)/Radius);
    */
}

private void Update()
{

    _angle += RotateSpeed * Time.deltaTime;

    var offset = new Vector2(Mathf.Sin(_angle) * Radius, Mathf.Cos(_angle)) * Radius;
    transform.position = _centre + offset;
}

Убедитесь, что поместилиВаша платформа находится в согласованном положении вокруг оси вращения.

0 голосов
/ 21 февраля 2019

Определите переменную: private float _angle; как общедоступную: public float _angle;.

. После этого перейдите к инспектору, нажав на объект, к которому присоединен скрипт, и найдите переменную с именем «angle».Измените эту переменную на разные углы для каждой платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...