【问题标题】:Why isn't my 2D bullet's collider colliding with anything?为什么我的 2D 子弹的对撞机没有碰撞到任何东西?
【发布时间】:2019-11-03 18:15:45
【问题描述】:

我正在尝试制作一个在 3D 空间中使用 2D 精灵的平台游戏。出于某种原因,尽管玩家发射的子弹从玩家的子 GO 正确发射,但它不会与 2D 或 3D 中的任何东西(敌人、其他物体等)发生碰撞。我在父玩家 GO 上有一个 3D 角色控制器,但这不会影响我正在发射的子弹对象,是吗?

适当地碰撞一切。 尝试以各种组合打开和关闭 IsTrigger。 物体在同一层,Z轴位置相同。

//BULLET FIRING SCRIPT

void Update()
{
    if (Input.GetButtonDown("Fire2") && !Input.GetButton("Fire3") && 
        Time.time > nextFireTime)

   {
        Rigidbody2D cloneRb = Instantiate(bullet,  
 bulletSpawn.position, Quaternion.identity) as Rigidbody2D;
        cloneRb.AddForce(bulletPrefab.transform.right *  
 projectileForce);
        nextFireTime = Time.time + fireRate;

    }

}


//____________________________________________________________

//BULLET OBJECT SCRIPT

private void Start()
{
    direction = Input.GetAxisRaw("Horizontal");

    if (direction == -1)
    {
        facingLeft = true;
    }
    else if (direction == 1)
    {
        facingLeft = false;
    }

    else if (direction == 0)
    {
        facingLeft = false;
    }


    if (facingLeft == false)
    {
        rb.velocity = transform.right * speed;
        Debug.Log("Fired Bullet");
    }
    else
    {
        bulletPrefab.transform.Rotate(0, 180, 0);
        firePoint.transform.Rotate(0, 180, 0);
        Debug.Log("Rotated Bullet");
        Debug.Log("Fired Bullet Left");
        rb.velocity = transform.right * speed;

    }
}

// Update is called once per frame
void Update()
{

}


public void OnTriggerEnter2D(Collider2D collider)

     {
       Debug.Log("Bullet Hit:");
       Debug.Log(collider.name);
       Enemy enemy = collider.GetComponent<Enemy>();
       if (enemy != null)
          {
            enemy.TakeDamage(damage);
          }
       Destroy(gameObject);
      }

预期结果:Bullet 对象与其他对象发生碰撞,打印 Debug.Log 输出并被销毁。

实际结果:Bullet 对象穿过、前面或后面也有碰撞器的其他对象发射,并且没有 Debug.Log 输出。 Bullet 不会被破坏,因此在输入分配的输入时会无限地实例化克隆。

【问题讨论】:

  • 首先; 2d 物理不适用于 3d 物理。其次,确保您在碰撞的对象之一上有一个刚体
  • 好吧,所以子弹似乎有一个 2d 刚体,你有触发器或对撞机在敌人身上吗?可悲的是,这似乎是一个普遍的问题
  • @FredrikSchön 但是子弹物体和它所碰撞的东西都是 2D 的......我确实在子弹上有一个刚体,并且在碰撞的物体上尝试了使用和不使用它们。跨度>
  • @BugFinder 我尝试过在子弹和敌人上使用和不使用触发器,以及两者。
  • 它是 Rigidbody2D 吗?

标签: c# unity3d 2d collision


【解决方案1】:

通过在 Edit-->Project Settings-->Physics 下的 Layer Collision Matrix 中检查 Default/Default 来修复问题。不确定是否应该默认检查它并且以某种方式未检查但检查它解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多