жесткое тело. скорость не работает плавно в единстве - PullRequest
0 голосов
/ 09 июля 2020

написал сценарий для перемещения игрока путем перетаскивания, поэтому сначала я переместил игрока с помощью transform.position, и он работал отлично, поэтому я сказал, что пришло время переместить его с помощью твердого тела, чтобы он сталкивался с объектами, поэтому я попытался жесткое тело. скорость, но он не движется плавно. так как заставить это работать как transform.position?

это сценарий:

void Update()
{
    if(Input.touchCount > 0)
    {
       Touch touch = Input.GetTouch(0);
     
        if (touch.phase == TouchPhase.Moved)
        {
            transform.position = new Vector3(
            transform.position.x + touch.deltaPosition.x * speedmodifier,
            transform.position.y,
            transform.position.z + touch.deltaPosition.y * speedmodifier);
             
        }
    }
}

1 Ответ

1 голос
/ 09 июля 2020

При использовании Rigidbody вы хотите делать все связанные с физикой вещи в FixedUpdate. тогда вы, вероятно, не будете использовать velocity, но установите фиксированные позиции, используя Rigidbody.MovePosition

Однако вы все равно должны получать ввод пользователя через Update.

Я бы отдельно логи c. Что-то вроде

[SerializeField] private Rigidbody _rigidbody;
private Vector3 targetPosition;

private void Start()
{
    targetPosition = transform.position;
    if(!_rigidbody) _rigidbody = GetComponent<Rigidbody>();
    // since this rigibody is going to be moved via code not Physics it should be kinemtic
    _rigibody.isKinematic = true;
    // in order to smooth the movement
    _rigidbody.interpolation = RigidbodyInterpolation.Interpolate;
}

void Update()
{
    if(Input.touchCount > 0)
    {
       Touch touch = Input.GetTouch(0);
     
        if (touch.phase == TouchPhase.Moved)
        {
            targetPosition += Vector3.right * touch.deltaPosition.x * speedmodifier;
            targetPosition += Vector3.forward * touch.deltaPosition.y * speedmodifier;      
        }
    }
}

private void FixedUpdate()
{
    _rigidbody.MovePosition(targetPosition);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...