Unity3d使用UGUI开发原生虚拟摇杆

原创 2018年04月17日 11:22:44

在Unity3d中开发虚拟摇杆方式有比较多,可以使用EasyTouch、FairyGUI等插件来开发。本文给大家介绍使用Unity3d的原生UGUI来开发出自己的虚拟摇杆,这样可以减少游戏资源包的大小。

先展示下效果图:


现在开发我们的开发

创建一个Image1,并且在Image1创建一个子对象Image2

在Image1中挂载一个自定义脚本,这里我命名为Joystick

脚本代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class Joystick : ScrollRect
{
    private float mRadius;
    public System.Action<RectTransform> JoystickMoveHandle;
    public System.Action<RectTransform> JoystickEndHandle;

    protected override void Start()
    {
        mRadius = this.GetComponent<RectTransform>().sizeDelta.x * 0.5f;
        this.content.gameObject.SetActive(false);
    }


    public override void OnDrag(PointerEventData eventData)
    {  
        base.OnDrag(eventData);
        this.content.gameObject.SetActive(true);

        //虚拟摇杆移动
        var contentPostion = this.content.anchoredPosition;        
        if (contentPostion.magnitude > mRadius)
        {
            contentPostion = contentPostion.normalized * mRadius;
            SetContentAnchoredPosition(contentPostion);
        }
        //旋转
        if (content.anchoredPosition.y != 0)
        {
            content.eulerAngles = new Vector3(0, 0, Vector3.Angle(Vector3.right, content.anchoredPosition) * content.anchoredPosition.y / Mathf.Abs(content.anchoredPosition.y) - 90);
        }

    }

    private void FixedUpdate()
    {
        if (this.content.gameObject.activeInHierarchy)
        {
            if (JoystickMoveHandle != null)
            {
                JoystickMoveHandle(this.content);
            }
        }
    }

    public override void OnEndDrag(PointerEventData eventData)
    {
        base.OnEndDrag(eventData);

        this.content.gameObject.SetActive(false);

        if (JoystickEndHandle != null)
        {
            JoystickEndHandle(this.content);
        }
    }
}

然后将Image2拖动到content属性变量里


这样就可以移动并且拖动我们的虚拟摇杆了

接下来要让我们的游戏主角跟随我们的摇杆移动而移动

在我们的主角儿挂载一个自定义脚本

在Start方法里添加代码:

mJoystick = GameObject.Find("Joystick").GetComponent<Joystick>();
        mJoystick.JoystickMoveHandle = JoystickHandle;
        mJoystick.JoystickEndHandle = JoystickEndHandle;

其中JoystickHandle方法代码为:

transform.eulerAngles = new Vector3(0, -content.eulerAngles.z, 0);
			transform.Translate(Vector3.forward * Time.deltaTime * mMoveSpeed);

接下来就可以运行我们的游戏,观察主角移动旋转位置。

好了,本文就介绍到这里,如果有问题可以在QQ上联系我哦!:352952839


博客地址:blog.liujunliang.com.cn


版权声明:本文为博主原创文章,未经博主允许不得转载。blog.liujunliang.com.cn https://blog.csdn.net/qq_33747722/article/details/79971527

Unity用UGUI做虚拟摇杆

上图是示例图片: 虚拟摇杆主要是开发移动端的游戏用的,市面上这样的游戏有很多,大家也都见过或者玩过了,今天我就给大家说一个巨简单的方法做这个虚拟摇杆,不需要用三角函数,不需要用什么sin,cos的,...
  • qq272508839
  • qq272508839
  • 2017-03-05 17:06:07
  • 5448

Unity3D学习日记(一)使用UGUI制作虚拟摇杆

如今手机游戏玩法多种多样,尤其使用虚拟摇杆进行格斗类游戏开发或者是MMORPG成为了主流的开发方式,可能不少人都会为了制作一个完善的虚拟摇杆感到烦恼,一次又不少人选择使用插件来制作虚拟摇杆。   Mo...
  • begonia__z
  • begonia__z
  • 2016-04-16 20:48:06
  • 6505

Unity3d_UGUI虚拟摇杆(简易)

之前的项目中有用虚拟摇杆来操纵角色移动,但是之前使用的是EasyTouch,属于NGUI下的一个插件,但是本身项目是基于UGUI的,觉得这样掺杂在一起有些不伦不类,就自己用UGUI做了一个简易的虚拟摇...
  • lfh719852029
  • lfh719852029
  • 2015-06-26 16:10:41
  • 2177

使用UGUI制作虚拟摇杆

因为最近的项目要增加一个虚拟摇杆,然后查看了一些相关资料后,就自己做了一个,分享出来: 只有两个脚本,一个是用来控制按钮的,一个是用来被控制物体移动的脚本: 如下: /****************...
  • qq_28221881
  • qq_28221881
  • 2017-06-12 21:09:41
  • 497

Unity3D学习日记(二)使用UGUI制作虚拟摇杆控制摄像机

前天撸了一个简单的UGUI虚拟摇杆,今天我就利用前天做的虚拟摇杆做了一个简单的摄像机控制器,主要看看UGUI虚拟摇杆是否可以完美的控制移动和旋转。(PS:主要是为接下来的项目做技术测试),手游版的CF...
  • begonia__z
  • begonia__z
  • 2016-04-18 13:28:32
  • 2424

unity3d 虚拟摇杆 ugui

网上找了好多都嫌麻烦,谷歌了一下,完美解决。 需要先建立 Canvas,如下: 代码拖拽到 backImage里: JoyStick.cs using System.Co...
  • A13155283231
  • A13155283231
  • 2018-01-03 00:06:11
  • 82

使用UGUI制作底盘不固定的虚拟摇杆

看好多人做虚拟摇杆都用的easytouch,一个大盘一个小盘一直摆在左下角,感觉丑爆了有木有{:86:} 正好最近在做u2d,就自己弄了一个,特点是平时不显示,触摸屏幕后大盘出现在屏幕触摸位置,滑动...
  • Ymiku
  • Ymiku
  • 2015-07-04 18:38:36
  • 782

UGUI实现unity摇杆

http://www.winig.cc/archives/348 好久没有写文章了,最近在做项目是用的unity最新的ui系统UGUI,项目需要做一个摇杆,网上大部分都是用的插件和NGUI做的摇杆,u...
  • OnafioO
  • OnafioO
  • 2015-06-07 20:46:36
  • 8241

[unity3d]UGUI实现unity摇杆

好久没有写文章了,最近在做项目是用的unity最新的ui系统UGUI,项目需要做一个摇杆,网上大部分都是用的插件和NGUI做的摇杆,unity自带的摇杆也不怎么好用,而最新的unity4.6.x来了,...
  • qq534575060
  • qq534575060
  • 2015-05-27 17:06:22
  • 496

Unity3D基于UGUI的虚拟摇杆实现

虚拟摇杆在移动游戏开发中,是很常见的需求,今天我们在Unity中,使用UGUI来实现一个简单的虚拟摇杆功能。 1.打开Unity,新创建一个UIJoystick.cs脚本,代码如下: using Un...
  • m0_37998140
  • m0_37998140
  • 2017-10-17 12:19:14
  • 162
收藏助手
不良信息举报
您举报文章:Unity3d使用UGUI开发原生虚拟摇杆
举报原因:
原因补充:

(最多只允许输入30个字)