Наличие жесткого тела для отслеживания (соответствия) позиции игрового объекта в Unity - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь использовать addForceAtPosition, чтобы rigidBody (клон) следовал за gameObject (целью), точнее go в той же позиции и повороте. Это мой код:

        for(var points=0;points<3;points++)
        {
            Vector3 pr=Vector3.zero;
            switch(points)    //get some test points used as anchors
            {
                case 0: pr= new Vector3(0, 0, 0); break;
                case 1: pr = new Vector3(0, 0.05f, 0); break;
                case 2: pr = new Vector3(0, 0, 0.05f); break;
            }
            p = clone.transform.TransformPoint(pr);    //get the clone test point world position
            v = clone.GetPointVelocity(p);             //and its velocity
            pc = target.transform.TransformPoint(pr);    //get the target body test point world position

            Vector3 dist= (pc - (p + v * kv));    //add a part of the velocity to the position to reduce "elastic effect" (that part works)
            Vector3 force = dist * k;
            clone.AddForceAtPosition(force, p, ForceMode.Impulse);
        }

Клон перемещается в позицию вокруг цели, но на заданном расстоянии, и если цель вращается, клон перемещается вокруг нее, сохраняя относительную позицию к ней. Кажется, это проблема относительного / абсолютного положения, но я не вижу, где я допустил ошибку.

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Целевой родитель имеет масштаб 100, тогда target.transform.TransformPoint(pr) возвращает точку, удаленную от объекта.

target.transform.TransformPoint(pr*0.01) решил мою проблему.

0 голосов
/ 22 марта 2020

Чтобы сделать то, что вы говорите, установите Rigidbody на the same position and rotation. в качестве другого объекта, вместо этого используйте MovePosition и MoveRotation

private void FixedUpdate ()
{
    clone.MovePosition(targetTransform.position);
    clone.MoveRotation(targetTransform.rotation);
}
...