Игрок телепортируется вместо плавного движения - PullRequest
0 голосов
/ 14 октября 2019

Когда я впервые закодировал движение игрока, все было хорошо, за исключением одного: когда он сталкивался со стенами, он вибрировал / дрожал. Поэтому я заменил transform.Translate (), который я использовал, на Rigidbody2D.Moveposition ();Оно работало завораживающе. Но теперь всякий раз, когда я двигаюсь, он вибрирует / что-то вроде телепортации, и он не двигается плавно.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{


    private Rigidbody2D rigidbody2d;


    float MovementX = 0;
    float MovementY = 0;

    public float Speed = 5f;


    void Start()
    {
        rigidbody2d = GetComponent<Rigidbody2D>();


    }


    void Update()
    {




        if (MovementX < 0)
            transform.localScale = new Vector2(-1, 1);
        if (MovementX > 0)
            transform.localScale = new Vector2(1, 1);


        //transform.Translate(Movement);
        //rigidbody2d.MovePosition(Movement);
        //rigidbody2d.AddForce(Movement * Speed);



    }

    private void FixedUpdate()
    {
        MovementX = Input.GetAxis("Horizontal") * Speed * Time.deltaTime;
        MovementY = Input.GetAxis("Vertical") * Speed * Time.deltaTime;

        //MovementX = movementJoystick.Horizontal * Speed * Time.deltaTime;
        //MovementY = movementJoystick.Vertical * Speed * Time.deltaTime;

        Vector2 Movement = new Vector2(transform.position.x + MovementX, transform.position.y + MovementY);
        rigidbody2d.MovePosition(Movement);
    }


}

Как я уже говорил, игрок должен двигаться плавно, но это не так. Если хотите, я могу попробовать связать видео с геймплеем.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 15 октября 2019

У Rigidbody2D есть свойство, называемое скоростью. Если вы установите скорость вашего твердого тела в обновлении вашего класса, это должно решить вашу проблему. Код может выглядеть примерно так:

rigidbody2d.velocity = new Vector2(MovementX, MovementY);;
0 голосов
/ 15 октября 2019

Я решил, установив параметр fixedTimestep от 0,02 до 0,005. Кажется странным, но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...