c# - 玩家在相机方向移动并且能够在没有动画的情况下跳跃
问题描述
我正在尝试创建一个允许我的玩家跟随相机方向的代码,但我无法实现快速而不是基于动画的跳跃。
我看过很多 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 轴,因为我的身体有问题使用影响玩家变形的平台时变形。我正在制作的游戏是一个平台游戏,所以跳跃是必不可少的,但无法转向新的方向会使游戏过于线性。
解决方案
推荐阅读
- java - 在 ant 中为 JavaFX 自包含应用程序设置运行时环境变量
- c# - Discord.NET c#获取特定用户的角色
- apache-kafka - 获取正在运行的 Kafka 集群上的所有属性?
- kotlin - 类内通用递归函数的 Kotlin 类型不匹配
- asp.net-core - EF Core Data 注释必须大于其他字段
- python - Python 文件未读取文本文件的内容
- php - Laravel-echo-server 没有连接客户端到服务器
- javascript - 点击后不要滚动到顶部
- c# - 在 ContinueWith 操作中访问 ContinueWith 返回的任务是好是坏?
- javascript - 如何将 HTML 和 JS 功能添加到 React 组件?