前言:
公司的游戏,想实现一个类似于元气骑士前传的技能面板,这里的技能可以实现旋转替换。
记录一下我遇到的问题及解决办法。
如何生成这些图标
1:手动摆放。
优点:实现起来简单,代码量少。
缺点:可维护性差,万一要求改成一页技能只有三个,那就歇逼了。
2、通过3d数学动态生成
优点:可维护性强,当有新需求改动时,只需要修改几个对应参数即可。
缺点:代码量多,功能略复杂,对数学有一定的基础要求。
实现方式:通过三角函数sin和cos获取每个技能图标的位置。
如图所示,以中心为(0,0)点,那么a的长度,即对应的x坐标就是
x = c(半径)*cos角度
b的长度就是对应y,y的坐标是
y = c(半径)*sin角度
但是在unity中,sin函数和cos函数需要的值是弧度,而不是角度。
只需要额外调用一个参数Mathf.Deg2Rad即可。会自动将角度转换为弧度。至于为何这样,就不深究了。
至此,只要我们只要间隔角度,以及圆心位置,半径,就可以实现图上的效果。
翻转功能
即每个图标移动到下一个图标的位置。
由上述实现方法可知,我们能拿到每一个坐标的位置。
那我们就只需要让图片绕着圆心点旋转,当玩家点击旋转按钮时,所有图标一起转,转到下个图标位置停止即可。
动画方式:
可以定义一个变量,needRotate,当玩家点击旋转按钮时,设置为Ture。
方法可以写在update中。transform.RotateAround
移动后判断和目标点距离是否小于0.1f,如果小于,那么取消旋转needRotate设置为false,直接设置对应坐标以免误差。
非动画方式:
直接设置坐标即可。