其他分享
首页 > 其他分享> > Unity自学虚拟摇杆

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