这次老大要求我做一个招式对比界面
要求
有敌我双方的技能栏,每个技能长度为1,2,3,基本要求就是当长按其中一个技能的时候,高亮当前技能和它匹配的那个技能。
高亮思路
高亮的第一反应是用挖空黑色阴影来做,然后发现这个有两个问题
1. 挖空的地方是不确定的,但是这个可以通过阴影尽量大,然后移动阴影来使空缺对应高亮位子来解决。
2. 挖空的形状是不确定的,这个就比较难搞了,暂时放弃了
挖空图片的参考链接:http://www.unitymanual.com/thread-35475-1-1.html?_dsign=8a6323fb
另外一个解决方案就是改变需要高亮图片的深度,使其在阴影上方显示。
这个比较简单,就是实现起来比较麻烦,因为一个gameobject里面有多个spirt,要分别改买个spirt的深度,然后用完了再改回去。
触发事件思路
好麻烦,技能的点击都是封装好了的,但是我又不能直接用,比如一个长度为2的技能,要求我点击前半部分和后半部分响应不同事件,但是封装的碰撞是连在一起的,我不可能去把原来的改了,也不能用两个新的分开的碰撞放在上面因为会覆盖掉原来的(我居然试了,浪费一上午)。所以现在唯一的解决方案就是处理鼠标点击了。
通过
if (Input.GetMouseButton(0))
Input.mousePosition;
获得鼠标位子,但是这个仅仅是鼠标在屏幕上的像素位子,也就是一个二维坐标,代表屏幕上的一个点,跟unity里的世界没有任何关系,所以这时候需要通过射线投射到世界中。
Ray ray = Camera.current.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
然后hit.point就是碰撞点的坐标,通过比较这个点的y坐标和当前被点击的技能的y坐标来判断点的是什么部位。。
比如 hit.point.x > transform.position.x + c, 就说明点击的后半部分。。
然后找一下常数使他看起来精确一点。。
用同样的方法,比较y方向坐标来判断是敌方技能还是我方技能
真的好麻烦,做了一天还有bug,而且也不优美,不过能解决问题就行了