为什么我的2D子弹的对撞机没有碰撞?

时间:2019-06-20 21:38:47

标签: c# unity3d 2d collision

我正在尝试制作一款在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);
      }

预期结果:项目符号对象与其他对象碰撞,打印Debug.Log输出并被销毁。

实际结果:项目符号对象在也有对撞机且没有Debug.Log输出的其他对象的前面,后面或后面触发。项目符号不会被破坏,因此在输入分配的输入后无限实例化克隆。

1 个答案:

答案 0 :(得分:2)

通过在编辑->项目设置->物理下的层碰撞矩阵中检查默认/默认来解决此问题。不确定是否应该默认检查它,并且以某种方式取消检查,但是检查它可以解决问题。