1. 程式人生 > >Unity中實現搖桿功能

Unity中實現搖桿功能

雖然現在在Unity中實現搖桿有,Easy Touch來幫你完成,今天我就來給大家分享手動敲程式碼實現搖桿功能

下面開始上程式碼:

using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems;

public class MyJoystick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler, IEndDragHandler { public static MyJoystick instance;

public Image dayuan;
public Image xiaoyuan;

public Vector2 direction;

void Awake()
{
    if (instance == null)
    {
        instance = this;
    }
}
// Use this for initialization
void Start()
{
    dayuan.color = new Color(dayuan.color.r, dayuan.color.g, dayuan.color.b, 0.3f);
    xiaoyuan.color = new Color(xiaoyuan.color.r, xiaoyuan.color.g, xiaoyuan.color.b, 0.3f);
}

// Update is called once per frame
void Update()
{

}

private void MyPress(Vector2 v2)
{
    Vector2 shouzhiPos;
    RectTransformUtility.ScreenPointToLocalPointInRectangle(GameManager.instance.cv.transform as RectTransform, v2, GameManager.instance.cv.worldCamera, out shouzhiPos);
    float dis = Vector3.Distance(shouzhiPos, dayuan.transform.localPosition);
    dis = Mathf.Clamp(dis, 0, dayuan.rectTransform.rect.width / 2);
    Vector3 shouzhiV3 = shouzhiPos;
    Vector3 dir = (shouzhiV3 - dayuan.transform.localPosition).normalized;
    xiaoyuan.transform.localPosition = dayuan.transform.localPosition + dir * dis;

    direction = dir * dis / (dayuan.rectTransform.rect.width / 2);

    dayuan.color = new Color(dayuan.color.r, dayuan.color.g, dayuan.color.b, 1);
    xiaoyuan.color = new Color(xiaoyuan.color.r, xiaoyuan.color.g, xiaoyuan.color.b, 1);
}

private void MyUp()
{
    xiaoyuan.transform.localPosition = dayuan.transform.localPosition;
    dayuan.color = new Color(dayuan.color.r, dayuan.color.g, dayuan.color.b, 0.3f);
    xiaoyuan.color = new Color(xiaoyuan.color.r, xiaoyuan.color.g, xiaoyuan.color.b, 0.3f);
    direction = Vector3.zero;

}

public void MyEndDrag()
{
    MyUp();
}

public void OnPointerDown(PointerEventData eventData)
{
    MyPress(eventData.pressPosition);
}

public void OnPointerUp(PointerEventData eventData)
{
    MyUp();
}

public void OnDrag(PointerEventData eventData)
{
    MyPress(eventData.position);
}

public void OnEndDrag(PointerEventData eventData)
{
    MyUp();
}
}

標記====》大圓(dayuan)就是搖桿外部的園   小圓(xiaoyuan)搖桿內部的圓