Unity 2D перемещение и поворот вопроса - PullRequest
0 голосов
/ 04 февраля 2020

Я работаю над добавлением вертолета в мою 2d игру, и мне нужно, чтобы он двигался круговыми движениями, а также двигался по оси X. Ниже вы можете найти код, который я использую, который использует математическое уравнение круга.

angle += speed * Time.deltaTime; //if you want to switch direction, use -= instead of +=
float x = startPoint.x + Mathf.Cos(angle) * radius;
float y = startPoint.y + Mathf.Sin(angle) * radius;
transform.position = new Vector2(x + 2, y);

Вертолет вращается правильно, но я не могу понять, как я могу заставить его двигаться вдоль оси x. Концептуальное изображение того, как это должно работать ниже: enter image description here

1 Ответ

1 голос
/ 04 февраля 2020

1) Создайте пустой игровой объект

2) Создайте родительский ящик для пустого игрового объекта

3) поверните прямоугольник вокруг пустого игрового объекта

4) переместите пустой игровой объект в сторону

Если вы хотите избежать добавления пустого родителя, вы можете отдельно отслеживать центр вращения, вращать его и перемещать со временем.

public class hello_rotate : MonoBehaviour
{
    float angle = 0;
    float radius = 1;
    float speed = 10;
    float linear_speed = 1;
    Vector2 centerOfRotation;
    // Start is called before the first frame update
    void Start()
    {
        centerOfRotation = transform.position;
    }

    // Update is called once per frame
    void Update()
    {
        centerOfRotation.x = centerOfRotation.x + linear_speed * Time.deltaTime;

        angle += speed * Time.deltaTime; //if you want to switch direction, use -= instead of +=
        float x = centerOfRotation.x + Mathf.Cos(angle) * radius;
        float y = centerOfRotation.y + Mathf.Sin(angle) * radius;
        transform.position = new Vector2(x + 2, y);
    }
}
...