Unity中虚拟摇杆的简单实现
2017-12-20 20:26
726 查看
本文只是简单的实现了摇杆控制人物的基本移动。
核心内容就是将摇杆移动方向传给要控制的对象。
代码如下:
public class JoyStick : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
//joy的起始位置
Vector3 OriginPos;
//joystick 的半径
float R;
//joy 可以运动的最大半径(即R)
float maxDis;
//joy 运动的方向
Vector3 dir;
//要控制的玩家
GameObject Player;
//移动对象的速度(在inspector面板可修改)
public float playerSpeed = 8f;
// 声明一个玩家移动的委托
public delegate void PlayerMoveDel(Vector3 Dir);
//给委托绑定事件
public event PlayerMoveDel _player;
//当joy运动到最大半径处,被控制对象不在移动,所以定义一个开关
//使joy 运动到最大半径处时,被控制对象依然可以移动
bool IsDrag;
private void Awake()
{
R= transform.parent.GetComponent<RectTransform>().rect.width;
maxDis = R / 2;
Player = GameObject.Find("Player");
//给委托事件绑定方法
_player += PlayerMove;
}
private void Update()
{
if (IsDrag)
{
_player(dir);
}
}
//joy的三种状态
#region JoyState
public void OnBeginDrag(PointerEventData eventData)
{
OriginPos = transform.position;
IsDrag = true;
}
public void OnDrag(PointerEventData eventData)
{
if (Vector3.Distance(eventData.position, OriginPos) <= maxDis)
{
transform.position = eventData.position;
}
else
{
//joy的最大位置
transform.position = (Input.mousePosition - OriginPos).normalized * maxDis + OriginPos;
}
//要传给被控制对象的参数(长度为1的标准化方向)即方向向量
dir = (Input.mousePosition - OriginPos).normalized;
}
public void OnEndDrag(PointerEventData eventData)
{
transform.position = OriginPos;
IsDrag = false;
}
#endregion
//玩家移动的方法
public void PlayerMove(Vector3 Dir)
{
//将三维移动转换为二维移动
Player.transform.Translate(new Vector3(dir.x, 0, dir.y) * Time.deltaTime * playerSpeed);
}
}
核心内容就是将摇杆移动方向传给要控制的对象。
代码如下:
public class JoyStick : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
//joy的起始位置
Vector3 OriginPos;
//joystick 的半径
float R;
//joy 可以运动的最大半径(即R)
float maxDis;
//joy 运动的方向
Vector3 dir;
//要控制的玩家
GameObject Player;
//移动对象的速度(在inspector面板可修改)
public float playerSpeed = 8f;
// 声明一个玩家移动的委托
public delegate void PlayerMoveDel(Vector3 Dir);
//给委托绑定事件
public event PlayerMoveDel _player;
//当joy运动到最大半径处,被控制对象不在移动,所以定义一个开关
//使joy 运动到最大半径处时,被控制对象依然可以移动
bool IsDrag;
private void Awake()
{
R= transform.parent.GetComponent<RectTransform>().rect.width;
maxDis = R / 2;
Player = GameObject.Find("Player");
//给委托事件绑定方法
_player += PlayerMove;
}
private void Update()
{
if (IsDrag)
{
_player(dir);
}
}
//joy的三种状态
#region JoyState
public void OnBeginDrag(PointerEventData eventData)
{
OriginPos = transform.position;
IsDrag = true;
}
public void OnDrag(PointerEventData eventData)
{
if (Vector3.Distance(eventData.position, OriginPos) <= maxDis)
{
transform.position = eventData.position;
}
else
{
//joy的最大位置
transform.position = (Input.mousePosition - OriginPos).normalized * maxDis + OriginPos;
}
//要传给被控制对象的参数(长度为1的标准化方向)即方向向量
dir = (Input.mousePosition - OriginPos).normalized;
}
public void OnEndDrag(PointerEventData eventData)
{
transform.position = OriginPos;
IsDrag = false;
}
#endregion
//玩家移动的方法
public void PlayerMove(Vector3 Dir)
{
//将三维移动转换为二维移动
Player.transform.Translate(new Vector3(dir.x, 0, dir.y) * Time.deltaTime * playerSpeed);
}
}
相关文章推荐
- Unity2D - 4. 实现android虚拟摇杆控制人物移动
- UGUI实现Unity虚拟摇杆
- unity虚拟摇杆的实现
- Unity手游之路<五>虚拟摇杆之Unity内置插件实现
- Unity实现虚拟摇杆
- Unity 虚拟摇杆之Unity内置插件实现
- Unity_虚拟摇杆的实现_065
- Unity手游之路<五>虚拟摇杆之Unity内置插件实现
- Unity手游之路<五>虚拟摇杆之Unity内置插件实现
- Unity手游之路<五>虚拟摇杆之Unity内置插件实现
- unity中虚拟摇杆的实现
- Unity使用EasyTouch虚拟摇杆控制角色
- unity中的简单水效果实现
- 使用Unity2.0的Interceptor实现简单AOP
- 虚拟主机的实现方式,真是简单啊!
- Kinect+Unity实现虚拟人物动作同步
- Unity Asset(3)虚拟摇杆插件 EasyTouch
- unity实现简单的摄像机切换
- unity 行为树 简单实现