Сфера гравитации с персонажем гуманоидной ходьбы - PullRequest
2 голосов
/ 08 февраля 2020

Я очень новичок в Unity, я слежу за рядом видеоуроков и других тем с близкими задачами в примерах.

Проблема должна быть общей для новичков ie, однако я еще не сделал нашел ответ.

Чтобы переместить капсулу по сфере, я использовал PlayerMovementScript.cs в капсуле Player Инспектор:

public class PlayerMovementScript : MonoBehaviour {
    public float moveSpeed;
    private Vector3 moveDirection;
    void Update()
    {
        moveDirection = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")).normalized;
    }
    void FixedUpdate()
    {
        GetComponent<Rigidbody>().MovePosition(GetComponent<Rigidbody>().position + transform.TransformDirection(moveDirection) * moveSpeed * Time.deltaTime);
    }
}

и PlayerGravityBody.cs :

public class PlayerGravityBody : MonoBehaviour {
    public PlanetScript attractorPlanet;
    private Transform playerTransform;
    void Start()
    {
        GetComponent<Rigidbody>().useGravity = false;
        GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;
        playerTransform = transform;
    }
    void FixedUpdate()
    {
        if (attractorPlanet)
        {
            attractorPlanet.Attract(playerTransform);
        }
    }
}

прикреплен к PlanetScript.cs :

public class PlanetScript : MonoBehaviour {
    public float gravity = -12;
    public void Attract(Transform playerTransform)
    {
        Vector3 gravityUp = (playerTransform.position - transform.position).normalized;
        Vector3 localUp = playerTransform.up;
        playerTransform.GetComponent<Rigidbody>().AddForce(gravityUp * gravity);
        Quaternion targetRotation = Quaternion.FromToRotation(localUp, gravityUp) * playerTransform.rotation;
        playerTransform.rotation = Quaternion.Slerp(playerTransform.rotation, targetRotation, 50f * Time.deltaTime);
    }
}

Работает нормально, как и ожидалось в приведенных примерах, жесткая капсула тело движется вокруг сферы с отдельными кубами, включая меня sh рендерер и меня sh сфера и сферический коллайдер:

enter image description here

я пытаюсь построить 3D-игру, в которой персонаж-гуманоид анимации обходит сферу pl anet.

Я пытаюсь выяснить, какой метод моделирования и анимации должен быть наиболее подходящим в моем случае, если моя цель - архивировать персонаж с желаемым результатом способности двигаться с ходьбой t вперед, остановка без действия, поворот лицевой стороны тела с изменением направления вперед, если идет вправо или влево с помощью кнопок со стрелками, и go назад.

Я скачал Анимация ходьбы и добавил его в проект с тем же PlayerGravityBody.cs , PlanetScript.cs и для управления другим PlayerAnimationControl.cs сценарием:

public class PlayerAnimationControl : MonoBehaviour
{
    public Animator anim;
    void Update()
    {
        anim.SetFloat("vertical", Input.GetAxis("Vertical"));
        anim.SetFloat("horizontal", Input.GetAxis("Horizontal"));
    }
}

enter image description here

подключен к настройке контроллера аниматора:

enter image description here

Я не уверен , если я проверяю подходящую анимацию должным образом, в Motion я вижу mixamo.com, так что кажется, что я использую или делаю что-то неправильно с попыткой прикрепить движение для изменения направления, и я не знаю, как L oop В этом случае следует использовать время, но основная проблема заключается в том, что анимация не идет по поверхности pl anet.

Быстро или медленно, в зависимости от значения силы тяжести, которое в моем случае равно -12 , он начинает идти над сферой, непрерывно окружая ее накопление и постепенно проходит, вниз под сферной поверхностью пл anet, тонет, как будто постепенно входит в воду, вот так:

enter image description here

Любое руководство, совет или пример будут полезны

...