Движение по направлению джостика с плавным поворотом

Программирование для iPhone & Android

Движение по направлению джостика с плавным поворотом

Сообщение f1rze 13 мар 2018, 19:44

Вообщем есть машинка вид сверху,есть один джостик на экране,как сделать такое движение,чтобы в какую сторону джостик отклонил туда машинка и ехала,но поворачивалась плавно, а не мгновенно.Прилагаю код ,где поворачивается мгновенно - куда джостик направишь,как сделать плавно долго гуглил,не смог найти решение.



Синтаксис:
Используется csharp
using UnityStandardAssets.CrossPlatformInput;
public class Player : MonoBehaviour {
public float moveForce = 5;
void FixedUpdate () {

                Vector3 moveVec = new Vector3(CrossPlatformInputManager.GetAxis ("Horizontal"), CrossPlatformInputManager.GetAxis ("Vertical"),4096) ;
                if (moveVec.x!=0 && moveVec.y!=0)
                        transform.rotation = Quaternion.LookRotation (moveVec,Vector3.back);
                rb.AddForce (moveVec* moveForce);
       
        }
}
f1rze
UNец
 
Сообщения: 4
Зарегистрирован: 13 мар 2018, 19:32

Re: Движение по направлению джостика с плавным поворотом

Сообщение Anonymyx 13 мар 2018, 20:41

Либо углы лерпить либо вектор...

Запоминаете кватернион:
Quaternion targetRotation;
...
targetRotation = Quaternion.LookRotation (moveVec,Vector3.back);

И потом вне условия лерпите:
transform.rotation = Quaternion.Slerp(transorm.rotation, targetRotation, rotationForce * Time.deltaTime);

Если используете физику для движения, то вращения задавайте через MoveRotation().
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Движение по направлению джостика с плавным поворотом

Сообщение f1rze 13 мар 2018, 22:56

Я потестил вот такой код,и там почему-то объект вбок или вверх движется медленнее чем по диагонали.Почему это происходит и как исправить?

Vector3 moveVec = new Vector3(CrossPlatformInputManager.GetAxis ("Horizontal"), CrossPlatformInputManager.GetAxis ("Vertical"),4096) ;
if (moveVec.x != 0 && moveVec.y != 0)
targetRotation = Quaternion.LookRotation (moveVec, Vector3.back);
transform.rotation= Quaternion.Slerp (transform.rotation, targetRotation, rotationForce * Time.deltaTime);
rb.AddForce (moveVec* moveForce);
f1rze
UNец
 
Сообщения: 4
Зарегистрирован: 13 мар 2018, 19:32

Re: Движение по направлению джостика с плавным поворотом

Сообщение Anonymyx 13 мар 2018, 23:26

Происходит потому что длина векторе увеличивается, т.е. становится * 1.4.
Т.е. представьте треугольник S-W-D (образно), стороны = 1, и длина вектора получается равной длине гипотенузы (W-D), т.е. Sqrt(1^2 + 1^2). = 1.4f
Попробуйте нормализовать вектор:
rb.AddForce (moveVec.normalized * moveForce);
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Движение по направлению джостика с плавным поворотом

Сообщение f1rze 14 мар 2018, 18:13

Вообщем я нормализовал вектор,но ничего не изменилось(

Синтаксис:
Используется csharp
void FixedUpdate () {
               Vector3 moveVec = new Vector3(CrossPlatformInputManager.GetAxis ("Horizontal"), CrossPlatformInputManager.GetAxis ("Vertical"),4096) ;
                if (moveVec.x != 0 && moveVec.y != 0)
                        targetRotation = Quaternion.LookRotation (moveVec, Vector3.back);
                transform.rotation= Quaternion.Slerp (transform.rotation, targetRotation, rotationForce * Time.deltaTime);
                rb.AddForce (moveVec.normalized* moveForce);
}
f1rze
UNец
 
Сообщения: 4
Зарегистрирован: 13 мар 2018, 19:32


Вернуться в iPhone & Android

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

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