Как я могу добавить прыжок на контроллер плеера? - PullRequest
0 голосов
/ 13 апреля 2020

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

Это скрипт контроллера игрока, прикрепленный к капсуле:

Это работало нормально, пока я не добавил часть прыжка. Вверху я добавил эти 3 строки:

public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;

Затем в Обновлении добавили:

if (controller.isGrounded && Input.GetButton("Jump"))
            {
                moveDirection.y = jumpSpeed;
            }
            moveDirection.y -= gravity * Time.deltaTime;
            controller.Move(moveDirection * Time.deltaTime);

Но у меня нет контроллера переменной.

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

public class PlayerController : MonoBehaviour
{
    public float speed = 10.0F;
    public float jumpSpeed = 8.0F;
    public float gravity = 20.0F;

    private Vector3 moveDirection = Vector3.zero;

    // Start is called before the first frame update
    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void Update()
    {
        float translation = Input.GetAxis("Vertical") * speed;
        float straffe = Input.GetAxis("Horizontal") * speed;

        translation *= Time.deltaTime;
        straffe *= Time.deltaTime;

        transform.Translate(straffe, 0, translation);

        if (controller.isGrounded && Input.GetButton("Jump"))
        {
            moveDirection.y = jumpSpeed;
        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);

        if (Input.GetKeyDown("escape"))
        {
            Cursor.lockState = CursorLockMode.Locked;
        }
    }
}

А вот сценарий просмотра мыши, прикрепленный к основной камере, которая является дочерней для капсулы:

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

public class CamMouseLook : MonoBehaviour
{
    public float sensitivity = 5.0f;
    public float smoothing = 2.0f;

    Vector2 mouseLook;
    Vector2 smoothV;

    GameObject character;

    // Start is called before the first frame update
    void Start()
    {
        character = this.transform.parent.gameObject;
    }

    // Update is called once per frame
    void Update()
    {
        var md = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));

        md = Vector2.Scale(md, new Vector2(sensitivity * smoothing, sensitivity * smoothing));
        smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
        smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);

        mouseLook += smoothV;

        mouseLook.y = Mathf.Clamp(mouseLook.y, -90f, 90f);

        transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
        character.transform.localRotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);
    }
}

1 Ответ

1 голос
/ 13 апреля 2020

Задумывались ли вы о применении силы?

public Rigidbody myphysic;
public float forceofjump = 100f; // or minor or more....

void Awake()
{
    myphysic= transform.GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (controller.isGrounded && Input.GetButton("Jump"))
        {
        myphysic.AddForce( transform.up * forceofjump, ForceMode.Impulse);
    }
}

Vector3.zero неверно, потому что все векторы движения установлены на ноль! поэтому = никаких действий!

или, например:

Vector3 moveDirection = new Vector3(0, 10, 0);

что это значит:

новый вектор3 (X = остановка, Y = 10 сил, Z = остановка);

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