Как сымитировать траекторию движения по эллипсу под силой тяжести? Имеется два тела, у одного огромная масса, у другого единичная. Имеется код:using System.Collections; using System.Collections.Generic; using UnityEngine; public class force : MonoBehaviour { public Vector2 force1; public Rigidbody2D myRigidbody; public Rigidbody2D myRigidbody2; public float f12; public GameObject myObject1; public GameObject myObject2; public int nObject; public float inputX; public float inputY; public float inputX2; public float inputY2; public float y; // Use this for initialization void Start () { if (nObject == 1) { myObject1 = GameObject.Find ("Sphere1"); myObject2 = GameObject.Find ("Sphere2"); myRigidbody = myObject1.GetComponent (); myRigidbody2 = myObject2.GetComponent (); } if (nObject == 2) { myObject1 = GameObject.Find ("Sphere2"); myObject2 = GameObject.Find ("Sphere1"); myRigidbody= myObject1.GetComponent (); myRigidbody2= myObject2.GetComponent (); } } // Update is called once per frame void Update () { } void FixedUpdate() { if (nObject == 1) { Vector2 ve = new Vector2 (); ve.y = y; ve.x = 0; myRigidbody.AddForce (ve, ForceMode2D.Impulse); } Vector2 input = new Vector2 (); input = myObject1.transform.position; inputX = input.x; inputY = input.y; input = myObject2.transform.position; inputX2 = 0; inputY2 = 0; float r12 = Mathf.Sqrt (Mathf.Pow (inputX2 - inputX, 2) + Mathf.Pow (inputY2 - inputY, 2)); float cosq12 = (inputX2 - inputX) / (r12); float sinq12 = (inputY2 - inputY) / (r12); float G = 7 * Mathf.Pow(10,-1); f12 = (G * myRigidbody.mass * myRigidbody2.mass) * (Mathf.Pow (r12, -2)); force1 = new Vector2 (); force1.x = f12 * cosq12; force1.y = f12 * sinq12; myRigidbody.AddForce(force1,ForceMode2D.Force); } } Если не присваивать маленькому телу ForceMode2D.Impulse, то оно просто притянется к большему(что по-идее и должно быть). Но мне нужно получить вращение вокруг большего по эллипсу. Так что, если прикладываю моментальную силу, шар начинает двигаться по неведомой траектории. То есть сначала вращается в одну сторону, потом в другую, потом притягивается, а затем улетает. Извиняюсь за данный код сразу) Думаю два варианта: проблема в физике или проблема в методах, которые я использую. Но я гуглил и читал документацию:(
Для симуляции движения по эллипсу под воздействием силы тяжести, вам нужно учитывать не только расстояние между телами и их массы, но также угловую скорость и направление движения.
Одним из способов достичь желаемого эффекта вращения вокруг большего тела по эллипсу, может быть использование уравнений движения и законов сохранения энергии и момента импульса.
В вашем коде, в методе FixedUpdate(), вместо простого притягивания маленького тела к большему, попробуйте добавить учет угловой скорости и направления движения, чтобы имитировать вращение по эллипсу.
Также, возможно, стоит изменить способ применения силы к маленькому телу, чтобы обеспечить более плавное движение вокруг большего. Может быть стоит попробовать различные значения ForceMode2D и угловые скорости.
Надеюсь, это поможет вам решить проблему симуляции движения по эллипсу под силой тяжести в вашем проекте.
Для симуляции движения по эллипсу под воздействием силы тяжести, вам нужно учитывать не только расстояние между телами и их массы, но также угловую скорость и направление движения.
Одним из способов достичь желаемого эффекта вращения вокруг большего тела по эллипсу, может быть использование уравнений движения и законов сохранения энергии и момента импульса.
В вашем коде, в методе FixedUpdate(), вместо простого притягивания маленького тела к большему, попробуйте добавить учет угловой скорости и направления движения, чтобы имитировать вращение по эллипсу.
Также, возможно, стоит изменить способ применения силы к маленькому телу, чтобы обеспечить более плавное движение вокруг большего. Может быть стоит попробовать различные значения ForceMode2D и угловые скорости.
Надеюсь, это поможет вам решить проблему симуляции движения по эллипсу под силой тяжести в вашем проекте.