Unity UGUI 之 快速学会UGUI虚拟摇杆的实现。通过Unity中的UGUI的方法,通过代码吧UI的运动转化为实际游戏对象的移动方式,本节将具体讲述UGUI虚拟摇杆的实现,具体如下
2Mathf.Rad2Deg:1)参数形式public static float Rad2Deg;2)DescriptionRadians-to-degrees conversion constant (Read Only).This is equal to 360 / (PI * 2).
3Mathf.Cos:1)函数形式public static float Cos(float f);2)DescriptionReturns the cosine of angle f in radians.
4Mathf.Sin:1)函数形式public static float Sin(float f);2)Parametersf The argument as a radian.3)Returnsfloat The return value between -1 and +1.4)DescriptionReturns the sine of angle f in radians.
1打开Unity,新建一个空工程,然后Unity界面如下图
2在工程中新建一个文件夹“Resources”,然后导入两个虚拟摇杆图片,并把两张图片转为“Sprite(2D and UI)”,具体如下图
3在场景中新建一个“Canvas”,然后添加一个“Image”,并且命名为“JoystickPanelImage”,接着在“JoystickPanelImage”,再添加“Image”,命名为“JoystickImage”,随后把“Resources”的图片按名字分别对应“Image ”,具体如下图
4调整好“JoystickPanelImage”和“JoystickImage”的比例及布局,然后把“JoystickPanelImage”置于“Canvas”左下角,锚点也至于“Canvas”左下角,具体如下图
5在工程中新添加3个脚本,分别命名为“Joystick”、“JoystickData”、“JoystickManager”,然后双击“JoystickData”脚本或者右键“Open C# Project”打开脚本,具体如下图
6在打开的“JoystickData”脚本上进行代码编辑,在“JoystickData”类里面声明几个公有变量,用来记录摇杆移动的数据,具体代码及代码说明如下图
7在打开的“Joystick”脚本上进行代码编辑1)在“Joystick”类里面,首先声明定义几个委托,用来记录虚拟摇杆的触发事件,然后在声明定义虚拟摇杆的位置,运动范围等信息,接着是运动过程相对应的bool值,随后在Start函数里面赋值之前的一些变量,再者在Update中设置鼠标按下、抬起和移动调用函数,具体代码及代码说明如下图
8在打开的“Joystick”脚本上进行代码编辑2)继续编辑代码,接着分别实现鼠标按下、抬起和移动时调用的函数,然后实现Reset的一些bool值设置等,具体的代码及代码说明如下图
9在打开的“Joystick”脚本上进行代码编辑3)继续编辑代码,完善“enabled”、“visible”的属性定义,具体的代码及代码说明如下图
10在打开的“JoystickManager”脚本上进行代码编辑,首先定义几个变量,分别用来用来获取脚本数据,移动对象以及移动速度,然后在设置委托事件函数,最后实现事件函数的代码,通过使用三角函数来最终实现对游戏物体的控制,具体的代码及代码说明如下图
11JoystickData.cs具体脚本代码如下:/// /// Joystick 信息/// public class JoystickData { public float radians; //弧度 public float angle; //角度 public float angle360; //0~360 0为右 90为上 180为左 270为下 public float power; //0~1 拖拽的力度}
12Joystick.cs具体脚本代码如下:using UnityEngine.UI;using System;using UnityEngine;/// /// 虚拟摇杆具体的相关事件,相关操作/// public class Joystick : MonoBehaviour { //事件 public Action OnTouchDown; public Action OnTouchMove; public Action OnTouchUp; //Untiy 指定参数 public GameObject joystick;//移动对象 public float joystickRadius = 200.0f;//移动半径(UGUI像素) public Rect touchArea = new Rect(0, 0, 1f, 1f);//0~1 //data public JoystickData data = new JoystickData(); private Vector3 touchOrigin;//按下原点(Input.mousePosition) private float scaleFactor;//Screen 2 Canvas 的转换因子 private Transform self; private Vector3 selfDefaultPosition; private Vector3 joystickDefaultLocalPos;//control的默认位置 private bool isStarted = false; private bool isOnArea = false;//是否点击在区域上 private bool isDragged = false;//是否正在拖拽 public bool m_enabled = true;//false = 看得见,无法操作 public bool m_visible = true;//false = 看不见,可以操作 public bool locked = false;//锁定self位置 // Use this for initialization void Start() { self = transform; selfDefaultPosition = self.position; //获取转换系数 Canvas canvas = joystick.GetComponentInParent
13JoystickManager.cs具体脚本代码如下:using UnityEngine;public class JoystickManager : MonoBehaviour { public Joystick joystick; public Transform moveTarget; public float moveSpeed = 10.0f; // Use this for initialization void Start () { joystick.OnTouchMove += OnJoystickMove; } private void OnJoystickMove(JoystickData joystickData) { float moveX = Mathf.Cos(joystickData.radians) * moveSpeed * Time.deltaTime * joystickData.power; float moveZ = Mathf.Sin(joystickData.radians) * moveSpeed * Time.deltaTime * joystickData.power; moveTarget.Translate(new Vector3(moveX, 0, moveZ)); }}
14脚本编译正确后,回到Unity界面,把脚本“Joystick”赋给“JoystickPanelImage”,并且把“JoystickImage”赋给脚本“Joystick”的“Joystick”变量,具体如下图
15在场景中新建一个“GameObject”、“Cube”,并且把“GameObject”命名为“JoystickManager”,然后把脚本“JoystickManager”赋给“JoystickManager”,并把“JoystickImage”、“Cube”分别赋给脚本“JoystickManager”的“Joystick”和“MoveTarget”,具体如下图
16运行场景,鼠标点击、滑动,即可通过虚拟摇杆控制移动对象,具体如下图
17到此,《Unity UGUI 之 快速学会UGUI虚拟摇杆的实现》讲解结束,谢谢