本文概要:
显示指示线和技能角度,以joystick插件实现摇杆释放技能
先放一张最终效果图
技能角度和摇杆角度相同,松手发射技能(子弹)
显示指示线和技能角度
让人物自身发散出技能范围最方便的就是在人物上挂在技能UI的子物体,子物体由三个部分组成:半圆形技能范围图片、指示线的中心店poivt、技能指示线,其中技能指示线要挂在在poivr上,这样旋转poivt,指示线也能跟着poivt旋转,结构如下图所示:
下面进入unity商店下载并import joystick插件,将其中一个prefabs拖到Canvas中,我们可以通过代码读取joystick的中心位置,通过下图的角度关系,我们可以得:
θ=Arctanjoystick.Vertical / joystick.Horizontal),其中θ为弧度,还需要转成角度制,在第一象限内,技能角度=θ角度-90;第二象限内,技能角度=θ角度+90
玩家可以释放的角度范围为-90~90,即禁用第三第四象限。完整代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46if(joystick.Vertical!=0 || joystick.Horizontal != 0)//摇杆不在圆心时
{
IsRealse = true;
SkillPrefabs.SetActive(true);
if (joystick.Horizontal > 0 && joystick.Vertical > 0)//第一象限时
{
Skillangle = Mathf.Atan(joystick.Vertical / joystick.Horizontal)* Mathf.Rad2Deg - 90;
SkillPivot.transform.rotation = Quaternion.Euler(0, 0, Skillangle);
}
else if (joystick.Horizontal == 0)
{
SkillPivot.transform.rotation = Quaternion.Euler(0, 0, 0);//在(0,1)点时角度为0
}
else if (joystick.Horizontal < 0 && joystick.Vertical > 0)//第2象限时
{
Skillangle = Mathf.Atan(joystick.Vertical / joystick.Horizontal) * Mathf.Rad2Deg + 90;
SkillPivot.transform.rotation = Quaternion.Euler(0, 0, Skillangle);
}else if (joystick.Vertical < 0 && joystick.Horizontal<0)//第3象限时
{
SkillPivot.transform.rotation = Quaternion.Euler(0, 0, 90);
}
else if (joystick.Vertical < 0 && joystick.Horizontal > 0)//第4象限时
{
SkillPivot.transform.rotation = Quaternion.Euler(0, 0, -90);
}
}
else
{
if (IsRealse)
{
SkillShot();
}
SkillPrefabs.SetActive(false);
}