AddRelativeForce () не добавляет силу относительно - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу добавить силу к твердому телу, перетаскивая мышь на экране.даже если я преобразовал координаты экрана в мировые координаты, а вращение твердого тела смотрит на координаты, где отпущена кнопка мыши, когда я добавляю относительную силу с помощью AddRelativeForce, шар направляется прямо вперед.

public GameObject ballPrefab;
GameObject ballInstance;

private float force=15;
Vector3 mouseStart;
Vector3 mouseStop;
float minDragDistance=15f;
float zDepth=20f;

void FixedUpdate()
{
    if (Input.GetMouseButtonDown(0))
    {
        mouseStart = Input.mousePosition;
    }
    if (Input.GetMouseButtonUp(0))
    {
        mouseStop = Input.mousePosition;

        if(Vector3.Distance(mouseStop, mouseStart) > minDragDistance)
        {
            //Here I am getting the position on screen coordinates to throw the rigidbody to                
            Vector3 hitPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, zDepth);

            //I transform screen coordinates to world coordinates
            Vector3 hitPoss = Camera.main.ScreenToWorldPoint(hitPos);
            //transforming rigidbody to look at hitpos direction             
            ballInstance.transform.LookAt(hitPoss);
            //adding relative force
            ballInstance.GetComponent<Rigidbody>().AddRelativeForce(Vector3.forward * force, ForceMode.Force);
        }
    }
}

Как япрокомментировал в коде, я изменяю свойства transform.rotation моего игрового объекта с помощью функции LookAt(), и когда я проверяю инспектор, он меняет вращение вправо.но на AddRelativeForce(Vector3.forward) он напрямую идет вперед по глобальному направлению z вместо локально измененного направления z.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

AddRelativeForce применяет силу относительно ориентации родительского объекта, что на самом деле не имеет смысла, так как родительского объекта нет. Вместо:

ballInstance.GetComponent<Rigidbody>().AddRelativeForce(Vector3.forward * force, ForceMode.Force);

Попытка:

ballInstance.GetComponent<Rigidbody>().AddForce(ballInstance.transform.forward * force, ForceMode.Force);

Это должно работать, так как вместо использования глобального переднего вектора Vector3.forward вы используете передний вектор своего инстанса ballInstance.transform.forward

0 голосов
/ 16 апреля 2019

Изменение преобразования не вступит в силу немедленно, вместо этого следует установить Rigidbody.rotation.

Проверьте документ: https://docs.unity3d.com/ScriptReference/Rigidbody-rotation.html

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