今天跟大家伙儿唠唠我这几天折腾的玩意儿,标题也写,就是“可以插别人的3D模拟器游戏”。听着是不是有点那就是想搞个能让玩家自己往里头加东西的模拟器,说白,就是DIY。
我寻思着这玩意儿应该挺简单,不就加载个模型,跑个动画吗?结果一上手,好家伙,直接懵逼。
模型格式是个大问题。FBX、OBJ、GLTF,各种格式看得我眼花缭乱。选GLTF,主要是这玩意儿是JSON格式,用起来比较方便,也好解析。
然后就是加载。我用的是Unity,加载GLTF模型倒是不难,直接用个插件就行。但是!加载进来的模型,材质丢,贴图没,光秃秃的,跟个白模似的。
这可咋整?只能硬着头皮啃文档,一点一点地调。先是材质球,新建一个,然后把颜色、粗糙度、金属度这些参数往上怼。贴图就更麻烦,得先读取图片文件,再转换成Unity的Texture2D格式,再贴到材质球上。
光是这模型加载,就花我两天时间。
接下来是动画。动画也挺麻烦的,得先把动画文件读取进来,然后创建AnimationClip,再把动画数据往AnimationClip里头塞。再用Animator组件控制动画播放。
动画这块儿,我参考不少网上的教程,总算是把人物跑起来。
模型和动画都有,接下来就是交互。我想让玩家能自由地移动模型,旋转模型,缩放模型。
移动还好说,直接用Translate函数就行。旋转就有点麻烦,得用Quaternion,还得注意旋转轴的问题。缩放更麻烦,得修改模型的localScale属性,还得注意缩放中心点的问题。
交互这块儿,我用Unity的Input System,感觉比旧的Input Manager好用多。
就是把这些东西整合起来。我写个简单的UI,让玩家可以选择模型文件、动画文件,然后加载到场景里。
这回实践还是挺有收获的。虽然过程中遇到不少坑,但是都一一解决。也算是对3D图形学有更深入的解。
不过这玩意儿现在还只是个雏形,还有很多地方需要完善。比如,模型碰撞检测、物理模拟、光照效果等等。
以后有时间再慢慢折腾。