一.EasyTouch 资源结构

EasyTouchBundle [插件的根目录] |—EasyTouch [插件核心,核心功能的实现,偏向底层] |—EasyTouchControls [插件控制器,高级功能效果,偏向具体应用] |—Install [PlayMaker 可视化开发环境的支持库] |—Readme.txt [插件的版本更新信息]

二.Joystick虚拟摇杆

1.Joystick 介绍 Joystick:操纵杆,虚拟摇杆;EasyTouch 插件中最关键最核心的一个功能。 2.创建Joystick 游戏物体 Hierarchy 右键–> EasyTouch Controls –> Joystick 点击创建Joystick 游戏物体后,EasyTouch 会自动创建一个UGUI 的渲染环境,另外场景中还会出现一个InputManager 游戏物体。 3.Joystick 组成分析 ECTJoystick Image [ 虚拟摇杆功能组件,虚拟摇杆的背景图] |—- Image [ 虚拟摇杆的操纵钮] ECTJoystick 位置:EasyTouchControls/Plugins/ETCJoystick.cs

三.Joystick组件属性

1.基本属性 JoystickName:虚拟摇杆游戏物体的名字; Activated:虚拟摇杆是否激活可用; Visible:虚拟摇杆是否可见; UseFixedUpdate:使用FixedUpdate 函数更新摇杆信息; Unregister at disabling time:注销时禁用虚拟摇杆; 2.Position&Size [位置和大小] 这一组属性用于控制Joystick 的位置和大小,Joystick 的锚点定位不需要操作RectTransform 组件,而是控制该区域的属性。 3.Axes Properties [轴向属性] 虚拟摇杆本质还是键盘上的WASD 方向键的原理,两个轴向的数据获取。 该属性区域就是控制横轴,纵轴相关细节属性的;一般情况下保持默认即可。 4.Sprites [摇杆图片] 用于选择Joystick 所需要使用到的图片资源,该区域的修改,会直接影响Image组件上的图片属性。 [

](http://www.wjgbaby.com/wp-content/uploads/2018/01/18011101-235x300.jpg)
](http://www.wjgbaby.com/wp-content/uploads/2018/01/18011101-235x300.jpg)

四.Joystick 组件事件绑定

1.Move Events [移动事件] OnMoveStart,OnMove,OnMoveSpeed,OnMoveEnd 在移动虚拟摇杆操纵钮的时候,在移动过程中逐步触发对应的事件。 2.Touch Events [触摸事件] OnTouchStart,OnTouchUp 操纵钮的开始操作和操作结束,各执行一次事件。 3.Down Events [方向事件] OnDownUp,OnDownRight,OnDownDown,OnDownLeft 当我们按下虚拟摇杆操纵钮移动到上下左右最终位置时,触发一次。 4.Press Events [按下事件] OnPressUp,OnPressRight,OnPressDown,OnPressLeft 当我们按下虚拟摇杆操纵钮移动到上下左右最终位置时,则会一直触发。

五.Joystick 控制移动

1.Joystick 控制普通模型移动 使用Joystick 组件身上“onMoveSpeed(Vecot2)”事件来获取轴向的值: 测试:Joystick 默认两个轴向的取值范围。 ①:Transform 组件位移 使用Transform 组件的Translate(向量)方法来实现位移。 ②:Rigidbody 组件位移 使用Rigidbody 组件的MovePosition(当前位置+ 向量)方法来实现位移。 2.Joystick 控制人形动画 ①使用onMoveStart 和onMoveEnd 控制动画的播放与停止; ②使用onMoveSpeed 控制角色控制器的位移。 Cube方块和三维角色使用Joystick 移动代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerJoystick : MonoBehaviour {

private ETCJoystick m\_Joystick;

//CUBE方块.
private Transform cube\_Transform;
private Rigidbody cube\_Rigidbody;

//MODEL带动画的角色模型.
private Animator m\_Animator;
private CharacterController m\_CC;
private Transform m\_Transform;

void Start () {
    m\_Joystick = gameObject.GetComponent<ETCJoystick>();
    cube\_Transform = GameObject.Find("Player").GetComponent<Transform>();
    cube\_Rigidbody = GameObject.Find("Player").GetComponent<Rigidbody>();

    m\_Animator = GameObject.Find("RoyalKnight").GetComponent<Animator>();
    m\_CC = GameObject.Find("RoyalKnight").GetComponent<CharacterController>();
    m\_Transform = GameObject.Find("RoyalKnight").GetComponent<Transform>();

    m\_Joystick.onMoveSpeed.AddListener(OnMoveSpeed);
    m\_Joystick.onMoveStart.AddListener(OnMoveStart);
    m\_Joystick.onMoveEnd.AddListener(OnMoveEnd);
}

private void OnMoveStart()
{
    m\_Animator.SetBool("walk", true);
}

private void OnMoveEnd()
{
    m\_Animator.SetBool("walk", false);
}

private void OnMoveSpeed(Vector2 v2)
{
    Debug.Log(v2);
    Vector3 dir = new Vector3(v2.x, 0, v2.y) \* 0.5f;
    cube\_Transform.Translate(dir);  //Transform组件位移Cube.
    cube\_Rigidbody.MovePosition(cube\_Transform.position + dir); //刚体组件位移Cube.
    m\_CC.SimpleMove(dir \* 10);
    m\_Transform.LookAt(m\_Transform.position + dir);
}

}