【问题标题】:How can i give soccer ball a trajectory?我怎样才能给足球一个轨迹?
【发布时间】:2016-09-14 14:04:45
【问题描述】:

我是一名初学者,并试图在unity中制作点球射手游戏。我刚刚设置了场景并尝试将球射向球门柱。 当我射球时,它会飞向球门但不会落下,因为我是通过脚本射球的,它的重力关闭,运动学打开。

目前我有以下脚本:

    void Start () {
        startTime = Time.time;
        rb.GetComponent<Rigidbody>();
    }

void Update () {

        transform.position -= fakevel * Time.deltaTime;
        transform.position += fakeGravity * Time.deltaTime;
        fakevel *= 0.999f ;
}

    void OnTriggerEnter( Collider other ) {

            fakevel = new Vector3(0.01f, 0, 0) * 2000f;
            fakeGravity = new Vector3 (0 ,0.01f, 0)* 200f;
            y = -45.68312f;

            }    
        }

我尝试在某个特定位置启用重力并禁用运动学,但我这样做了,重力只是将它拉到那个位置,看起来并不现实。附上一些屏幕截图。

请帮我设置球的轨迹,并在它与球门柱碰撞时停止,

【问题讨论】:

    标签: unity3d monodevelop game-engine game-physics unityscript


    【解决方案1】:

    我建议你在你的球上使用一个非运动刚体,并在你射击的时候给它一个力:GetComponent&lt;Rigidbody&gt;().AddForce(forceVector3, ForceMode.Impulse)(这只是一个例子,你应该避免频繁调用 GetComponent,你最好在开始时为刚体组件调用它并将其存储在私有变量中)

    这样,Unity 的物理引擎可以随着时间的推移处理重力和球的速度。要修改轨迹,您可以使用球的刚体组件的属性。

    如果您想更好地控制速度,您还可以直接在FixedUpdate() 中设置刚体的速度(在每次物理更新之前调用)。这样做时,您必须考虑以 m/s 为单位测量速度,并且物理引擎会为您处理子步骤(我假设 FixedUpdate() 每秒被调用多次),这意味着您不必相乘你的速度有一些增量时间(但我现在不是 100% 确定这一点)。

    【讨论】:

    • 谢谢@xyLe_ 我正在使用物理学来击球,它确实做到了:)谢谢你
    【解决方案2】:

    看看它是如何工作的,只是没有给出你想要的效果,你可以花几个小时微调它,或者像 xyLe_ 所说的那样,使用内置的物理。使用内置物理并不是一件坏事,你只需要聪明一点。您还可以添加有弹性的物理材质,这将有助于为球提供良好的球感。

    【讨论】:

      猜你喜欢
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2011-12-28
      • 2019-09-01
      • 1970-01-01
      相关资源
      最近更新 更多