Перемещение кабана )

Физика в Unity

Перемещение кабана )

Сообщение json76 09 май 2014, 14:40

Добрый день ! Новичок в юнити, возможно вопрос простой но поиск в интернете не дает результата.
Есть 3д модель с анимацией для животного ( кабана ) ( вид по умолчанию 2д сверху ), есть игровое поле, нужно заставить ходить его по клеткам. Допустим поле 20х20 условных клеток нужно чтобы он перешел например из клетки [1,1] в клетку [2,2].

1) Сначала использовал присвоение transform.position, rotation, но выглядит такое перемещение резкое и топорно, не подходит.

2) Потом начал делать анимацию перемещения из точки (xa,ya) в (xb,yb), модель можно переместить плавно, но проблема возникла с поворотом, когда перемещается по диагонали а смотрит в другую сторону. Почти спасло решение на базе Quaternion.RotateTowards лучше чем п.1. но все равно вращение оно не естественное получается как-то тупо поворот вокруг центральной оси.

3) Решил что кабан наверное должен быть с физикой т.е. не сразу стартовать с постоянной скоростью для перемещения, а ускоряться замедляться и вращение должно быть не просто вокруг своей оси а он должен оббегать некую кривую т.е. как автомобиль или мотоцикл на повороте действуют, они же не вокруг своей оси поворачиваются а проезжают некую кривую.
Отсюда решил что наверное правильным будет использование Rigidbody.
Но не нашел примеров как сделать физику перемещения из точки (xa.ya) в (xb,yb) с разворотом ( по кривой а не вращением вокруг оси ).
Подскажите как это сделать можно ?

4) Возможно есть более правильное решение о котором я не догадываюсь ?
json76
UNец
 
Сообщения: 46
Зарегистрирован: 09 май 2014, 14:23

Re: Перемещение кабана )

Сообщение Mumboo 10 май 2014, 09:15

Как вариант: просто всегда двигать персонажа вперед:
Синтаксис:
Используется csharp
transform.position = Vector3.MoveTowards(transform.position, transform.forward, speed);
 

и поворачивать кабана плавно:
Синтаксис:
Используется csharp
Quaternion rot = Quaternion.LookRotation(target- transform.position);
        rot.eulerAngles = new Vector3(0, rot.eulerAngles.y, 0);
        nav.transform.rotation = Quaternion.Slerp(transform.rotation, rot, Time.deltaTime * rotationSpeed);
 

где speed - скорость передвижения, rotationSpeed - скорость вращения, target - позиция клетки, в которую надо двигаться
Mumboo
UNITрон
 
Сообщения: 166
Зарегистрирован: 22 май 2013, 22:12


Вернуться в PhysX

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1