ET框架---HotFix.Init学习笔记

HotFix.Init学习笔记

请大家关注我的微博:@NormanLin_BadPixel坏像素


我们之前看的代码都是属于Modle命名空间下的,现在我们需要来看看热更下的代码了。我们的入口就是Init.Start方法。

public static void Start()
{
    try
    {
        Hotfix.Scene.ModelScene = Game.Scene;

        // 注册热更层回调
        Game.Hotfix.Update = () => { Update(); };
        Game.Hotfix.LateUpdate = () => { LateUpdate(); };
        Game.Hotfix.OnApplicationQuit = () => { OnApplicationQuit(); };

        // 注册热更层消息回调
        ClientDispatcher clientDispatcher = new ClientDispatcher
        {
            HotfixCallback = (s, p) => { HotfixMessageDispatcher.Run(s, p); }
        };
        Game.Scene.GetComponent<NetOuterComponent>().MessageDispatcher = clientDispatcher;

        Hotfix.Scene.AddComponent<UIComponent>();
        Hotfix.Scene.AddComponent<OpcodeTypeComponent>();
        Hotfix.Scene.AddComponent<MessageDispatherComponent>();

        //Hotfix.EventSystem.Run(EventIdType.InitSceneStart);
        Hotfix.EventSystem.Run(EventIdType.LandlordsInitSceneStart);
    }
    catch (Exception e)
    {
        Log.Error(e.ToStr());
    }
}

作者的注释很详细咯。我们在这里,终于看到了之前在NetOuterComponent留下的坑,对网络消息的处理。在ClientDispatcher内。这里大家注意,网络消息也分为热更层的消息跟非热更层的消息,两者会做不同的处理,所以在这里创建ClientDispatcher的时候一并注册了热更层消息回调。


本来想在这里直接讲ClientDispatcher的,但是写完发现篇幅有点长,还讲了点其他东西,所以这里分下P吧。ClientDispatcher学习笔记


在注册了消息调度后,添加了热更层的UIComponent、OpcodeTypeComponent、MessageDispatherComponent。UI我们先不讲,其他两个在ClientDispatcher学习笔记里面顺带讲了。
最后,我们通过Hotfix.EventSystem调用了EventIdType.LandlordsInitSceneStart事件。而Hotfix.EventSystem,跟Model.EventSystem区别不大,大家可以自己去看一下。需要注意的是,在HotFix.EventSystem中注册的事件,也会注册到mono层。

// hotfix的事件也要注册到mono层,hotfix可以订阅mono层的事件
Action<List<object>> action = list => { Handle(aEventAttribute.Type, list); };
Game.EventSystem.RegisterEvent(aEventAttribute.Type, new EventProxy(action));

EventProxyMessageProxy同类型的功能。
我们来看看都有什么订阅了LandlordsInitSceneStart事件。

[Event(EventIdType.LandlordsInitSceneStart)]
public class InitSceneStart_CreateLandlordsLogin : AEvent
{
    public override void Run()
    {
        //创建登录界面
        UI ui = Hotfix.Scene.GetComponent<UIComponent>().Create(UIType.LandlordsLogin);
    }
}

创建了个UI。。。好吧,这里如果不讲点UI方面的东西就讲不下去了。

这里说明一下UIComponent的一个作用,就是在创建UI实例的时候,会根据传入的UIType进行不同的初始化操作,每个UI的初始化都写在一个单独的类当中。具体怎么实现的我们之后再详细学(我大致浏览过嘿嘿),现在我们只要知道,当我们创建**UIType.LandlordsLogin**UI时,可以找到对应的初始化方法。我们来看看,这个UI到底是如何初始化的。

LandlordsLoginFactory

作者已经注释了许多,这里我们需要注意的是这段代码。

//创建登录界面实体
UI ui = ComponentFactory.Create<UI,GameObject>(login);

//添加登录界面组件
ui.AddComponent<LandlordsLoginComponent>();

这里第一眼我还以为是是Unity.GameObject.AddComponent呢,哈哈,其实是Entity.AddComponent。这里大家不要学我。LandlordsLoginComponent有点东西,我们分个P

<think>好的,我现在需要解决用户遇到的Isaac Sim中environment.yml文件未找到的错误。用户提到错误是EnvironmentFileNotFound,需要找到丢失的environment.yml文件。首先,我应该回忆一下相关的引用内容。根据引用[1],environment.yml文件通常保存在C:\Users\用户名\AppData\Local\ov\pkg\isaac_sim-版本号路径中。用户可能没有正确安装Isaac Sim,或者安装过程中出现了问题,导致文件未被正确创建。 接下来,我应该考虑可能的解决方法。首先,检查默认路径是否存在该文件。如果不存在,可能需要重新安装Isaac Sim,确保安装过程没有错误。另外,用户可能误删了该文件,或者安装路径被修改过,导致系统找不到文件。此外,用户可能没有正确配置环境变量或路径,导致程序无法定位文件。 另一个可能性是用户手动移动了文件,或者权限问题导致无法访问该路径。需要指导用户检查路径的权限,确保他们有读取权限。如果文件确实丢失,可能需要从备份恢复,或者重新生成该文件。此外,如果用户使用的是旧版本,可能需要升级到最新版本,或者查看官方文档是否有关于environment.yml的生成方法。 还要考虑用户是否在正确的位置寻找该文件。例如,是否路径中的用户名正确,或者版本号是否匹配他们安装的Isaac Sim版本。用户可能输入了错误的路径,或者Isaac Sim的安装位置被更改,需要手动定位文件。 另外,根据引用[2],Isaac Sim可能涉及到仿真环境和Python环境配置。如果environment.yml是用来配置conda环境的,用户可能需要重新创建环境,或者从其他来源获取该文件,比如官方文档或社区支持。可能需要指导用户使用conda命令重新生成环境文件,或者检查是否在项目目录中遗漏了该文件。 最后,如果所有方法都无效,建议用户联系官方支持或查看社区论坛,看看是否有其他用户遇到类似问题,并找到解决方案。需要确保用户按照官方指南操作,避免因步骤错误导致文件丢失。</think>针对Isaac Sim的`environment.yml`文件未找到错误,请按以下步骤排查解决: ### 1. 检查默认安装路径 根据引用[1],文件默认路径为: $$C:\Users\你的用户名\AppData\Local\ov\pkg\isaac_sim-版本号$$ * 验证路径中的`用户名`和`版本号`是否匹配当前系统 * 检查`AppData`文件夹是否已开启隐藏文件夹可见性(Windows系统默认隐藏) ### 2. 重新生成环境文件 若文件被误删,可通过以下方法重建: ```bash # 在Anaconda Prompt中执行 conda env export > environment.yml ``` 注意:需先激活正确的Isaac Sim环境[^1] ### 3. 验证安装完整性 * 通过NVIDIA Omniverse Launcher检查Isaac Sim的安装状态 * 确认安装时勾选了"Environment Configuration"选项 * 尝试通过`ovito`命令验证基础功能: $$ovito --check-environment$$ ### 4. 版本兼容性处理 根据引用[2]的技术栈要求: | 组件 | 要求版本 | |-------|---------| | Python | 3.8 | | PyTorch | 1.10.0 | | CUDA | 11.3 | | Isaac Gym | Preview 4 | 若使用自定义环境,需确保版本匹配。可通过`conda list`命令验证包版本。 ### 5. 高级排查手段 ```python # 路径检测脚本 import os import subprocess def check_isaac_env(): base_path = os.path.expanduser("~/AppData/Local/ov/pkg") env_file = "environment.yml" # 遍历所有安装版本 for dir in os.listdir(base_path): if "isaac_sim" in dir: target_path = os.path.join(base_path, dir, env_file) if os.path.exists(target_path): print(f"Found: {target_path}") return True # 未找到时触发自动修复 subprocess.run(["ovito", "--repair-environment"]) return False ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值