【问题标题】:Platform and Ball game in Unity3D- position is making ball fall through platformUnity3D 中的平台和球游戏 - 位置正在使球从平台下落
【发布时间】:2013-09-21 06:18:38
【问题描述】:

我正在尝试制作一个游戏,您可以在平台上上下弹跳球。我在球上添加了一个刚体组件,使球“使用重力”,并且在 SphereCollider 中具有材料,因此它将具有“弹性”或恢复系数。球在静止的平台/平面上很好地跟随重力。

之后,我尝试添加平台组件。顺便说一句,这个组件只是简单地在 Y 轴上上下移动(就像有人只是在球拍上上下弹跳乒乓球)。为了让它上升,我使用了这个 C# 脚本。

if (Input.GetKeyDown(KeyCode.W))
{
    heldDownW = true;
}
if (Input.GetKeyUp(KeyCode.W))
{
    heldDownW = false;
}
if (heldDownW)
{
    transform.position = new Vector3(transform.position.x, (transform.position.y + 1f), transform.position.z);
}

这只是检查 W 键是否被按住,向上移动平台。我对 S 键也有同样的看法。平台移动组件运行良好。但是,这是我的问题。球在固定平台上工作正常,或者当我不按 W 或 S 键时。它反弹并服从重力。 但是,当我在球运动时移动平台时,球会直接穿过平台。

我想我知道原因——它是 transform.position。即使球仍在空中,它也只是移动平台,从而改变平台的位置。但是,我不确定如何从这里开始。我尝试使用 OnCollisionEnter,但我不知道在 OnCollisionEnter 方法中放置什么,因为重力/碰撞组件没有在脚本中编码。无论平台是否移动,我都希望球在平台上弹跳。任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您必须将刚体附加到该平台事物,然后在检查器中将“isKinematic”字段设置为“true”。

    那么你需要使用 RidigBody.MovePosition() 而不是 transform.position

    if(heldDownW)
    {
        rigidbody.MovePosition(new Vector3(transform.position.x, (transform.position.y + 1f), transform.position.z));
    }
    

    另外,根据我阅读的内容,将 if 块放入 FixedUpdate() 也很好,因为 FixedUpdate() 用于物理相关的东西。

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.W))
        {
            heldDownW = true;
        }
        if(Input.GetKeyUp(KeyCode.W))
        {
            heldDownW = false;
        }
    }
    
    void FixedUpdate()
    {
         if(heldDownW)
         {
             rigidbody.MovePosition(new Vector3(transform.position.x, (transform.position.y + 10f * Time.deltaTime), transform.position.z));
         }
    }
    

    另一件事是在您进行速度计算时使用 Time.deltaTime :

     if(heldDownW)
        {
            rigidbody.MovePosition(new Vector3(transform.position.x, (transform.position.y + 10f * Time.deltaTime), transform.position.z));
        }
    

    通过使用 Time.deltaTime,您就像在说“每秒向上移动 10 米” 如果您不使用 Time.deltaTime,则每帧移动 10 米 这不是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      相关资源
      最近更新 更多