首页 > 解决方案 > 玩家在相机方向移动并且能够在没有动画的情况下跳跃

问题描述

我正在尝试创建一个允许我的玩家跟随相机方向的代码,但我无法实现快速而不是基于动画的跳跃。

我看过很多 youtube 视频,但没有一个提供带有第三人称相机的跳跃机制。唯一有类似之处的是第一人称相机,但跳跃是基于动画的,我让它不兼容的那种关卡机制。

这是我的玩家移动代码

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

public class OldPlayerMovementScript : MonoBehaviour
{
    [SerializeField] private string mouseXInputName;
    [SerializeField] private float mouseSensitivity;
    CharacterController controller;

    public float speed = 5;

    float verticalVelocity;
    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        float x = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
        float z = Input.GetAxis("Vertical") * speed * Time.deltaTime;

        float mouseX = Input.GetAxis(mouseXInputName) * mouseSensitivity * Time.deltaTime;
        transform.Rotate(Vector3.up * mouseX);
        if (controller.isGrounded)
        {
            verticalVelocity = -1 * Time.deltaTime;

            if (Input.GetKeyDown(KeyCode.V))
            {
                verticalVelocity = 20 * Time.deltaTime;
            }
        }
        else
        {
            verticalVelocity -= 1 * Time.deltaTime;
        }
        Vector3 moveDelta = new Vector3(x, verticalVelocity, z);
        controller.Move(moveDelta);
    }
}


This is my Camera Code


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

public class PlayerLook : MonoBehaviour
{
    [SerializeField] private string mouseXInputName, mouseYInputName;
    [SerializeField] private float mouseSensitivity;

    //[SerializeField] private Transform playerBody;

    private float xAxisClamp;
    private void Awake()
    {
        LockCursor();
        xAxisClamp = 0.0f;
    }
    private void LockCursor()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }
    private void Update()
    {
        CameraRotation();
    }
    private void CameraRotation()
    {
        float mouseX = Input.GetAxis(mouseXInputName) * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis(mouseYInputName) * mouseSensitivity * Time.deltaTime;

        xAxisClamp += mouseY;

        if(xAxisClamp > 60.0f)
        {
            xAxisClamp = 60.0f;
            mouseY = 0.0f;
            ClampXAxisRotationToValue(300.0f);
        }
        else if (xAxisClamp < -60.0f)
        {
            xAxisClamp = -60.0f;
            mouseY = 0.0f;
            ClampXAxisRotationToValue(60.0f);
        }


        transform.Rotate(Vector3.left * mouseY);
       // playerBody.Rotate(Vector3.up * mouseX);
    }

    private void ClampXAxisRotationToValue(float value)
    {
        Vector3 eulerRotation = transform.eulerAngles;
        eulerRotation.x = value;
        transform.eulerAngles = eulerRotation;
    }
}

目前我可以将角色移动到相机的方向,但无论如何我似乎无法实现跳跃机制,我将玩家身体的旋转移动到 x 轴,因为我的身体有问题使用影响玩家变形的平台时变形。我正在制作的游戏是一个平台游戏,所以跳跃是必不可少的,但无法转向新的方向会使游戏过于线性。

标签: c#unity3d

解决方案


推荐阅读