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

C#使用命令模式实现带参方法作为参数传入的问题咨询

代码问题诊断与调整方案

你的当前实现无法正常运行,核心问题是命令模式的封装逻辑缺失、委托与参数没有正确绑定,具体问题如下:

现存问题

  • 构造逻辑空实现:GroupActionItem的构造函数接收了委托参数但没有存储,后续执行时完全取不到传入的方法
  • 参数传递链路断裂:你定义的移动委托需要接收Vector3类型的目标点参数,但现有逻辑没有任何地方存储这个参数,执行时无法把目标点传入移动方法
  • 编译错误:GroupActionMovement中重写的Execute方法调用了无参的Movement(),但Movement方法强制要求传入Vector3参数,代码无法通过编译
  • 扩展性不足:当前定义的委托仅支持Vector3类型参数,后续要新增接收枚举、GameObject等参数的命令时,无法直接复用现有逻辑

调整方案

1. 重构命令基类

将命令的执行逻辑和所需参数封装为整体,所有命令继承同一个抽象基类,对外仅暴露统一的无参执行方法:

// 命令抽象基类
public abstract class GroupActionBase : MonoBehaviour
{
    public abstract bool Execute();
}

2. 实现具体命令类

不同参数类型的命令单独实现,构造时就把执行需要的所有参数存储在类内部:

// 移动命令,接收Vector3参数
public class MoveAction : GroupActionBase
{
    private readonly Vector3 _targetPosition;

    // 构造时传入移动目标点
    public MoveAction(Vector3 targetPosition)
    {
        _targetPosition = targetPosition;
    }

    public override bool Execute()
    {
        // 直接用内部存储的目标点执行移动逻辑
        return MoveToPosition(_targetPosition);
    }

    private bool MoveToPosition(Vector3 position)
    {
        // 你的移动逻辑实现
        return true;
    }
}

// 示例:后续新增攻击命令,接收GameObject参数
public class AttackAction : GroupActionBase
{
    private readonly GameObject _target;

    public AttackAction(GameObject target)
    {
        _target = target;
    }

    public override bool Execute()
    {
        // 攻击逻辑实现
        return true;
    }
}

3. 简化命令单元类

不需要额外定义委托,直接存储命令基类实例即可:

public class GroupActionItem
{
    private readonly GroupActionBase _action;

    public GroupActionItem(GroupActionBase action)
    {
        _action = action;
    }
       
    public bool PerformAction()
    {
        return _action.Execute();
    }
}

4. 业务调用修改

你最初期望的调用写法可以改为如下形式,完全符合需求:

// 添加移动命令到队列
playerGroupActions.AddAction(
    new GroupActionItem(
        new MoveAction(new Vector3(-1000,-1000,-1000))));

可选优化

你当前的PerformActions方法每帧仅执行队列第一个命令,如果你需要每帧执行所有已完成的命令,可以修改为循环执行逻辑,现有逻辑如果符合你的设计需求可以保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:02