жесткое тело. скорость не работает плавно в единстве

написал сценарий для перемещения игрока путем перетаскивания, поэтому сначала я переместил игрока с помощью transform.position, и он работал отлично, поэтому я сказал, что пришло время переместить его с помощью жесткого тела, чтобы он сталкивался с объектами, поэтому я попробовал жесткое тело.velocity но это не двигается плавно. так как заставить это работать как 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);
             
        }
    }
}

person Mohamad    schedule 09.07.2020    source источник


Ответы (1)


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

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

Я бы разделил логику. Что-то вроде возможно

[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);
}
person derHugo    schedule 09.07.2020
comment
Это не столкновение с предметами. - person Mohamad; 13.07.2020