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

在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);

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity实现简单的虚拟摇杆

    本文实例为大家分享了Unity实现简单虚拟摇杆的具体代码,供大家参考,具体内容如下 需求:点击创建一个虚拟摇杆底盘,鼠标拖拽时候上方摇杆会跟随鼠标方向移动,并且不会超出摇杆盘范围 *摇杆功能另外实现 UI显示 using System.Collections; using System.Collections.Generic; using UnityEngine; public class RockingIcon : MonoBehaviour { public Transform touchP

  • Unity3D基于UGUI实现虚拟摇杆

    虚拟摇杆在移动游戏开发中,是很常见的需求,今天我们在Unity中,使用UGUI来实现一个简单的虚拟摇杆功能. 1.打开Unity,新创建一个UIJoystick.cs脚本,代码如下: using UnityEngine; using UnityEngine.EventSystems; public class UIJoystick : MonoBehaviour, IDragHandler, IEndDragHandler { /// <summary> /// 被用户拖动的操纵杆 /// &

  • Unity实现虚拟摇杆效果

    本文实例为大家分享了Unity实现虚拟摇杆效果的具体代码,供大家参考,具体内容如下 首先添加两者图片 从左到右分别是Back和Front 将Front放到Back中心 在Front身上添加脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;//导入命名空间 public class JoyStick : MonoBehavi

  • Unity实现简单虚拟摇杆

    本文实例为大家分享了Unity虚拟摇杆的简单实现代码,供大家参考,具体内容如下 简单的Unity虚拟摇杆实现,有详细注释. Game界面 Inspector界面 摇杆脚本 public class YaoGanCtrl : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public RectTransform diPan; public RectTransform anNiu; public Vector2 d

  • Unity实现虚拟摇杆

    本文实例为大家分享了Unity实现虚拟摇杆的具体代码,供大家参考,具体内容如下 面板上设置一些属性,比如摇杆拖拽的距离,是否始终可视,是否限制虚拟摇杆位置(我是把虚拟摇杆限制在了屏幕的左下区域). 使用GetDirAndLength()方法去获得移动的方向和长度即可 using UnityEngine; /// <summary> /// 虚拟摇杆管理器 /// </summary> public class VirtualJoystickManager : MonoBehavio

  • Unity3D使用UGUI开发原生虚拟摇杆

    在Unity3d中开发虚拟摇杆方式有比较多,可以使用EasyTouch.FairyGUI等插件来开发.本文给大家介绍使用Unity3d的原生UGUI来开发出自己的虚拟摇杆,这样可以减少游戏资源包的大小. 先展示下效果图: 现在开发我们的开发 创建一个Image1,并且在Image1创建一个子对象Image2 在Image1中挂载一个自定义脚本,这里我命名为Joystick 脚本代码如下 using System.Collections; using System.Collections.Gene

  • unity实现虚拟摇杆控制Virtual Joystick

    本文实例为大家分享了unity实现虚拟摇杆控的具体代码,供大家参考,具体内容如下 using UnityEngine; using UnityEngine.UI; public class TouchJoystick : MonoBehaviour { public GameObject go;//需要通过虚拟摇杆控制的目标物体 public float moveSpeed = 3;//移动速度 public Image touchPoint;//摇杆轴对象 private Vector3 Or

  • unity实现手游虚拟摇杆

    本文实例为大家分享了unity实现手游虚拟摇杆的具体代码,供大家参考,具体内容如下 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 绑定到摇杆上的摇杆类,参考半径50 /// </summary> public class Rocker : MonoBehaviour { Vector2 m_o

  • Unity虚拟摇杆的实现方法

    本文实例为大家分享了Unity实现虚拟摇杆的具体代码,供大家参考,具体内容如下 设置摇杆的背景图片的锚点如下: 设置摇杆的锚点为背景图片的中心点. 并给摇杆绑定脚本如下: using UnityEngine; using UnityEngine.EventSystems; using System.Collections; using System; public class JoyStickController : MonoBehaviour,IDragHandler,IEndDragHand

  • Unity3D撤回命令开发详解

    本文实例为大家分享了Unity3D撤回命令功能开发,供大家参考,具体内容如下 在类似操作考核的项目中我们经常会遇到回到上一步的需求.所以我们有必要对每一个状态点的所有参与交互的物体的状态进行记录.好了,下面就是代码的实现: 首先肯定要创建命令的基类, public class BaseCommand { //执行命令 public virtual void ExcuteCommand() { } //撤销命令 public virtual void RevocationCommand() { }

随机推荐