c# - 让玩家在 Unity3D 中正确跳跃

标签 c# unity3d

我还在学习基础知识,所以请稍微温和一点。我正在研究滚球游戏的 ActionScript 。我已经让滚动工作得很好,但现在我正在尝试添加跳跃的能力。

在我的例子中,“玩家”是一个基本的球体。我想要完成的是,当空间被按下时,球会按照它当前滚动的方向跳到空中。

这是我自己尝试过的,但给出了非常奇怪的结果:

float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");

Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

if (Input.GetKey("space"))
{
    transform.position += transform.up * 20 * Time.deltaTime;
}

rb.AddForce(movement * speed); //rb = RigidBody

这导致球有时会跳向错误的方向,或者只是加速到某个方向而根本不跳。所以很明显我越来越近了,但还没有到那一步。谁能解释我做错了什么以及如何解决?

不寻求快速修复!不要从中学到任何东西。

最佳答案

试试这个:)

if (Input.GetKey("space"))
{
    rigidbody.AddForce(new Vector3(0, yourJumpForce, 0), ForceMode.Impulse);
}

您可能还想调整刚体中的重力设置以获得您想要的跳跃!

编辑 解释:

我认为这可能是因为您将运动应用到您的Rigidbody,但您的跳跃方法应用到Transform 本身。

Rigidbody 是一个物理组件(参见 docs.unity3d.com/ScriptReference/Rigidbody.html),其中 Transform 与位置、旋转和缩放有关.

跳跃可以被认为是一个物理问题 - 因此改变跳跃与物理有关(Rigidbody),而不是位置(Transform)。我倾向于使用 Transform 来完成所有移动代码,因为您正在移动位置,并且使用 Rigidbody 来完成所有基于物理的工作,因为您正在将物理应用到 游戏对象! :)

关于c# - 让玩家在 Unity3D 中正确跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34038224/

相关文章:

c# - 如何在运行时在 Unity 中更改对象的图层?

unity3d - unity : Difference between Audio Source, 音频监听器和音频剪辑

c# - Unity Android 前置摄像头 WTF 错误

c# - 我的扩展方法可以变得更好吗? BlockBlobClient GetBlockById dotnet

c# - IL 使用 Reflection.Emit 调用带有 2 个数组参数的方法

c# - 使用最小起订量模拟 HttpContext.Current.Server.MapPath?

c# - 任务计划程序定期停止运行 C# 控制台应用程序

c# - 如何在不抛出异常的情况下取消等待超时的任务

c# - 从 base64 解码后的嘈杂音频剪辑

c# - 诸如 Mathf.Ceil 之类的任何东西都可以理解数字的大小,无论是 +/- 吗?