You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何禁用敌人友军误伤且不影响玩家攻击敌人?

问题解决方案

一、修复敌人激光误伤友军的问题

你之前的修改导致所有激光失效,核心原因是玩家发射的激光没有父物体,other.transform.parent为null,判断other.transform.parent.tag会直接报错,同时条件永远不成立,敌人自然不会响应任何激光。

正确的做法是利用你已经在Laser脚本中定义的_isEnemyLaser状态区分激光类型,步骤如下:

1. 调整Laser脚本,规范暴露激光状态

将私有状态通过公共属性开放,避免直接访问私有变量:

private float _speedLaser = 10.0f;
private bool _isEnemyLaser = false;

// 新增公共属性,供外部判断激光归属
public bool IsEnemyLaser => _isEnemyLaser;

void Update()
{
    if (!_isEnemyLaser)
    {
        MoveUp();
    }
    else
    {
        MoveDown();
    }
}

// 其余MoveUp、MoveDown、AssignEnemy代码保持不变

2. 修改Enemy脚本的碰撞检测逻辑

在敌人的OnTriggerEnter2D中,仅响应玩家发射的激光:

private void OnTriggerEnter2D(Collider2D other)
{
    if (other.tag == "Player")
    {
        // 原玩家碰撞逻辑保持不变
        Player player = other.transform.GetComponent<Player>();
        if (player != null)
        {
            _uiManager.PenaltyScore();
            player.Damage();
        }
        Instantiate(_enemy_explosionPrefab, transform.position + new Vector3 (0, -0.51f, 0), Quaternion.identity);  
        Destroy(this.gameObject);
    }

    if (other.tag == "Laser" && transform.position.y < 6.2f)
    {
        Laser laser = other.GetComponent<Laser>();
        // 仅处理玩家发射的激光
        if (laser != null && !laser.IsEnemyLaser)
        {
            Destroy(other.gameObject);
            _uiManager.UpdateScore();
            Instantiate(_enemy_explosionPrefab, transform.position, Quaternion.identity);
            Destroy(this.gameObject);
        }
    }
}

修改后,敌人只会被玩家激光击中,敌人自身发射的激光碰到友军时,因laser.IsEnemyLaser为true不会触发销毁逻辑,彻底解决误伤问题。

二、共用激光脚本 vs 单独脚本/预制体的选择

两种方案的优缺点:

  • 共用一个脚本(当前方案)

    • 优势:无代码冗余,激光的移动、边界销毁等通用逻辑只需维护一处,后续扩展(如添加音效、特效)时效率更高。
    • 劣势:需要通过状态变量区分行为,逻辑复杂度略高,但你的代码已搭建好基础框架,调整成本极低。
  • 单独脚本+预制体

    • 优势:逻辑完全独立,无需判断状态,新手更容易理解维护,不易出现状态判断错误。
    • 劣势:会产生重复代码(如移动、销毁逻辑),后续修改需同步更新两个脚本,增加维护成本。

建议

如果当前项目激光仅存在移动方向差异,共用脚本是更优选择,既避免冗余又能满足需求。若后续敌人激光需要添加独特行为(如穿透、爆炸、不同伤害),再拆分单独脚本也不迟。


内容的提问来源于stack exchange,提问作者Annie Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:25:16