Как переместить объект с вращением из точки 10, 0, 0 в 30, 0, 0 и чтобы при перемещении объект крутился и когда он дошёл до точки то его rotation должен быть таким 0, 90, 0 я пробывал через такой код но значения у rotation другие
transform.position -= new Vector3(2, 0, 0);
transform.Rotate(Vector3.up * 250 * Time.deltaTime);
Из условия задачи абсолютно не ясно, какой из параметров задает все движение: время или скорость, если скорость, то чья именно, скорость вращения или перемещения?
Как ни крути, отталкиваться все равно придется от времени - его проще задать, а потом уже высчитывать конкретные скорости, чем наоборот. Использовал интерполяцию для вращения и для перемещения, хотя второе можно заменить обычным transform.position += скорость * Time.deltaTime
.
Для, скажем, таких параметров:
Получаем такой результат:
public class MoveRotator : MonoBehaviour {
public float timeToMove;
public Vector3 targetPosition;
public Vector3 targetRotation;
void Start() {
StartCoroutine(MoveRotate());
}
IEnumerator MoveRotate() {
Vector3 startPosition = transform.position;
Vector3 endPosition = targetPosition;
Quaternion startRotation = transform.rotation;
Quaternion endRotation = Quaternion.Euler(targetRotation.x, targetRotation.y, targetRotation.z);
float timer = 0;
while(timer < timeToMove) {
float t = timer / timeToMove;
transform.position = Vector3.Lerp(startPosition, endPosition, t);
transform.rotation = Quaternion.Lerp(startRotation, endRotation, t);
timer += Time.deltaTime;
yield return null;
}
}
}
Также стоит учитывать, что это пример в вакууме, и лично я бы не стал использовать для такого отдельный скрипт, такую корутину лучше запускать из другого класса или вообще использовать LeanTween, который к тому же бесплатный.
Думаю я знаю решение что поможет вам (я знаю их 2) Силами самого Unity и того что есть из коробки
public Transform target;
void Update (){
// для передвижения
transform.position =
Vector3.Lerp(transform.position, target.position, Time.deltaTime * 2);
// для поворота
transform.rotation =
Quaternion.Lerp(transform.rotation , target.rotation , Time.deltaTime * 2);
}
Но советую присмотреться к такой штуке как DOTween
Видео туториал решения вашей задачи
Удачи)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
я генерирую lightgallery c помощью следующего динамического скриптаВсе работает как нужно
Я не совсем понимаю, почему когда устанавливаю StreamSource для BitmapImage, он всегда будет null
Нажимается кнопка в игре, происходит действие и начинается отсчет (допустим 10 секунд), bool становится falseПосле прохождения таймера в 10с, значение...
У меня есть проект для моего колледжаВ нем я пытаюсь реализовать MVVM + WPF + EF6