1.现在unity做一个项目,各种插件各种包,于是项目资源就无限变大了,其实一些简单的功能可以自己写,这里就是试着使用UGUI编写一个摇杆功能
2.脚本如下:
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.EventSystems;
- using System.Collections;
- public class UGUIJoystick : MonoBehaviour,IDragHandler{
- public RectTransform joystickImage;
- public Vector3 startPos;
- public int maxDis = 70;
- public float speed = 5;
- // Use this for initialization
- void Start () {
- startPos = joystickImage.position;
- }
- // Update is called once per frame
- void Update () {
- if (Application.platform == RuntimePlatform.Android)
- {
- if (Input.touchCount <= 0)
- {
- if (Vector3.Distance(joystickImage.position, startPos) > 0.01f)
- {
- joystickImage.position = joystickImage.position - (joystickImage.position - startPos).normalized * speed;
- }
- }
- }
- else
- {
- if (!Input.GetMouseButton(0))
- {
- if (Vector3.Distance(joystickImage.position, startPos) > 0.01f)
- {
- joystickImage.position = joystickImage.position - (joystickImage.position - startPos).normalized * speed;
- }
- }
- }
- }
- public void OnDrag(PointerEventData eventData)
- {
- Vector3 wordPos;
- //将UGUI的坐标转为世界坐标
- if (RectTransformUtility.ScreenPointToWorldPointInRectangle(joystickImage, eventData.position, eventData.pressEventCamera, out wordPos))
- joystickImage.position = wordPos;
- Vector3 dir = (joystickImage.position - startPos).normalized;
- if (Vector3.Distance(joystickImage.position, startPos) >= maxDis)
- {
- joystickImage.position = startPos + dir * maxDis;
- }
- }
- }
3.这里除了一个简单的接口实现,就是坐标的转换,让摇杆一直跟着手指移动,这里就需要一个函数
4.将这个脚本绑定在摇杆用于移动的图片上,效果如下:
5.摇杆常用移动端,但是我并未在移动端