Игрок перестает двигаться, направление персонажа сбрасывается [Unity 2D] - PullRequest
0 голосов
/ 17 июня 2020

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

Также как я могу сделать плавные повороты из стороны в сторону противоположной площадки?

Вот мой код:

    [SerializeField] float driveSpeed = 5f;
 //state
 Rigidbody2D myRigidbody;
 // Start is called before the first frame update
 void Start()
 {
     myRigidbody = GetComponent<Rigidbody2D>();
 }
 // Update is called once per frame
 void Update()
 {
     Move();        
 }

 private void Move()
 {
     //Control of velocity of the car
     float HorizontalcontrolThrow = CrossPlatformInputManager.GetAxis("Horizontal"); // Value between -1 to 1
     float VerticalcontrolThrow = CrossPlatformInputManager.GetAxis("Vertical"); // Value between -1 to 1
     Vector2 playerVelocity = new Vector2(HorizontalcontrolThrow * driveSpeed, VerticalcontrolThrow * driveSpeed);
     myRigidbody.velocity =playerVelocity;


     **//Direction of the car**
     Vector2 direction = new Vector2(HorizontalcontrolThrow, VerticalcontrolThrow);
     float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
     myRigidbody.rotation = angle;
 }

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Похоже, это может быть связано с тем, что HorizontalcontrolThrow и VerticalcontrolThrow будут сброшены, когда вы отпустите элементы управления. Если он возвращается в исходную ориентацию, то до тех пор, пока вы не переместитесь, эти два значения будут иметь значения по умолчанию. Затем вы двигаетесь, и это влияет на вращение. Но когда вы отпускаете элементы управления, эти значения снова возвращаются к начальным значениям, как и ваше вращение.

Поэтому вам нужно попытаться отделить HorizontalcontrolThrow и VerticalcontrolThrow от остальной части кода, который должен быть активирован только тогда, когда хотя бы одна из этих двух переменных не имеет значения по умолчанию (я не могу вспомнить, что функции оси возвращают в данный момент).

Изменить:

An Оператора IF должно хватить (грубый псевдокод):

if (horizontalAxis != default || verticalAxis != default)
{
    Rotate/Move
}
0 голосов
/ 20 июня 2020

Я решил вращение привязки, используя Quaternion при вращении, иссиу, который у меня был с ним, заключался в том, чтобы преобразовать его из 3D в 2d с помощью руководства этого клипа: youtube.com/watch?v=mKLp-2iseDc и внес свои коррективы, он работает нормально!

0 голосов
/ 18 июня 2020

Я не уверен в этом, но, возможно, именно та последняя строка "myRigidbody.rotation = angle", вызываемая в каждом кадре, заставляет вашу машину сбрасывать свое вращение. Возможно, измените его на «myRigidbody.rotation * = angle» или «myRigidbody.rotation + = angle».

...