0%

unity使用摇杆控制物体移动(取巧方式)

一、虚拟摇杆的建立

1.创建摇杆UI

如图:建立三层(原形都是Image)

第一层:用于控制摇杆在界面中的位置

第二层:用于控制摇杆轮盘样式

第三层:用于显示摇杆方向

img

其中第一层设置为透明色,而第二、三层设置为圆形,并各自设置颜色

img

2.为摇杆添加滚动矩形(Scroll Rect)组件

最重要的部分:

1.为第一层的图片添加Scroll Rect组件(本摇杆就是利用该组件的回弹的特性)

2.拖动第三层到Content

\3. 组件中的Elasticity为回弹速度,根据个人修改

建议:

1.关闭组件中的Inertia选项

第一层的面板

img

Content

img

Inertia

img

Elasticity

img

此时已经完成一个简单的摇杆示例了,下面是个人编写的一个四个方向的判断代码

二、简单代码编写

1.简单的方向判断代码(仅四个方向)

可添加**Event Trigger组件(仅适用于UI),用其中的PointerDown(点击按下)PointerUp(点击抬起)**来实现下列方法

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
46
47
48
49
50
51
52
53
54
55
56
57
58
bool IsInputDown = false;//是否按下摇杆
Vector3 DownPoint;//按下的点
Vector3 UpPoint;//抬起时的点
/// <summary>
/// 鼠标按下
/// </summary>
public void GetMouseDownPoint()
{
DownPoint = Input.mousePosition;//获取按下的点
IsInputDown = true;
}
/// <summary>
/// 鼠标抬起
/// </summary>
public void GetMouseUpPoint()
{
IsInputDown = false;
}

/// <summary>
/// 鼠标拖动方向
/// </summary>
public void MousePositon()
{
//抬起或拖动时的点
UpPoint = Input.mousePosition;
//计算拖动距离
Vector2 Offset = UpPoint - DownPoint;
//拖动距离
float distance = 20;
if (Mathf.Abs(Offset.x) > distance || Mathf.Abs(Offset.y) > distance)
{
//左右平移
if (Mathf.Abs(Offset.x) > Mathf.Abs(Offset.y))
{
if (Offset.x < 0)//左移
{
// Debug.Log("左");
}
else//右移
{
// Debug.Log("右");
}
}
else//上下平移
{
if (Offset.y > 0)
{
// Debug.Log("前");
}
else
{
// Debug.Log("下");
}
}
}

}

原文参考链接:

https://blog.csdn.net/xinzhilinger/article/details/108647567