【问题标题】:Unity 2D Android ball jumping script AddForceUnity 2D Android 跳球脚本 AddForce
【发布时间】:2016-01-29 21:10:00
【问题描述】:

我是 Unity 的新手,我正在努力学习基础知识,我在学校学习物理(十年级)。

到目前为止我所做的 - 在我的项目中添加了一个球,并使用 RigidBody 对其使用重力。

当有一些触摸输入时,我想让球在空中突然跳跃,例如 - 飞扬的小鸟。

我的脚本是基本的:

void Update()
{
    if (Input.touchCount == 1)
    {
        GetComponent<Rigidbody>().AddForce(new Vector2(0, 10), ForceMode.Impulse);
    }
}

使用此脚本,球正在下落(重力),当我触摸脚本时,Y 坐标会发生变化,但它是突然发生的(没有动画),它会像 ~1 一样变化并继续下落(我无法保持屏幕上的球),我也可以让它只跳一次,如果我按多次它只会跳一次,你可以在这里看到: https://vid.me/aRfk

感谢您的帮助。

【问题讨论】:

    标签: android unity3d


    【解决方案1】:

    我在 Unity3D 编辑器中创建了相同的场景,并使用与您相同的设置进行了一些操作。是的,我遇到了类似的问题,在 Update 上增加了力度,在 FixedUpdate 上也(但更少)。但是在 LateUpdate 上加力似乎没问题。

    这是我的代码:

    public Rigidbody2D rb2dBall;
    
    void LateUpdate()
    {
        if(Input.GetKeyUp(KeyCode.Space))
        {
            rb2dBall.AddForce (Vector2.up * 10f, ForceMode2D.Impulse);
        }
    }
    

    我还打开了插值:

    我不能说为什么物理学会像这样,可能是 Unity3D 5.X 中的一些错误,因为在 FixedUpdate 上它应该可以正常工作。

    【讨论】:

    【解决方案2】:

    首先,在 Unity 中处理物理时,强烈建议使用 FixedUpdate 方法,而不是 Update。您可以查看此链接http://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html

    第二件事是,也许你没有对球施加这么大的力,产生相当冲量所需的力取决于你的球刚体的质量。所以尝试做这样的事情:

    GetComponent<Rigidbody>().AddForce(Vector2.up * 100, ForceMode.Impulse);
    

    更改固定值100 以调整您的需要。

    【讨论】:

    • 我将它更改为 FixedUpdate 和相同的结果,所以我将它乘以 100000 而不是 100,同样的问题。我不知道为什么。
    • 这很奇怪。这个脚本是唯一存在于您的球类游戏对象中的吗?另外,你能展示一下你的球的刚体是如何配置的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多