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 bool IsInputDown = false;//是否按下摇杆
 2 Vector3 DownPoint;//按下的点
 3 Vector3 UpPoint;//抬起时的点
 4 /// <summary>
 5 /// 鼠标按下
 6 /// </summary>
 7 public void GetMouseDownPoint()
 8 {
 9     DownPoint = Input.mousePosition;//获取按下的点
10     IsInputDown = true;
11 }
12 /// <summary>
13 /// 鼠标抬起
14 /// </summary>
15 public void GetMouseUpPoint()
16 {
17     IsInputDown = false;
18 }
19 
20 /// <summary>
21 /// 鼠标拖动方向
22 /// </summary>
23 public void MousePositon()
24 {
25     //抬起或拖动时的点
26     UpPoint = Input.mousePosition;
27     //计算拖动距离
28     Vector2 Offset = UpPoint - DownPoint;
29     //拖动距离
30     float distance = 20;
31     if (Mathf.Abs(Offset.x) > distance || Mathf.Abs(Offset.y) > distance)
32     {
33         //左右平移
34         if (Mathf.Abs(Offset.x) > Mathf.Abs(Offset.y))
35         {
36             if (Offset.x < 0)//左移
37             {
38                // Debug.Log("左");
39             }
40             else//右移
41             {
42                // Debug.Log("右");
43             }
44         }
45         else//上下平移
46         {
47             if (Offset.y > 0)
48             {
49                // Debug.Log("前");
50             }
51             else
52             {
53                // Debug.Log("下");
54             }
55         }
56     }
57 
58 }

 

原文参考链接:

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

posted @ 2022-07-12 16:59  枫亦  阅读(183)  评论(0)    收藏  举报