游戏开发之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简单的控制角色的移动和跳跃了。

游戏开发之U3D插件EasyTouch5.x使用相关推荐

  1. 游戏开发之U3D实现技能图标冷却的效果

    游戏开发之U3D实现技能图标冷却的效果 --本次使用的NGUI插件.     制作思路:NGUI插件里面有个UISprite组件,在它上面有个属性叫Type,改变相应的Type类型有不同的作用,本次使 ...

  2. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  3. 微信小游戏开发之CocosCreator多分辨率场景适配方案

    主题 Cocos Creator不同手机分辨率的背景图像和场景内容适配 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文 ...

  4. 开发中的“软”与“硬”:高画质移动游戏开发之道

    摘要:游戏的效果不仅与游戏引擎的渲染相关,与硬件优化也有千丝万缕的联系.一款基于芯片优化的移动游戏界面,甚至可以堪比视频游戏的视觉效果.高通半导体事业部资深经理刘晓光从软硬件两个层面分享了移动游戏开发 ...

  5. DirectX游戏开发之3D角色动起(下)

    DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...

  6. CDR插件开发之CPG插件001 - 什么是CPG插件

    CPG,英文缩写 Corel Plugin,中文含义是 Corel 插件,简称CPG插件,典型代表有魔镜.CDR是鼎鼎大名的创意图形设计软件,几乎是广告.印刷行业的标准,而正是由于CDR在日常的排版. ...

  7. DirectX游戏开发之2D文字的实现

    DirectX游戏开发之2D文字的实现 文字是承载信息最有效的载体之一,各种游戏程序都离不开文字的显示.对于3D文字来说,2D文字有其渲染的高效性和实现的简洁性. 2D文字的显示无论在写2D游戏还是在 ...

  8. libGDX游戏开发之Box2D(十四)

    libGDX游戏开发之Box2D(十四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goo ...

  9. JAVA游戏开发之FPS精准控制

    目录 JAVA游戏开发之FPS精准控制... 1 1       概述... 2 1.1        编写目的... 3 2       FPS精准控制... 3 2.1        FPS描述. ...

最新文章

  1. Eclipse打JAR包,插件FatJar安装与使用
  2. ASP.NET Web API 基本操作(CRUD)
  3. 数据库隔离级别---MySQL的默认隔离级别就是Repeatable,Oracle默认Read committed,最高级别Serializable
  4. docker单一部署jenkins
  5. SAP Cloud SDK for JavaScript 的搭建和使用方法介绍
  6. splite和map的结合使用
  7. 开发者论坛一周精粹(第十七期) :【漏洞预警】Windows再被爆SMB服务0day漏洞,阿里云提示您关注并修复...
  8. 在RedHat/CentOS下安装Docker(不升级内核)
  9. Atitit. 单点登录sso 的解决方案 总结
  10. 如何画 软件工程 流程图
  11. mysql 库存超卖_mysql处理高并发,防止库存超卖
  12. ionic给图片加水印
  13. android计算器开发论文,基于Android计算器功能的实现毕业设计论文
  14. apple 密码 seeion has time out 无法再本机上重设密码
  15. RAID 磁盘阵列与阵列卡
  16. 触控面板 开发_长信科技研发内核不断升级 成触控显示一体化领军企业
  17. pdfsam Enhanced 6中文版
  18. 自己动手制作Windows RE(Windows恢复环境)的启动U盘
  19. sso 登出_最强SSO单点登录教程(三)单点注销流程分析
  20. 人工智能召唤“神龙”,阿里云发布首个云上异构超算集群...

热门文章

  1. android xutils json请求,Android中的xutils框架在访问服务器时如何携带json数据
  2. UI酷炫!最新开源的Vue3.2移动电商实战(源码+文档分享)
  3. 【EMQX 5.0】1.1 MQTT协议介绍
  4. React - 从0开始学习React
  5. 使用Pyecharts进行全国水质TDS地图可视化全过程3:用Python拆分物流地址以及实现地址补全
  6. 腾讯十年运维专家谈运维的自我修养
  7. 在使用mac电脑时可能会出现无法联网的问题,小编就曾经遇到mac电脑一直无法连接WiFi,却又找不出问题的情况。一般来说mac电脑无法加入WiFi网络的原因多种多样,最常用的办法就是进入网络设置查找问
  8. 教你用 JavaScript 设计一个 Neumorphism 风格的数字时钟 (代码详解)
  9. 相对活力指数指标(RVI)量化交易
  10. BC28 NB-IOT模块调试记录