Я делаю маленькую игру-песочницу для детей, в которой они могут порождать 2d объекты, перетаскивать их по экрану и бросать их друг против друга.
Я пытался избежать использования AddForce (), потому что алгоритмы, похоже, не соответствуют моей проблеме (если ребенок перетаскивает один объект в нескольких направлениях, траектория объекта будет довольно грязной и нереальной, когда он ее отпустит).
Вместо этого я выбрал пустой объект, когда вы щелкаете по объекту и присоединяете их с помощью HingeJoint2D. Это работает хорошо, когда дело доходит до перетаскивания объекта по экрану, но объект просто падает на землю, когда вы отпускаете его (пустой объект с HingeJoint удаляется, когда вы отпускаете его).
// Update is called once per frame
void Update()
{
// MousePosition
Vector3 mousePos = Input.mousePosition;
mousePos.z = 10;
Vector3 screenPos = Camera.main.ScreenToWorldPoint(mousePos);
if (Input.GetMouseButtonDown(0) && !objectInHand)
{
RaycastHit2D hit = Physics2D.Raycast(screenPos, Vector2.zero);
if (hit && hit.collider.tag == "DraggableObject")
{
emptyObject = new GameObject("HingeHolder");
emptyObject.transform.position = screenPos;
emptyObject.AddComponent<HingeJoint2D>();
objectInHand = hit.collider.gameObject;
emptyObject.GetComponent<Rigidbody2D>().isKinematic = true;
emptyObject.GetComponent<HingeJoint2D>().connectedBody = objectInHand.GetComponent<Rigidbody2D>();
emptyObject.GetComponent<HingeJoint2D>().autoConfigureConnectedAnchor = false;
}
}
else if(Input.GetMouseButton(0) && objetInHand)
{
emptyObject.transform.position = screenPos;
}
else if (Input.GetMouseButtonUp(0) && objetInHand)
{
emptyObject.GetComponent<Rigidbody2D>().isKinematic = false;
emptyObject.GetComponent<HingeJoint2D>().connectedBody = null;
Destroy(emptyObject);
objectInHand = null;
}
}
Я бы хотел, чтобы мой объект сохранял свою силу при выпуске и работал как AddForce (), но я просто не могу заставить его работать должным образом таким образом. Я делаю это неправильно? Возможно ли это без использования AddForce ()?
Заранее спасибо