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


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


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


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

           好了。假设大家对于这些属性没有什么问题的话,接下来我们就能够開始编写脚本了:

    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#脚本来响应虚拟摇杆:

    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没有反映。眼下不知道是为什么,有时间的话继续研究下啊。


       參考文章:

      1、Unity手游之路<五>虚拟摇杆之Unity内置插件实现

      2、Unity手游之路<六>游戏摇杆之Easy Touch 3教程


      每日箴言:决心走一条路的时候,就不要左顾右盼。风景再美也别流连




       喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei
       转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/26204177


     

  • 相关阅读:
    node.js中常用的fs文件系统
    秒懂 this
    Filter 过滤器
    Ubuntu 安装zookeeper
    Vmware 设置NAT模式
    TreeMap
    ArrayList扩容
    Java 面试题收集
    SwitchyOmega 设置修改代理
    Jedis操作Redis
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5369626.html
Copyright © 2020-2023  润新知