Unity Joystick 虚拟摇杆的实现
程序员文章站
2024-03-24 11:12:22
...
直接调用VirtualJoystick.cs中的公有horizontal 和 Vertical方法来获得原点中心按钮距离圆心的位置。
教学视频看本链接:
先贴代码:
VirtualJoystick.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class VirtualJoystick : MonoBehaviour , IDragHandler, IPointerDownHandler, IPointerUpHandler{
private Image bgImg;
private Image joystickImg;
private Vector3 inputVector;
private void Start() {
bgImg = GetComponent<Image>();
joystickImg = transform.GetChild(0).GetComponent<Image>();
//Debug.Log(bgImg);
//Debug.Log(joystickImg);
}
public virtual void OnPointerDown(PointerEventData ped)
{
OnDrag(ped);
}
public virtual void OnPointerUp(PointerEventData ped)
{
inputVector = Vector3.zero;
joystickImg.rectTransform.anchoredPosition = inputVector;
}
public virtual void OnDrag(PointerEventData ped)
{
Vector2 pos;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(bgImg.rectTransform
, ped.position
, ped.pressEventCamera
, out pos
))
{
pos.x = (pos.x / bgImg.rectTransform.sizeDelta.x);
pos.y = (pos.y / bgImg.rectTransform.sizeDelta.y);
pos.x = pos.x * 2 + 1;
pos.y = pos.y * 2 - 1;
inputVector = new Vector3(pos.x, 0, pos.y);
inputVector = (inputVector.magnitude > 1.0f) ? inputVector.normalized : inputVector;
joystickImg.rectTransform.anchoredPosition =
new Vector3(inputVector.x * (bgImg.rectTransform.sizeDelta.x / 3), inputVector.z * (bgImg.rectTransform.sizeDelta.y / 3), 0);
}
}
public float Horizontal() {
if (inputVector.x != 0) {
return inputVector.x;
}
else{
return Input.GetAxis("Horizontal");
}
}
public float Vertical()
{
if (inputVector.z != 0)
{
return inputVector.z;
}
else {
return Input.GetAxis("Vertical");
}
}
}
推荐阅读
-
Unity Joystick 虚拟摇杆的实现
-
虚拟摇杆实现移动
-
windows10_intellij本地访问虚拟机ubuntu16.04的Hadoop的实现Demo
-
【Unity】【C#】《U3d人工智能编程精粹》学习心得--------AI角色的感知方式-视觉感知实现解读
-
用两种简单的方式实现unity的分页效果
-
unity Physics.Raycast 射线进入离开collider、开始结束碰撞检测功能的实现
-
Unity中碰撞与触发的理解与效果实现
-
Unity可以在移动端设备上实现相机的绕着目标点旋转,平移,缩放的脚本
-
.Net中如何操作IIS的虚拟目录原理分析及实现方案
-
.Net中如何操作IIS的虚拟目录原理分析及实现方案