Никак не получается разобраться с передвижением нескольких объектов по сфере с гравитацией
Когда объект один - проблем нет, движение равномерное, прямолинейное
Как только вводится на сцену еще один объект на который воздействует гравитация - движение объектов искажается, движутся не вперёд, а вперед-вбок, а также скорость меняется в зависимости от положения на сфере
Подскажите, пожалуйста, в чем здесь проблема?
Я, наверное, не до конца разобрался с векторами, поэтому не получается найти ошибку, уже всю голову сломал
Этот скрипт висит на сфере:
Синтаксис:
Используется csharp
public float _gravity = -9.81f;
public GameObject[] _snakes;
void Update()
{
Vector3 _gravityUP;
Vector3 _bodyUP;
Quaternion _targetRotation;
_snakes = GameObject.FindGameObjectsWithTag("SnakeMain");
for (int i = 0; i < _snakes.Length; ++i)
{
_gravityUP = (_snakes[i].transform.position - transform.position).normalized;
_bodyUP = _snakes[i].transform.up;
_snakes[i].GetComponent<Rigidbody> ().AddForce (_gravityUP * _gravity);
_targetRotation = Quaternion.FromToRotation(_bodyUP, _gravityUP) * _snakes[i].transform.rotation;
_snakes[i].transform.rotation = Quaternion.Slerp(_snakes[i].transform.rotation, _targetRotation, 50 / Time.deltaTime);
_snakes[i].GetComponent<Rigidbody>().transform.Translate(Vector3.forward * Time.deltaTime * 4);
}
}
public GameObject[] _snakes;
void Update()
{
Vector3 _gravityUP;
Vector3 _bodyUP;
Quaternion _targetRotation;
_snakes = GameObject.FindGameObjectsWithTag("SnakeMain");
for (int i = 0; i < _snakes.Length; ++i)
{
_gravityUP = (_snakes[i].transform.position - transform.position).normalized;
_bodyUP = _snakes[i].transform.up;
_snakes[i].GetComponent<Rigidbody> ().AddForce (_gravityUP * _gravity);
_targetRotation = Quaternion.FromToRotation(_bodyUP, _gravityUP) * _snakes[i].transform.rotation;
_snakes[i].transform.rotation = Quaternion.Slerp(_snakes[i].transform.rotation, _targetRotation, 50 / Time.deltaTime);
_snakes[i].GetComponent<Rigidbody>().transform.Translate(Vector3.forward * Time.deltaTime * 4);
}
}
А этот на объектах, что должны притягиваться:
Синтаксис:
Используется csharp
void Start () {
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;
GetComponent<Rigidbody>().useGravity = false;
}
Изначальный вариант скрипта взял отсюда и переделал для захвата всех риждитбоди:
https://github.com/tiriksan/Unity-test/ ... s/_Scripts
Спасибо.