【问题标题】:Need advice about gameObject's rigidbody accesed by trigger需要有关触发器访问的游戏对象刚体的建议
【发布时间】:2019-08-30 21:31:28
【问题描述】:

我正在尝试使用 c# 为我的平台游戏统一制作跳跃垫。

我很困惑,如何使用触发器向其他游戏对象添加力?

尝试在 void start 中使用 rb = gameobject.getcomponent<rigidbody>,但没用。

这是我最接近预期的代码

public float force = 1500f;

void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
        {
            other.GetComponent<Rigidbody>().AddForce(Vector3.up * force * Time.deltaTime);
            Debug.Log("trigger!");
        }
    }

我预计如果我的玩家落在触发器上,它会将他向上发射,但事实并非如此。我还应该注意控制台日志显示“触发器!”所以有一个错误和强制。

没有错误消息。

【问题讨论】:

    标签: c# unity3d rigid-bodies


    【解决方案1】:

    Time.deltaTime 是一个非常小的数字,当函数被调用一次时你不需要它。你也可以试试other.GetComponent&lt;Rigidbody&gt;().AddForce(Vector3.up * force, ForceMode.VelocityChange);

    您可以在此处阅读有关 AddForce 方法的更多信息:Rigidbody.AddForce

    【讨论】:

      【解决方案2】:

      我知道我迟到了,但你可以尝试使用游戏中的跳跃。我的意思是如果他按下空格,你会让玩家跳起来。你可以重复使用它。

      那是我的跳跃

      private void Jump()
      {
          if (grounded && readyToJump)
          {
              readyToJump = false;
      
              //Add jump forces
              rb.AddForce(Vector2.up * jumpForce * 1.5f);
              rb.AddForce(normalVector * jumpForce * 0.5f);
      
              //If jumping while falling, reset y velocity.
              Vector3 vel = rb.velocity;
              if (rb.velocity.y < 0.5f)
                  rb.velocity = new Vector3(vel.x, 0, vel.z);
              else if (rb.velocity.y > 0)
                  rb.velocity = new Vector3(vel.x, vel.y / 2, vel.z);
      
              Invoke(nameof(ResetJump), jumpCooldown);
          }
      }
      

      现在你可以制作这样的东西了

      private void OnCollisionEnter(Collision collision)
      {
          jumpPad JumpPad = collision.collider.GetComponent<jumpPad>();
          if (JumpPad != null)
          {
              //Add jump forces
              rb.AddForce(Vector2.up * jumpPadForce * 1.5f);
              rb.AddForce(normalVector * jumpPadForce * 0.5f);
      
              //If jumping while falling, reset y velocity.
              Vector3 vel = rb.velocity;
              if (rb.velocity.y < 0.5f)
                  rb.velocity = new Vector3(vel.x, 0, vel.z);
              else if (rb.velocity.y > 0)
                  rb.velocity = new Vector3(vel.x, vel.y / 2, vel.z);
          }
      }
      

      这是最简单、最快捷的解决方案。 只需制作一个新的跳跃力并称为跳跃垫力之类的东西。 就是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多