平时写些单独的功能的时候,喜欢自己新建一个工程,完成的时候再迁移到项目中
或者有些功能是一个工程中实现的,需要加到另一个工程中,那么中间会遇到哪些问题呢?
迁移BP和美术资源
选中BP和美术资源,然后右键,选择migrate,然后UE4会将所有的依赖文件选中,然后再选中目标工程的content文件夹就好了
迁移C++文件
1.把C++文件拷到目标C++工程下,然后加入工程
3.进行C++类的重定向
在DefaultEngine.ini中 加入
[CoreRedirects]
+ClassRedirects=(MatchSubstring=True,OldName="/OldProjectName",NewName="/NewProjectName")
+EnumRedirects=(MatchSubstring=True,OldName="/OldProjectName",NewName="/NewProjectName")
+FunctionRedirects=(MatchSubstring=True,OldName="/OldProjectName",NewName="/NewProjectName")
+StructRedirects=(MatchSubstring=True,OldName="/OldProjectName",NewName="/NewProjectName"
举例来说我有一个c++定义的enum,需要迁移,那么需要加入
[CoreRedirects]
+EnumRedirects=(MatchSubstring=True,OldName="/ChangeCloth",NewName="/ArkGame")
ChangeCloth是我原工程的名字ArkGame是新工程的名字
所以UE4应该是做了一个字符串替换,这样就能找到我们新的C++类了,BP中用了这个C++类,也不会丢失了
修改C++的类名字
通常项目中,类名都有一定的命名规范,外部的类进来后,需要改名,但是这个类你可能在blueprint(简称bp)中大量使用了,那么改完后,发现bp中到处是错误,此类的所有变量都变成了UObject,手动修改成新的类型之后,原来的函数调用也都无法恢复正常,超级蛋疼
解决方法:
1.资源重定向
在c++中修改完类名后,打开DefaultEngine.ini ,添加一行
+ActiveClassRedirects=(OldClassName=SanMao,NewClassName=SanMaoYiDao)
这里要注意的是className里填的内容,是去掉前缀的
举例来说:AActor 类的类头文件命名为 Actor.h,那么这里要填的className就是Actor,而不是AActor
再启动 完成替换,问题解决
2.合并重定向
长期累积之下,项目中就会累积很多重定向,这个时候就需要用到清理功能。清理重定向的功能在内容管理器中就可以使用,在任何一个目录上点击右键就可以看到:
清理完成,保存文件,然后+ActiveClassRedirects=(OldClassName=SanMao,NewClassName=SanMaoYiDao) 就可以从DefaultEngine.ini 中删掉了