c# - 为什么 CharacterController 运动时 CharacterController.velocity 的 x 和 z 值始终为 0?
问题描述
我有一个附加到游戏对象的CharacterController组件。
在下面我的代码的简化版本中,我将该控制器的 x 和 z 速度分配给 Vector3。
[SerializeField]
private CharacterController controller;
private Vector3 characterVelocity;
private Vector3 horizontalVelocity;
private float realSpeed;
void Update()
{
characterVelocity = controller.velocity;
horizontalVelocity = new Vector3(controller.velocity.x, 0, controller.velocity.z);
realSpeed = horizontalVelocity.magnitude;
}
我使用的脚本与 Unity 文档用于CharacterController.Move
. 如上述示例所示,既CharacterController.Move
用于水平运动,又用于跳跃,似乎使 x 和 z 无效CharacterController.velocity
在调试中查看 Inspector 窗口时,Vector3“水平速度”字段应显示 CharacterController 沿 x 和 z 平面移动的速度。但是当玩家移动时,这些字段保持为 0,如下图所示:
当角色跳跃时,y 速度按预期显示它的数据。为什么 x 和 z 值不显示任何数据?
解决方案
将您的CharacterController.Move
呼叫合并为一个呼叫CharacterController.Move
。作为CharacterController.velocity
国家的文件(强调我的):
返回的速度只是调用
CharacterController.Move
or之前和之后当前时间步长的距离差CharacterController.SimpleMove
。
也就是说,它只返回一次调用前后的差异——而不是简单地返回任意数量的调用。
推荐阅读
- php - 从 Header 请求中提取 cookie 值
- php - 我正在尝试获取存储在页面中数据库中的图像,但我无法在 laravel 中这样做
- yaml - 在 Jenkins 脚本化管道中编写 Yaml 文件
- plsql - Oracle PL/SQL - 检查数字格式和掩码
- javascript - 为什么我的函数不能将数字减少到一位数?
- java - 设置复系数数组,避免前导零
- r - 优势比、风险比和 Epitools 包。何时分析应仅依赖交叉表并取决于 tidyverse 环境
- html - 如何在我的网站中切换多种英语和阿拉伯语?
- python - Django保存具有唯一约束的表单
- encryption - 如何为画面生成 SAML SSO