usingSystem;
usingUnityEngine;
usingUnityEngine.EventSystems;
usingUnityEngine.UI;
publicclass JoyPlayerCtrl : MonoBehaviour
{
publicenum AxisOption
{
Both,// Use both
OnlyHorizontal,// Only horizontal
OnlyVertical// Only vertical
}
publicJoystickInput mJoystick;
publicint 距离Max = 100;
publicAxisOption axesToUse = AxisOption.Both;
boolm_UseX; // Toggle for using the x axis
boolm_UseY; // Toggle for using the Y axis
Vector3 StartPos;
Vector3 FirstPos;
Image IMGBG;
publicImage IMGCheck;
publicstatic JoyPlayerCtrl Instance;
voidAwake()
{
Instance = this;
IMGBG = GetComponent<Image>();
m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);
mJoystick = newJoystickInput();
mJoystick.距离Max = 距离Max;
StartPos = transform.localPosition;
OnPointerUp();
}
voidUpdate()
{
if(Input.GetKeyDown(KeyCode.Mouse0))
{
OnPointerDown(newVector2(Input.mousePosition.x, Input.mousePosition.y));
}
if(Input.GetKey(KeyCode.Mouse0))
{
OnDragDuan(newVector2(Input.mousePosition.x, Input.mousePosition.y));
}
if(Input.GetKeyUp(KeyCode.Mouse0))
{
OnPointerUp();
}
}
/// <summary>
/// 首次按下
/// </summary>
/// <param name="mousePos"></param>
publicvoid OnPointerDown(Vector2 mousePos)
{
IMGBG.enabled = true;
IMGCheck.enabled = true;
mJoystick.isUser = true;
IMGCheck.transform.localPosition = Vector3.zero;
FirstPos = mousePos;
transform.localPosition = newVector3(mousePos.x - Screen.width / 2, mousePos.y - Screen.height / 2, StartPos.z);
}
/// <summary>
/// 弹起
/// </summary>
publicvoid OnPointerUp()
{
IMGBG.enabled = false;
IMGCheck.enabled = false;
mJoystick.isUser = false;
}
/// <summary>
/// 拖动
/// </summary>
/// <param name="DragPos"></param>
voidOnDragDuan(Vector3 DragPos)
{
Vector3 方向v3 = (DragPos - FirstPos).normalized;
if(方向v3 != Vector3.zero)
{
mJoystick.方向 = Quaternion.LookRotation(方向v3, newVector3(0, 0, -1));
mJoystick.距离 = Mathf.Clamp(Vector3.Distance(DragPos, FirstPos), 0, mJoystick.距离Max);
IMGCheck.transform.localPosition = mJoystick.方向 * Vector3.forward * mJoystick.距离;
}
}
publicclass JoystickInput
{
publicbool isUser;
publicQuaternion 方向;
publicfloat 距离;
publicfloat 距离Max;
publicfloat get力度()
{
return距离 / 距离Max;
}
publicQuaternion getY方向()
{
Quaternion temp = JoyPlayerCtrl.Instance.mJoystick.方向 * Quaternion.Euler(90,0,0);
returnQuaternion.Euler(0, -temp.eulerAngles.z, 0);
}
}
voidOnGUI()
{
if(mJoystick.isUser)
{
GUI.Label(newRect(10, 10, 200, 30), "方向"+ mJoystick.方向.eulerAngles.ToString());
GUI.Label(newRect(10, 50, 200, 30), "距离"+ mJoystick.距离);
GUI.Label(newRect(10, 90, 200, 30), "力度"+ mJoystick.get力度());
}
}
}
原文链接在此
http://www.manew.com/thread-89131-1-1.html