标题: 简单易懂的ugui 摇杆 一个脚本直接用 [打印本页] 作者: lzx395 时间: 2016-4-27 15:19 标题: 简单易懂的ugui 摇杆 一个脚本直接用 using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace UnityEngine.UI {
[AddComponentMenu("UI/Joystick", 36), RequireComponent(typeof(RectTransform))]
public class Joystick : UIBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler {
[SerializeField, Tooltip("The graphic that will be moved around")]
RectTransform _joystickGraphic;
public RectTransform JoystickGraphic {
get { return _joystickGraphic; }
set {
_joystickGraphic = value;
UpdateJoystickGraphic();
}
}
[SerializeField]
Vector2 _axis;
[SerializeField, Tooltip("How fast the joystick will go back to the center")]
float _spring = 25;
public float Spring {
get { return _spring; }
set { _spring = value; }
}
[SerializeField, Tooltip("How close to the center that the axis will be output as 0")]
float _deadZone = .1f;
public float DeadZone {
get { return _deadZone; }
set { _deadZone = value; }
}
[Tooltip("Customize the output that is sent in OnValueChange")]
public AnimationCurve outputCurve = new AnimationCurve(new Keyframe(0, 0, 1, 1), new Keyframe(1, 1, 1, 1));
public JoystickMoveEvent OnValueChange;
public Vector2 JoystickAxis {
get {
Vector2 outputPoint = _axis.magnitude > _deadZone ? _axis : Vector2.zero;
float magnitude = outputPoint.magnitude;
outputPoint *= outputCurve.Evaluate(magnitude);
return outputPoint;
}
set { SetAxis(value); }
}
RectTransform _rectTransform;
public RectTransform rectTransform {
get {
if(!_rectTransform) _rectTransform = transform as RectTransform;
return _rectTransform;
}
}
bool _isDragging;
[HideInInspector]
bool dontCallEvent;
public void OnBeginDrag(PointerEventData eventData) {
if(!IsActive())
return;
public void OnEndDrag(PointerEventData eventData) {
_isDragging = false;
}
public void OnDrag(PointerEventData eventData) {
RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, eventData.position, eventData.pressEventCamera, out _axis);