笔者刚学习unity10个月的时间,这个功能是项目需要,由笔者一个人独立完成开发。
有一些显得愚昧或者稚嫩的地方希望得到前辈们的指导,qq 321152405,邮箱也是这个。
一、功能实现思路
(1)数据准备
在主摄像机上挂载一个添加器给父物体的所有子物体(甚至孙物体)动态的添加rigidbody,使用子物体的世界坐标乘以一个值来作为这个子物体需要到达的目标位置,在原始状态使用添加器为每一个子物体动态添加一个寄存器来储存原始状态的子物体坐标(以便于合拢功能)。
(2 )使用一个挂载在主摄像机上的脚本来获取到父物体,笔者在这里使用gameobject.find方法实现,如果需要实用方面的开发,可以使用resource.load方法。
(3 )散开功能:
在主摄像机的添加器里写一个动态加载方法实现物体的散开方法(使用目标坐标减去原始坐标除以你需要的时间得到速度,在这个时间段内物体以这个速度进行移动,超过时停止)。
(4 )合拢功能:
与上面的散开功能大同小异,但是需要加上一个修复误差的代码块(因为使用上面的方法经过多次散开以后可能合拢是存在误差)
(5 )寄存器和添加器
这个笔者自己设计的功能模块,也是笔者在这一次开发体验中得到的受益匪浅的东西。
寄存器: 负责在软件的某个特殊时间段内寄存下一些在宁一个时间段需要使用的数据。
添加器: 负责在软件执行的某个时间段内给需要添加组件或者功能脚本的物体动态添加这些东西。(使用单例模式可以修改功能属性)
二、 功能展示
(1)原始状态
这里需要注意,所有子物体的坐标是否存在(在一次测试中我们团队里的美工给我的模型我打不开,后来找到原因是所有子物体的坐标都为0,后来他在3dmax里面重新导出了一下模型时取消了所有子物体的附加就可以跑起来了)