[{"data":1,"prerenderedAt":144},["ShallowReactive",2],{"\u002F2017-04-26-ue4-active-class-redirects":3},{"id":4,"title":5,"body":6,"date":120,"description":12,"extension":121,"meta":122,"navigation":125,"path":137,"seo":138,"stem":139,"tags":140,"__hash__":143},"blogs\u002F_legacy\u002F2017\u002F2017-04-26-ue4-active-class-redirects.md","UE4资源重定向",{"type":7,"value":8,"toc":114},"minimark",[9,13,16,19,22,29,32,38,41,45,48,56,67,70,73,76,82,85,88,91,96,99,105,111],[10,11,12],"p",{},"在混合使用C++和蓝图进行编码时，有时会因为代码的变动而导致蓝图无法正确的识别基础的类。此时可以使用资源重定向进行解决。",[10,14,15],{},"当前UE4版本4.15.1。",[10,17,18],{},"如果是在内容管理器中进行删除、重命名、移动等操作的话，引擎会尝试自动执行重定向，或者给出提示。只要不操作失误的话就不会有什么大问题。",[10,20,21],{},"但当C++定义的基类由于各种原因不存在时，由于引擎不会给出提示，有时就会出现灾难性的结果，比如这样：",[10,23,24],{},[25,26],"img",{"alt":27,"src":28},"image","\u002Fwp-content\u002Fuploads\u002F2017\u002F04\u002Fimage_thumb-11.png",[10,30,31],{},"或者更严重的，变成这样：",[10,33,34],{},[25,35],{"alt":36,"src":37},"SNAGHTMLf68450","\u002Fwp-content\u002Fuploads\u002F2017\u002F04\u002FSNAGHTMLf68450_thumb.png",[10,39,40],{},"由于蓝图的基类不存在了，这时候就算强行打开蓝图类，也有可能会变成奇怪的情况。引擎本身无法识别基类，蓝图的类型判定就会出错，即便有替换的目标类也无法进行指定。想要将基类指定为AActor都无法进行。如果此时有作为替换的类的话，就可以求助于资源重定向了。",[42,43,44],"h2",{"id":44},"重定向配置",[10,46,47],{},"资源重定向可以在配置文件DefaultEngine.ini中设定，这个文件位于项目目录下Config目录中。",[10,49,50,51,55],{},"在其中找到",[52,53,54],"span",{},"\u002FScript\u002FEngine.Engine","，如果没有的话直接添加即可，按照如下格式添加即可：",[57,58,63],"pre",{"className":59,"code":61,"language":62},[60],"language-text","[\u002FScript\u002FEngine.Engine]\n+ActiveClassRedirects=(OldClassName=\"OceanManager\",NewClassName=\"\u002FScript\u002FOcean.OceanManager\")\n+ActiveClassRedirects=(OldClassName=\"WaveSetParameters\",NewClassName=\"\u002FScript\u002FOcean.WaveSetParameters\")\n+ActiveClassRedirects=(OldClassName=\"WaveParameter\",NewClassName=\"\u002FScript\u002FOcean.WaveParameter\")\n","text",[64,65,61],"code",{"__ignoreMap":66},"",[10,68,69],{},"其中OldClassName为旧的类名称，不用指定Package名称，而NewClassName则必须指定Package名称。",[10,71,72],{},"Package名称一般就是项目的名称，如果类是定义在插件中的话，就是插件的名称。上面的格式中，Ocean就是项目的名称。",[10,74,75],{},"重定向配置还有一个额外的参数：",[57,77,80],{"className":78,"code":79,"language":62},[60],"+ActiveClassRedirects=(OldClassName=\"MyClass\",NewClassName=\"MyClassParent\",InstanceOnly=\"true\")\n",[64,81,79],{"__ignoreMap":66},[10,83,84],{},"可以为重定向提供一个过渡的阶段，只有类的实例会被替换成新的类，而原有的类依然继续存在。",[42,86,87],{"id":87},"合并重定向",[10,89,90],{},"包括内容管理器自动进行的重定向在内，长期累积之下，项目中就会累积很多重定向，这个时候就需要用到清理功能。清理重定向的功能在内容管理器中就可以使用，在任何一个目录上点击右键就可以看到：",[10,92,93],{},[25,94],{"alt":27,"src":95},"\u002Fwp-content\u002Fuploads\u002F2017\u002F04\u002Fimage_thumb-12.png",[10,97,98],{},"同时也可以使用命令行工具进行清理",[57,100,103],{"className":101,"code":102,"language":62},[60],"UE4Editor.exe \"E:\\Ues\\Trace\" -run=FixupRedirects –testonly\n",[64,104,102],{"__ignoreMap":66},[10,106,107],{},[25,108],{"alt":109,"src":110},"SNAGHTML9585f4","\u002Fwp-content\u002Fuploads\u002F2017\u002F04\u002FSNAGHTML9585f4_thumb.png",[10,112,113],{},"不过在有的时候还是会出现C++类重新指定失败的情况，所以一般在重定向操作之后，如果已经没有必要继续使用旧类的情况下，当时就把重定向清理掉比较好。",{"title":66,"searchDepth":115,"depth":116,"links":117},2,3,[118,119],{"id":44,"depth":115,"text":44},{"id":87,"depth":115,"text":87},"2017-04-26","md",{"layout":123,"status":124,"published":125,"author":126,"author_login":128,"author_email":129,"wordpress_id":130,"wordpress_url":131,"date_gmt":132,"excerpt":133},"post","publish",true,{"display_name":127,"login":128,"email":129,"url":66},"风铃","flinkor","flinkor@foxmail.com",1632,"\u002F\u002F?p=1632","2017-04-26 14:14:24 +0000",{"type":7,"value":134},[135],[10,136,12],{},"\u002F2017-04-26-ue4-active-class-redirects",{"title":5,"description":12},"_legacy\u002F2017\u002F2017-04-26-ue4-active-class-redirects",[141,142],"UE4","ActiveClassRedirects","b-o6mKcJJtyTIAVSY5TXqiLI35aVfUs_cVLrh0ZqHR0",1788763180136]