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

Unity宝可梦开发:等级解锁招式遇类型转换错误求助

问题分析与解决方案

你遇到的类型转换错误,核心原因是Pokemon类中定义的Moves列表类型与你尝试添加的对象类型不匹配:

  • Pokemon类里的Moves被声明为List<NewMove>,但构造函数中你尝试添加的是Moves类的实例(new Moves(move.Base)),两种类型无法直接兼容,导致类型转换失败。

步骤1:修正Pokemon类的Moves列表类型

将Pokemon类中的Moves列表类型改为List<Moves>,因为我们需要存储的是包含当前PP值的招式实例(Moves类),而NewMove仅用于记录宝可梦解锁招式的等级和对应基础数据:

public class Pokemon 
{
    Pokemon_Data _Data;
    int level;

    public int HP {get; set;}

    // 修正列表类型为List<Moves>
    [field: SerializeField] public List<Moves> Moves {get; private set;}

    
    public Pokemon(Pokemon_Data pData, int pLevel)
    {
        _Data = pData;
        level = pLevel;
        HP = _Data.MaxHP;

        // 初始化对应类型的列表
        Moves = new List<Moves>();
        foreach (var move in _Data.NewMoves)
        {
            if (move.Level <= level)
                // 类型匹配,可正常添加
                Moves.Add(new Moves(move.Base));
            
            if (Moves.Count >= 4)
                break;
        }
    }

    // 其余属性计算代码保持不变...
}

步骤2:优化Pokemon_Data的封装(可选但推荐)

之前将newMoves设为public的做法不符合封装原则,可改回private,通过已有的只读属性对外提供访问:

[CreateAssetMenu(fileName = "Pokemon", menuName = "Pokemon/Create new pokemon") ]
public class Pokemon_Data : ScriptableObject
{
    // ...其余字段保持不变

    // 改为private,仅通过属性访问
    [SerializeField] private List<NewMove> newMoves; 

    public List<NewMove> NewMoves
    { 
        get {return newMoves;}
    }

    // ...其余属性保持不变
}

补充:实现招式替换逻辑

当前代码在招式数量达到4个时停止添加,若要实现"解锁新招式时替换旧招式"的功能,可添加选择逻辑:

foreach (var move in _Data.NewMoves)
{
    if (move.Level <= level)
    {
        var newMoveInstance = new Moves(move.Base);
        if (Moves.Count < 4)
        {
            Moves.Add(newMoveInstance);
        }
        else
        {
            // 这里调用UI逻辑,让玩家选择替换的旧招式
            // 示例:Moves[selectedIndex] = newMoveInstance;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:27:50