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

Unity C#中如何在另一个脚本中访问重写函数?

在Unity C#中访问另一个脚本的重写函数

好的,咱们来一步步解决这个问题。从你给出的代码片段来看,WebSocketNetwork继承了抽象类WebsocketSession,并且重写了它的GametableHistory抽象方法。要在另一个脚本里访问这个重写后的方法,你可以按照下面的方式操作:

1. 获取WebSocketNetwork的有效实例

首先,你需要在要调用方法的目标脚本中,拿到WebSocketNetwork的实例。常见的获取方式有两种:

  • 如果脚本挂载在GameObject上:使用FindObjectOfType来查找,或者给WebSocketNetwork实现单例模式(就像你代码里的PlayInfo.Instance那样)。示例代码:
    private WebSocketNetwork _wsNetwork;
    
    void Start()
    {
        // 查找场景中挂载了WebSocketNetwork的对象
        _wsNetwork = FindObjectOfType<WebSocketNetwork>();
        // 要是你实现了单例,就这么用:_wsNetwork = WebSocketNetwork.Instance;
    }
    
  • 如果是动态创建的实例:直接保存创建时的引用即可,比如在实例化后把对象赋值给目标脚本的变量。

2. 调用重写后的GametableHistory方法

拿到实例之后,因为GametableHistory是public修饰的,你可以直接调用它,传入所需的参数就行。示例代码:

// 先准备好方法需要的参数(这里替换成你的实际数据)
bool operationSuccess = true;
int tableNumber = 3;
int targetYear = 2024;
int targetMonth = 5;
int targetDay = 20;
int shoeNumber = 15;
bc_gametable_history_list historyList = new bc_gametable_history_list(); // 替换为你的实际列表对象

// 调用重写方法,记得先判断实例不为空
if (_wsNetwork != null)
{
    _wsNetwork.GametableHistory(operationSuccess, tableNumber, targetYear, targetMonth, targetDay, shoeNumber, historyList);
}
else
{
    Debug.LogError("找不到WebSocketNetwork的实例,请检查脚本是否挂载或实例已创建!");
}

3. 利用多态特性调用(可选)

如果你的逻辑中持有WebsocketSession类型的引用,只要这个引用实际指向的是WebSocketNetwork的实例,调用GametableHistory时也会自动触发重写后的方法——这就是C#的多态特性。示例:

WebsocketSession baseSession = _wsNetwork;
baseSession.GametableHistory(operationSuccess, tableNumber, targetYear, targetMonth, targetDay, shoeNumber, historyList);
// 同样会执行WebSocketNetwork里的重写逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:16:12