1max1 писал(а):А тебе что было нужно?
Попробую объяснить на пальцах. Есть техника, которая выступает в качестве цели для дрона/сканера/зонда. У этого дрона/сканера/зонда есть ряд функций. Основной функцией является следование за целью держа дистанцию и высоту своего полета.
Когда игрок бездействует и машина стоит на месте, дрон/сканер/зонд через определенное время переходит в другой режим. Выбирается рандомный метод. Это может быть, плавная посадка и отключение двигателей, рандомное перемещение по точкам вокруг техники (не по кругу), вращение вокруг своей оси, проверка двигателей и т.д. Застопорился конкретно на том чтоб он вращался вокруг машины с условием соблюдения указанной дистанции.
transform.rotatearound частично решил проблему, дрон вращается вокруг машины.
Но есть одно большое но, когда под дроном оказывается какой то предмет ландшафта или сам ландшафт имеет разную высоту со всех сторон машины, перемещение по вертикали происходит рывками или ступенчато. Отсутствует плавность смены высоты.
Так удерживается позиция по высоте:
Используется csharp
Ray ray = new Ray (transform.position, -transform.up);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, height)) {
float pHeight = (height - hit.distance) / height;
Vector3 apForce = Vector3.up * pHeight * force;
rb.AddForce (apForce, ForceMode.Acceleration);
}
А так дрон следует за машиной:
Используется csharp
if (Vector3.Distance(transform.position, target.position) <= targetDistance) {
Vector3 tarDir = target.transform.position - transform.position;
tarDir.y = 0;
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (tarDir), 2 * Time.fixedDeltaTime);
} else {
Vector3 tarDir = target.transform.position - transform.position;
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (tarDir), 1 * Time.fixedDeltaTime);
if (Vector3.Distance (transform.position, target.position) > targetDistance)
rb.AddForce ((target.position - transform.position) * speed * Time.fixedDeltaTime);
}
С джоинтами пробовал играться, но на наклонных поверхностях происходит какая то вакханалия в перемещениях.