尽量不使用游戏引擎提供的工具来制作游戏是正确的思路吗？
这种思想我一个完美世界出来的同事比较推崇，他能力很强，也可以不局限于引擎，之前还做了一套运行时动画模块，包括编辑动画、动画混合、骨骼动画、权重绑定等基本功能，包括一个简单的运行时编辑器，完全可以脱离animation animator，不过这和项目组需求有关，没有特殊需求让他把unity动画模块整个重写一遍，也是不愿意的。因为首先工作量太大、其次做出来的东西未必比官方好、再次不利于组内中低级别同事的学习和发展，你不可能让别人放弃官方的东西学你自己的“半成品”，跳槽后找工作怎么说？ 而一个游戏引擎模块太多了，资产模块、场景编辑管理模块、ui系统、渲染管线、音视频模块、脚本接口系统等等，如果把精力放在实现底层系统上面，就失去了目的性，因为我们最终目的是做一款游戏或者软件。 当然如果没有排期压力和经济压力，亦或者项目需求就是要实现相关的功能，我也是十分推崇自己手动写一遍的，这种做法对于学习引擎很有帮助。 我自己的话，对引擎和应用的关系，理解为“再封装”，什么意思呢？就是把引擎最基本和稳定的功能当做“1+1=2”这样的“基本逻辑”，我认为是“真理”不做修改，而是做一层引擎层与上层开发人员的使用接口封装，尽可能简化使用复杂度。 比如：1.播放一个动画，我会提供封装playanim(animname,starttime,endtime,speed,callback)，代表播放哪个动画，起点终点时间，播放速度，播完回调函数等 2.显示一个屏幕后期特效，我会封装playeffect(effecttype,time,speed,callback)，我会开发各种特效着色器，整合使用。 3.进行二次抽象，根据具体设计将基类再封装，整个业务层不再使用引擎本身的脚本框架，些许便于移植（虽然至今没有过这方面需求，而且移植也不会因为这样而变得简单）。 这样做是为了，首先底层功能开发人员（包括我）根据引擎的不同（有可能是unity或godot、ce5等c#脚本引擎，而ue4也只能保留理论思想）完成相应的核心功能，上层开发人员的代码无需变动（或者无需大变动），但是最底层依旧是使用引擎提供的功能集。同时代码都是可做查看的，大家都能学习进步。 同时“再扩展”，就跟我们平时用插件写插件一样，根据项目的需求将功能尽可能独立开发成插件的形式，做成一个扩展库，比如视频直播插件、流程图插件、labview仿真插件、技能编辑器、过场编辑器等这些历史开发过的东西，我一直都可以拿出来用（偶尔修修）。 最后，感叹游戏引擎太复杂困难了，我想专攻一点也难以学的很深入，且学且珍惜。