要实现玩家射出的子弹不与玩家碰撞，而与敌人碰撞，敌人射出的子弹不与敌人碰撞而与玩家碰撞，你可以通过调整Unity中的**物理层（Layer）**和**碰撞矩阵（Collision Matrix）**来解决这个问题。

### 步骤：

1. **创建新的物理层**：
   - 在Unity中，首先你需要为玩家、敌人和子弹分别创建不同的物理层。
   - 转到 `Edit` -> `Project Settings` -> `Tags and Layers`。
   - 在 `Layers` 部分，点击 `User Layer` 下面的空白区域，创建以下新的层：
     - `Player`
     - `Enemy`
     - `PlayerBullet`
     - `EnemyBullet`

2. **将对象分配到不同的层**：
   - 将玩家对象的 `Layer` 设置为 `Player`。
   - 将敌人对象的 `Layer` 设置为 `Enemy`。
   - 将玩家射出的子弹的 `Layer` 设置为 `PlayerBullet`。
   - 将敌人射出的子弹的 `Layer` 设置为 `EnemyBullet`。

3. **设置碰撞矩阵**：
   - 转到 `Edit` -> `Project Settings` -> `Physics`。
   - 在 `Physics` 设置中，找到 `Layer Collision Matrix`。
   - 你可以在这里设置哪些层之间可以发生碰撞。
     - **Player 和 PlayerBullet** 之间不发生碰撞。
     - **Enemy 和 EnemyBullet** 之间不发生碰撞。
     - **PlayerBullet 和 Enemy** 之间发生碰撞。
     - **EnemyBullet 和 Player** 之间发生碰撞。
   
   具体的设置应该如下：
   - 确保 `Player` 和 `PlayerBullet` 行与列之间的勾选框是**取消勾选的**，这样它们不会发生碰撞。
   - 确保 `Enemy` 和 `EnemyBullet` 行与列之间的勾选框是**取消勾选的**，这样它们不会发生碰撞。
   - 确保 `PlayerBullet` 和 `Enemy` 之间，以及 `EnemyBullet` 和 `Player` 之间的碰撞是**勾选的**。

4. **确保Rigidbody的碰撞检测模式正确**：
   - 对于玩家和子弹的 `Rigidbody` 组件，确保它们的 `Collision Detection` 设置为 `Continuous` 或 `Continuous Dynamic`，这有助于避免物理计算错误，尤其是在高速度的情况下。

### 代码示例（如果需要动态设置层）：
如果你希望在代码中动态设置某个对象的层，可以使用以下代码：

```csharp
// 设置玩家子弹的层
gameObject.layer = LayerMask.NameToLayer("PlayerBullet");

// 设置敌人子弹的层
gameObject.layer = LayerMask.NameToLayer("EnemyBullet");
```

### 结论：
通过使用Unity的**Layer**和**Layer Collision Matrix**，你可以精确控制不同物体之间的碰撞行为。将玩家、敌人和子弹分别分配到不同的物理层，并在碰撞矩阵中配置它们之间的碰撞规则，就能实现你所需要的功能：玩家射出的子弹不与玩家碰撞，而与敌人碰撞，敌人射出的子弹不与敌人碰撞，而与玩家碰撞。