c# - Unity3D 播放器移动:抬头让我的播放器跳跃
问题描述
如果我在抬头时向前移动,我的玩家会跳跃或至少尝试飞行。如果我按下空格键并在抬头的同时向前移动,我的玩家会跳得更高。老实说,我不知道发生了什么。我的预测是前锋。如果我向上看,向前是相对于我正在寻找的地方。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class P_MOVEMENT : MonoBehaviour
{
private float ACCELERATION = 10.0f;
private float GRAVITY = -5.0f;
private float SPEED = 5.0f;
private float RUNNING_SPEED = 2.0f;
private float JUMP_IMPULSE = 2.5f;
private bool isRunning = false;
CharacterController P_CC;
Vector3 P_MOVE;
//Camera Moving Mouse
private float X_AXIS = 0.0f;
private float Y_AXIS = 0.0f;
private float CAMERA_SPEED = 2.0f;
// Start is called before the first frame update
void Start()
{
P_CC = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
if(P_CC.isGrounded)
{
// Player Movement
P_MOVE = transform.forward * Input.GetAxis("Vertical") + transform.right * Input.GetAxis("Horizontal");
// Special Cases Check
// Running
isRunning = ( Input.GetKey(KeyCode.LeftShift) ) ? true : false;
P_MOVE = (isRunning) ? P_MOVE * SPEED * RUNNING_SPEED : P_MOVE * SPEED;
// Jumping
if(Input.GetAxis("Jump") > 0)
{
P_MOVE += Vector3.up * JUMP_IMPULSE;
}
}
else
{
P_MOVE += Vector3.up * GRAVITY * Time.deltaTime;
}
// Player Camera Movement
X_AXIS += CAMERA_SPEED * Input.GetAxis("Mouse X");
Y_AXIS -= CAMERA_SPEED * Input.GetAxis("Mouse Y");
// Restrict 90 Degree Up and Down
Y_AXIS = Mathf.Clamp(Y_AXIS, -60f, 90f);
// Update Rotation
transform.eulerAngles = new Vector3(Y_AXIS, X_AXIS, 0.0f);
}
void FixedUpdate()
{
P_CC.Move(P_MOVE * Time.deltaTime);
}
}
解决方案
你可能是对的。您的 transform.forward 是关于本地 GameObject 坐标而不是全局坐标。
您可以尝试仅更新 transform.forward.x 和 transform.forward.z。所以你会忽略transform.forward.y。这样玩家不应该向上移动。
像这样的东西:
P_MOVE = transfrom.forward.x * Input.GetAxis("Vertical") + transform.forward.z * Input.GetAxis("Vertical") + transform.right * Input.GetAxis("Horizontal");
推荐阅读
- python - OpenWeatherMap API,我如何获取温度?
- graphql - 如何使用 Camel GraphQL 组件替换 GraphQL 查询中的变量
- json - 无法将 animation.json 文件加载到我的颤振项目中
- laravel - Eloquent 查询按问题排序:始终返回 SQLSTATE[23000]:违反完整性约束:1052
- javascript - shadow dom 中子元素的使用
是否有任何约束阻止
<thead>
,<tbody>
等<tr>
插入影子 DOM?给定以下示例:
<script> class Table extends HTMLElement { constructor() { super();
- awk - 如果pattern匹配两行,如何融合两行的信息?
- javascript - React Javascript,在未定义的数组中找到并跳过它
- android-studio - Android 工作室,gradle 分发
- python - 调度 Discord Python 任务
- mysql - mysql中2个值的除法