Unity自学虚拟摇杆
作者:互联网
一.创建虚拟摇杆对象
1.虚拟摇杆区域:在Canvas下创建Image对象:VirtualControllerArea
(1)Color:R=0,G=0,B=0,A=75
(2)RectTransform:Pos X=-500,Pos Y=-200,Width=200,Height=200
2.虚拟摇杆控件:在VirtualControllerArea下创建Image对象VirtualController
(1)Color:R=0,G=0,B=0,A=75
(2)RectTransform:Pos X=-0,Pos Y=-0,Width=75,Height=75
二.新建虚拟摇杆组件VirtualController
1.给VirtualController对象添加VirtualController添加虚拟摇杆组件
2.组件代码详解:
using UnityEngine;
using UnityEngine.EventSystems;
public class VirtualController : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
Vector3 _startPosition;
public float _minXPos;
public float _minYPos;
public float _maxXPos;
public float _maxYPos;
void Start()
{
}
#region 在开始拖拽transform对象时,获取transorm的初始位置
public void OnBeginDrag(PointerEventData data)
{
_startPosition = transform.position;
}
#endregion
#region 在拖拽transform对象时,设置transorm的位置为拖拽后的位置并限制transform的位置
public void OnDrag(PointerEventData data)
{
transform.position = data.position;
transform.localPosition = new Vector3 (Mathf.Clamp (transform.localPosition.x, _minXPos, _maxXPos), Mathf.Clamp (transform.localPosition.y, _minYPos, _maxYPos), 0);
}
#endregion
#region 在结束拖拽transform对象时,重置transorm到初始位置
public void OnEndDrag(PointerEventData data)
{
transform.position = _startPosition;
}
#endregion
}
三.虚拟摇杆使用案例
1.新建玩家移动组件PlayerMove
2.创建立方体并重置Transform
3.给立方体绑定PlayerMove组件
4.组件代码详解:
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
VirtualController _playControl;
void Start ()
{
_playControl = GameObject.Find ("VirtualController").GetComponent<VirtualController> ();
}
void Update ()
{
#region 根据虚拟摇杆的水平方向来模拟Input.GetAxis("Horizontal")旋转玩家
if (_playControl.transform.localPosition.x > 0) {
transform.Rotate (0, 20 * Time.deltaTime, 0);
}
if (_playControl.transform.localPosition.x < 0) {
transform.Rotate (0, -20 * Time.deltaTime, 0);
}
#endregion
#region 根据虚拟摇杆的垂直方向来模拟Input.GetAxis("Vertical")移动玩家
if (_playControl.transform.localPosition.y > 0) {
transform.Translate (transform.forward * 10 * Time.deltaTime);
}
if (_playControl.transform.localPosition.y < 0) {
transform.Translate (transform.forward * -10 * Time.deltaTime);
}
#endregion
}
}
标签:localPosition,VirtualController,transform,摇杆,Unity,虚拟,自学,public 来源: https://www.cnblogs.com/furuipeng/p/15358839.html