Unity5年经验需要什么水平(图文比较)

5年了,这5年你知道我怎么过的吗,而你还在开发飞行棋

经验:未知

个别模块优化(如果你的项目已经有几百几千个 MonsterSystem.Instance ,那以下内容对你毫无帮助) 是有可能,有亿点点做用

cs 复制代码
    public class PopupTextPanel : BasePanel
    {
        [Header("需要带 UIPopupText")]
        public GameObject PopupTextPrefab;

        private void OnEnable()
        {
            MonsterSystem.Instance.OnMonsterTakeDamage += OnMonsterTakeDamage;
        }

假如你有一点点Unity,你可能觉得,可以写在Start 方法内

cs 复制代码
void Start()
{
}

但很快你会发现没用,所以

改一下

改成回调

内核就是Unity 的基础知识,和C# 的回调

cs 复制代码
    public class PopupTextPanel : BasePanel
    {
        [Header("需要带 UIPopupText")]
        public GameObject PopupTextPrefab;

        private void OnEnable()
        {
            //MonsterSystem.Instance.OnMonsterTakeDamage += OnMonsterTakeDamage;
            ArpgFacade.RegisterMonsterTakeDamage(OnMonsterTakeDamage);
        }

        private void OnDisable()
        {
            //MonsterSystem.Instance.OnMonsterTakeDamage -= OnMonsterTakeDamage;
            ArpgFacade.UnregisterMonsterTakeDamage(OnMonsterTakeDamage);
        }
cs 复制代码
//ArpgFacade.cs
//

    #region 先缓存注册
    public static event Action<MonsterCtrl, double, bool> OnMonsterTakeDamage;
    public static void RegisterMonsterTakeDamage(Action<MonsterCtrl, double, bool> callback)
    {
        OnMonsterTakeDamage += callback;
    }

    public static void UnregisterMonsterTakeDamage(Action<MonsterCtrl, double, bool> callback)
    {
        OnMonsterTakeDamage -= callback;
    }
    #endregion
    /// <summary>
    /// 把 Facade 缓存的订阅者同步到 MonsterSystem
    /// </summary>
    public static void FlushToMonsterSystem()
    {
        if (OnMonsterTakeDamage == null) return;

        foreach (var d in OnMonsterTakeDamage.GetInvocationList())
        {
            var cb = (Action<MonsterCtrl, double, bool>)d;
            MonsterSystem.Instance.OnMonsterTakeDamage += cb;
        }
    }

但其实重点就只要一个

cs 复制代码
        public event Action<MonsterCtrl, double, bool> OnMonsterTakeDamage;
        // public delegate void OnMonsterTakeDamageDel(MonsterCtrl monsterCtrl, double damage, bool isCrit);
        // public event OnMonsterTakeDamageDel OnMonsterTakeDamage;

用Action 替换掉 delegate , Unity已经替我们优化,或者最新的C#,同样作用的两个代码,一个delegate 是强行强命名写法,一个是灵活调用,关键是能实现平替

经验:大一新生

飞行棋之简单框架---游戏头和初始化地图_谷艳爽faye的博客-CSDN博客

经验:1~2年

C#---飞行棋超全总结(全注释版)_c#飞行棋_刘爽-zjy的博客-CSDN博客

3~5年

10年以上

简单的JS鸿蒙小游戏---飞行棋之游戏逻辑-小游戏飞行棋开始玩