Как сгладить смену направления игрока? - PullRequest
0 голосов
/ 02 июля 2019

Я хочу сгладить изменение направления игрока.У меня есть простой сценарий движения, но когда я иду вперед и начинаю двигаться назад, я хочу, чтобы мой персонаж начал «скользить».В gif файле есть пример - https://imgur.com/uSL1Gd1. Я пытался это сделать, но это безумие (

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

public class Moving : MonoBehaviour
{
    [SerializeField]
    Transform frogTransform;
    Vector3 now = new Vector3();
    Vector3 Now
    {
        get
        {
            if (now == null)
            {
                return Vector3.zero;
            }
            else
            {
                return now;
            }
        }
    }

    void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.W))
        {
            now = Vector3.Lerp(now, Vector3.forward, 0.5f); //this doesn't help me (nothing changes)
            frogTransform.Translate(now * 0.1f);
            now = Vector3.forward;
        }
        else if (Input.GetKey(KeyCode.S))
        {
            now = Vector3.Lerp(now, Vector3.back, 0.5f);
            frogTransform.Translate(now * 0.1f);
            now = Vector3.back;
        }
        if (Input.GetKey(KeyCode.D))
        {
            now = Vector3.Lerp(now, Vector3.right, 0.5f);
            frogTransform.Translate(now * 0.1f);
            now = Vector3.right;
        }
        else if (Input.GetKey(KeyCode.A))
        {
            now = Vector3.Lerp(now, Vector3.left, 0.5f);
            frogTransform.Translate(now * 0.1f);
            now = Vector3.left;
        }
    }
}

1 Ответ

1 голос
/ 02 июля 2019

Из вашего ответа я вижу, что вы используете Transform.Translate, и это не инструмент для применения физики Unity (и создания эффектов в виде скольжения).

Чтобы применить эффект слайда, вы можете добавить Rigidbody к вашему игровому объекту.

Тогда вы можете использовать Rigidbody.AddForce для направления вашего движения.

Как только вы измените направление / силу, вы увидите эффект скольжения. Учтите, что вы можете настроить массу и сопротивление вашего твердого тела, чтобы получить различные эффекты скольжения.

Ваш код станет.

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

public class Moving : MonoBehaviour
{
    [SerializeField] Rigidbody rigidbody;

    [SerializeField] float accelerationForce = 5f;

    void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.W))
            rigidbody.AddForce(Vector3.forward * accelerationForce, ForceMode.Impulse);

        if (Input.GetKey(KeyCode.S))
            rigidbody.AddForce(Vector3.back * accelerationForce, ForceMode.Impulse);

        if (Input.GetKey(KeyCode.D))
            rigidbody.AddForce(Vector3.right * accelerationForce, ForceMode.Impulse);

        if (Input.GetKey(KeyCode.A))
            rigidbody.AddForce(Vector3.left * accelerationForce, ForceMode.Impulse);
    }
}

Вы также можете проверить этот учебник и этот другой учебник .

...