游戏开发之U3D插件EasyTouch5.x使用
本篇只讲EasyTouch5.x的使用,不讲源码。本来想把EasyTouch5.x的使用手册翻译一遍,想来也是没那个时间。
第一步,导入EasyTouch5.x.packge,途径有两种,1.去UnityAssetStore下载最新版本的EasyTouch插件,或者2.去导入其他童鞋下载好的资源包,当然土豪最好自己购买一下吧,毕竟还是得支持一下EasyTouch开发团队,因为他们给其他游戏开发者们提供了便利,省去了再去开发的成本和时间。导入进项之后会在GameObject下拉菜单中出现相应的选项列表EasyTouch Controls,EasyTouch。
第二步,摇杆的使用介绍,怎么创建摇杆和对摇杆属性的一些介绍。创建摇杆操作点击GameObject=>EasyTouchControls=>Joystick,
创建完之后会在Hierarchy面板出现摇杆物体,Game视图也会出现一个摇杆。
因为EasyTouch5.x是基于UGUI写的,一改以前基于OnGUI的写法,所以它的物体出现方式和创建Canvas下的控件一样,也会出现Canvas和EventSystem,而Joystick也会成为Canvas的子物体。摇杆Joystick的名字和以往EasyTouch4.x的名字改写一样,都不能在Hierarchy面板下修改,只能在Inspecter面板的ETC Joystick组件下面的属性Joystick Name 修改名字。
把ETC Joystick 组件介绍一下吧,
1.Joystick name 修改摇杆的名字;
2.Activated 是否激活,勾选之后,摇杆才可以使用,不勾选的话点击不会起作用;
3.Visible 是否在Game视图显示,勾选之后会在Game视图出现,不勾选就不会出现在Game视图;
4.Use Fixed Update 是否使用固定更新,勾选之后会在Fixed Update方法里执行相关的摇杆参数更新;
5.Unregister at disabling time 是否在脚本不可用的时候取消注册事件。
勾选之后会执行,不勾选的话不会执行。
6.Position&Size
控制摇杆整体的位置和大小。
Type 有两个选项,
Static 静态,摇杆的位置在Game视图中的位置是固定不变的;
Dynamic 动态的,摇杆的位置是动态的,随着鼠标(PC)或手指(移动平台)的点击位置而出现;
Joystick area 指定摇杆出现的区域;
Background size 摇杆背景图片的尺寸大小;
Thumb size 摇杆中间可控的图片尺寸大小;
Radius based on 摇杆背景的半径基于本身图片的长或宽;
7.Axes Properties 虚拟键属性
Enable Unity axes 是否使用Unity 中的虚拟键;
Allow Unity axes on standalone 是否允许在Pc平台使用Unity虚拟键;
Force visible 是否强制显示;
8.Turn&Move diretion Action 是否使用旋转和移动行为
勾选之后,会出现如下界面,可以往Direct action to 选项中拖一个游戏对象,然后可以通过摇杆控制游戏对象的移动旋转。
比如我新建一个Cube,然后把这个Cube拖过来,运行Unity,就可以通过摇杆控制Cube的移动和旋转了。
Auto link on tag 勾选之后可以通过标签自动查找到该游戏对象,
比如我勾选上,选中Player标签,然后创建一个Cube,然后给Cube设置一下Player标签。也可以通过摇杆控制角色的移动。
Move cure 移动曲线,可以自己调整;
Move speed 控制指定物体的移动速度,可以自己调整;
Intial rotation 开始的角度;
Lock in jump 是否锁定jump轴
Horizonal axis水平轴A键和D键;
Vertical axis 垂直轴W键和S键;
Camera关于摄像机的设置;
Enable tracking是否可跟踪物体;
勾选之后,会弹出如下窗口:
Auto link on tag也是根据标签查找Camera进行控制;
Target mode目标模式有四种,一般默认就好;
Camera target摄像机观察的目标,可以把游戏对象拖过来,也可以根据标签查找;
Camera mode摄像机运动模式,有两种,一般默认Follow就好;
Offset指摄像机与射线机观察的目标的相对位置;
9.Sprites设定摇杆的背景图片,可以点select进行图片选择;
10.Move Events指移动摇杆时可以绑定的方法,和UGUI的Button组件绑定方法一样,唯一的缺点就是把指定方法的参数限定了。(这里是Vector2)
第三步,对ETCButton组件的使用和相关属性进行介绍。
它的创建和摇杆一样,也是从菜单栏GameObject=>EasyTouch Controls=> Button,创建完之后如下图,名字修改和摇杆修改一样。
主要介绍一下Button控件自身带的ETC Button组件的Behaviour属性,可以它的这些属性实现控制模型跳跃的功能。具体设置如下,需要注意的是模型身上必须加一个Character Controller组件。
给Button绑定事件,和UGUI的Button使用方法相同,也是拖一个游戏对象,选择它身上的脚本,然后选择指定的方法,注意方法必须定义成Public。
最后介绍一下在脚本里面怎么使用摇杆和Button。
怎么用摇杆控制角色的移动呢?第一步,先在Start方法里面根据摇杆Joystick名字获取到具体的摇杆moveJoystick,然后有两种方式解决!
下面是我写的第一个通过摇杆控制角色移动的脚本示例。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController :MonoBehaviour {
//定义角色控制器组件
private CharacterController chController;
//定义移动速度
public float moveSpeed=5;
//定义摇杆组件
private ETCJoystick moveJoystic;
void Start () {
//获取角色控制器组件
chController =this.GetComponent<CharacterController>();
//获取指定摇杆,ETCInput.GetControlJoystick(摇杆名字);
//注意获取指定摇杆的方法,不要放在Awake里面,必须在Start里面,
//因为放在Awake里面的时候会报null的错,可能跟它底部逻辑顺序有关吧!
moveJoystic =ETCInput.GetControlJoystick("moveJoystick");
}
void Update () {
//获取摇杆水平轴的值
float h = moveJoystic.axisX.axisValue;
//获取摇杆垂直轴的值
float v = moveJoystic.axisY.axisValue;
if(h!=0||v!=0)
{
//获取摇杆的方向
Vector3 dir = new Vector3(h, 0, v);
//把方向转换到相机的坐标系中
dir =Camera.main.transform.TransformDirection(dir);
//方向的y轴值始终设为0
dir.y = 0;
//把方向向量归一化
dir.Normalize();
//指定一个4倍的向量
Vector3 sp = dir * 4;
//控制模型的朝向
this.transform.LookAt(sp + this.transform.forward);
//用角色控制器控制移动
chController.Move(dir*moveSpeed*Time.deltaTime);
}
}
}
第二种呢可以,通过绑定事件实现移动,如下方式:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController :MonoBehaviour {
//定义角色控制器组件
private CharacterController chController;
//定义移动速度
public float moveSpeed=5;
//定义摇杆组件
private ETCJoystick moveJoystic;
void Start () {
//获取角色控制器组件
chController =this.GetComponent<CharacterController>();
//获取指定摇杆,ETCInput.GetControlJoystick(摇杆名字);
//注意获取指定摇杆的方法,不要放在Awake里面,必须在Start里面,
//因为放在Awake里面的时候会报null的错,可能跟它底部逻辑顺序有关吧!
moveJoystic =ETCInput.GetControlJoystick("moveJoystick");
//给摇杆绑定方法,通过如下方式,方法参数必须是Vector2
moveJoystic.onMove.AddListener(OnMove);
}
//摇杆绑定方法
private void OnMove(Vector2 vec)
{
if(vec!=Vector2.zero)
{
Move(vec.x, vec.y);
}
}
private void Move(float h,float v)
{
if (h != 0 || v != 0)
{
//获取摇杆的方向
Vector3 dir = new Vector3(h, 0, v);
//把方向转换到相机的坐标系中
dir =Camera.main.transform.TransformDirection(dir);
//方向的y轴值始终设为0
dir.y = 0;
//把方向向量归一化
dir.Normalize();
//指定一个4倍的向量
Vector3 sp = dir * 4;
//控制模型的朝向
this.transform.LookAt(sp + this.transform.forward);
//用角色控制器控制移动
chController.Move(dir * moveSpeed *Time.deltaTime);
}
}
}
要用Button控制角色的跳跃怎么做呢?第一步,先在Start里面把Button根据名字获取到,第二步给Button绑定一个跳跃的方法,第三步,实现跳跃的逻辑。实现之后的脚本如下。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController :MonoBehaviour {
//定义角色控制器组件
private CharacterController chController;
//定义角色移动的方向
private Vector3 direction = Vector3.zero;
//定义视距
public const float sightDistance = 4;
//定义移动速度
public float moveSpeed=5;
//定义重力加速度
private float gravity = 9.8f;
//定义摇杆组件
private ETCJoystick moveJoystic;
//定义Button组件
private ETCButton jumpBtn;
//是否跳跃
private bool isJump=false;
void Start () {
//获取角色控制器组件
chController =this.GetComponent<CharacterController>();
//获取指定摇杆,ETCInput.GetControlJoystick(摇杆名字);
//注意获取指定摇杆和Button的方法,不要放在Awake里面,必须在Start里面,
//因为放在Awake里面的时候会报null的错,可能跟它底部逻辑顺序有关吧!
moveJoystic =ETCInput.GetControlJoystick("moveJoystick");
//给摇杆绑定方法,通过如下方式,方法参数必须是Vector2
moveJoystic.onMove.AddListener(OnMove);
//根据Button的名字获取指定Button
jumpBtn =ETCInput.GetControlButton("jumpBtn");
//给Button绑定指定的方法
jumpBtn.onDown.AddListener(Jump);
}
//跳跃方法
private void Jump()
{
isJump =true;
if (isJump)
{
//用角色控制器控制角色向上移动
chController.Move(Vector3.up * gravity);
//升空之后给一个重力加速度
this.transform.position += Vector3.down *Time.deltaTime * gravity;
//如果落地,isJump设为false
if (chController.isGrounded)
{ isJump =false; }
}
}
//摇杆绑定方法
private void OnMove(Vector2 vec)
{
if(vec!=Vector2.zero)
{
Move(vec.x, vec.y);
}
}
//移动方法
private void Move(float h,float v)
{
if (h != 0 || v != 0)
{
//获取摇杆的方向
Vector3 direction = new Vector3(h, 0, v);
//把方向转换到相机的坐标系中
direction =Camera.main.transform.TransformDirection(direction);
//方向的y轴值始终设为0
direction.y = 0;
//把方向向量归一化
direction.Normalize();
//指定一个4倍的向量
Vector3 sp = direction * sightDistance;
//控制模型的朝向
this.transform.LookAt(sp + this.transform.forward);
//用角色控制器控制移动
chController.Move(direction * moveSpeed *Time.deltaTime);
}
}
}
总结一下:第一步,在EasyTouch Controls创建一个摇杆,起名为moveJoystick,第二步,在EasyTouch Controls创建一个Button,起名为jumpBtn,然后创建一个角色模型,把这个脚本添加到角色模型上,就可以通过摇杆和Button简单的控制角色的移动和跳跃了。