开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:1815

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1195|回复: 3

[秦元培] Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动

[复制链接]  [移动端链接]
抢楼 抢楼 本帖为抢楼帖,欢迎抢楼! 
排名
10413
昨日变化
6

31

主题

128

帖子

766

积分

Rank: 9Rank: 9Rank: 9

UID
57132
好友
23
蛮牛币
587
威望
0
注册时间
2014-11-23
在线时间
174 小时
最后登录
2016-7-21

认证开发者

发表于 2015-11-4 09:31:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei。

今天呢,我们来一起学习在中使用EasyTouch虚拟摇杆来控制人物移动。尽管Unity3D内置了一个Joystick组件(其实就是一个GUITexture和一个Js脚本文件啦),可是博主在实际使用的时候发现这个内置的Joystick存在无法适应屏幕大小的问题,所以博主在这里向大家推荐使用EasyTouch这个插件,通过这个插件,我们可以快速地在应用中集成虚拟摇杆功能,而且可以通过改变贴图的方式来自定义摇杆的外观,所以总体来说,这个插件是在触摸交互这部分功能中最好的一个插件。首先我们导入EasyTouch的资源包,然后通过Hedgehog Team->Extension->Adding a new joystick添加一个虚拟摇杆,此时会在层级视图中生成EasyTouch 和 Easy Joystick两个对象。如图:



此时,我们可以在游戏场景中看到EasyTouch默认的虚拟摇杆外观:



接下来,我们来讲解下EasyJoystick的属性:



好了,如果大家对于这些属性没有什么问题的话,接下来我们就可以开始编写脚本了:

[C#] 纯文本查看 复制代码
using UnityEngine;  
using System.Collections;  
  
public class MoveController : MonoBehaviour {  
  
    //当摇杆可用时注册事件  
    void OnEnable()  
    {  
        EasyJoystick.On_JoystickMove += OnJoystickMove;  
        EasyJoystick.On_JoystickMoveEnd += OnJoystickMoveEnd;  
    }  
  
    //当摇杆不可用时移除事件  
    void OnDisable()  
    {  
        EasyJoystick.On_JoystickMove -= OnJoystickMove;  
        EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd;  
    }  
  
    //当摇杆销毁时移除事件  
    void OnDestroy()  
    {  
        EasyJoystick.On_JoystickMove -= OnJoystickMove;  
        EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd;  
    }  
  
    //当摇杆处于停止状态时,角色进入待机状态  
    void OnJoystickMoveEnd(MovingJoystick move)  
    {  
        if (move.joystickName == "EasyJoystick")  
        {  
            animation.CrossFade("idle");  
        }  
    }  
  
    //当摇杆处于移动状态时,角色开始奔跑  
    void OnJoystickMove(MovingJoystick move)  
    {  
        if (move.joystickName != "EasyJoystick")  
        {  
            return;  
        }  
        //获取摇杆偏移量  
        float joyPositionX = move.joystickAxis.x;  
        float joyPositionY = move.joystickAxis.y;  
        if (joyPositionY != 0 || joyPositionX != 0)  
        {  
            //设置角色的朝向(朝向当前坐标+摇杆偏移量)  
           transform.LookAt(new Vector3(transform.position.x + joyPositionX, transform.position.y, transform.position.z + joyPositionY));  
            //移动玩家的位置(按朝向位置移动)  
            transform.Translate(Vector3.forward * Time.deltaTime * 7.5F);  
            //播放奔跑动画  
            animation.CrossFade("Run");  
        }  
    }  
}  


我们将这个脚本绑定到我们的人物模型上面,然后运行程序:



这里我们再来说一下使用Unity3D自带的Joystick来实现人物移动控制,我们首先需要导入Standard Assets(Mobile)资源包,在这个资源包里我们可以发现两个有用的文件:Joystick.js和JoystickThumb.psd,它们分别是虚拟摇杆的脚本组件和外观贴图,我们手动创建一个GUITexture,并调整到合适的位置(悲剧就是从这里开始的),将这张贴图赋给GUITexture,然后绑定Joystick.js脚本。博主习惯使用C#,对于Js脚本使用得不多,据说在Unity中Js脚本需要放到Standard Assets、 Pro Standard Assets和Plugins中的任何一个文件件里才能正常使用,所以很多朋友反映的使用Unity内置的Joystick找不到类,就是这个原因。这里博主使用的是国外朋友根据官方的脚本改写的C#脚本。我们编写一个C#脚本来响应虚拟摇杆:

[C#] 纯文本查看 复制代码
using UnityEngine;  
using System.Collections;  
  
public class JoystickController : MonoBehaviour {  
  
    private Joystick mJoystick;  
    private float mSpeed=7.5F;  
  
    void Start ()   
    {  
        //获取Joystick  
        mJoystick=GameObject.Find("UnityJoystick").GetComponent<Joystick>();  
    }  
  
    void Update ()   
    {  
        //获取摇杆响应值  
        float mX=mJoystick.position.x;  
        float mY=mJoystick.position.y;  
          
        //移动角色  
        if(mX!=0||mY!=0)  
        {  
            Vector3 mPos=new Vector3(transform.position.x+mX,transform.position.y,  
                                     transform.position.z+mY);  
            transform.LookAt(mPos);  
            //移动玩家的位置(按朝向位置移动)  
            transform.Translate(Vector3.forward * Time.deltaTime * 5F);  
            //播放奔跑动画  
            animation.Play("Run");  
        }else  
        {  
            animation.Play("idle");  
        }  
    }  
}  


官方提供的这个虚拟摇杆组件无法在电脑上测试,需要安装到手机上运行,我们来看看实际的效果吧:



在手机上EasyTouch插件可以完美运行,官方提供的Joystick没有反映,目前不知道是为什么,有时间的话继续研究下啊。

unity3d摇杆;easytouch unity3d;unity插件easytouch;unity3d自带摇杆;unity3d easytouch;unity easytouch插件

回复

使用道具 举报

7日久生情
1764/5000
排名
648
昨日变化
1

0

主题

83

帖子

1764

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
80613
好友
1
蛮牛币
3016
威望
0
注册时间
2015-3-17
在线时间
625 小时
最后登录
2017-8-21
发表于 2015-11-10 11:25:27 | 显示全部楼层
顶 赞 新手 收藏学习了!!!

回复

使用道具 举报

4四处流浪
381/500
排名
4438
昨日变化
2

0

主题

24

帖子

381

积分

Rank: 4

UID
70731
好友
2
蛮牛币
889
威望
0
注册时间
2015-1-23
在线时间
118 小时
最后登录
2017-8-6
发表于 2015-12-17 10:38:38 | 显示全部楼层
谢谢分享学习了

回复

使用道具 举报

3偶尔光临
276/300
排名
9030
昨日变化
4

0

主题

98

帖子

276

积分

Rank: 3Rank: 3Rank: 3

UID
212437
好友
0
蛮牛币
103
威望
0
注册时间
2017-3-16
在线时间
92 小时
最后登录
2017-8-21
发表于 2017-6-29 08:24:13 | 显示全部楼层
感谢楼主分享!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表