【Unity】UGUI超级简单的摇杆制作,摇杆控制物体移动


目录

1.效果展示

2.博客介绍

3.具体内容和思路

(1)摇杆制作

(2)移动控制

4.资源包下载

5.推送

6.结语



1.效果展示


2.博客介绍

制作摇杆有很多途径,例如利用EasyTouch就可以很简单的制作摇杆,但是自己写一个可以更容易的去把控每一个步骤,本篇博客主要介绍了利用UGUI来快速简易的制作一个摇杆,并利用控制摇杆来控制物体移动,博主将非常详细的介绍每个步骤的作用,希望各位同学能有所收获。

做了个Logo-我会慢慢把他弄好看点的。。。。

3.具体内容和思路

 (1)摇杆制作

第一步:导入图片资源并拖入画布设置好层级

我们导入了如图所示的两张图片,分别作为摇杆的底图和摇杆的移动中心,位置如图所示,并设置了一个透明图片作为摇杆的点击区域,这里设置好记得将JoyBg设置为不可见的状态,图中为了方便预览,博主未将摇杆隐藏。

第二步:编写摇杆的代码控制

摇杆控制所需要的属性如下:

        /// <summary>/// 摇杆背景/// </summary>private Transform _joyBg;/// <summary>/// 摇杆中心/// </summary>private Transform _joyCenter;/// <summary>/// 摇杆半径/// </summary>private float _radius;/// <summary>/// 移动中心/// </summary>private Vector2 _moveCenter;/// <summary>/// 鼠标到移动中心的向量/// </summary>private Vector2 _mouseToCenterVect;/// <summary>/// 鼠标到中心点的距离/// </summary>private float _mouseToCenterDistance;/// <summary>/// 水平获取值/// </summary>private float _hor;/// <summary>/// 垂直获取值/// </summary>private float _ver;/// <summary>/// 旋转角度/// </summary>private float _rotAngle;

属性介绍:

_joyBg:获取摇杆底图背景的Transform,用于底图背景的现实

_joyCenter:获取摇杆中心的Transform,用于显示移动方向和位置

_radius:移动半径,控制摇杆中心的最大移动距离

_moveCenter:记录摇杆移动中心的位置

_mouseToCenterVect:起点为移动中心,终点为触摸点的一个向量,用于判断方向和角度

_mouseToCenterDistance:触摸点到移动中心的距离,用于控制移动距离不超过最大半径

_hor:摇杆中心的水平移动值

_ver:摇杆中心的垂直移动值

_rotAngle:摇杆的旋转角度,用于计算主角的朝向

初始化属性:

        void Start (){_joyBg = GameObject.Find("Canvas").transform.Find("JoyBg");_joyCenter = GameObject.Find("Canvas").transform.Find("JoyBg/JoyCenter");_player = GameObject.Find("Player").transform;_radius = 100;}

给摇杆点击区域添加摇杆拖动开始,正在拖动,拖动结束三个事件:

        /// <summary>/// 开始拖动/// </summary>public void OnDragBegain(){}/// <summary>/// 正在拖动/// </summary>public void OnDragMove(){}/// <summary>/// 拖动结束/// </summary>public void OnDragEnd(){}

拖动开始逻辑:

 /// <summary>/// 开始拖动/// </summary>public void OnDragBegain(){//移动中心点赋值_moveCenter = Input.mousePosition;//显示摇杆_joyBg.gameObject.SetActive(true);//摇杆背景位置修正到点击位置_joyBg.position = _moveCenter;//摇杆中心位置修正到点击位置_joyCenter.position = _moveCenter;}

拖动时逻辑:

        /// <summary>/// 正在拖动/// </summary>public void OnDragMove(){//中心店到触摸点的向量赋值_mouseToCenterVect = (Vector2)Input.mousePosition - _moveCenter;//中心店到触摸点的距离计算_mouseToCenterDistance = Mathf.Clamp(_mouseToCenterVect.magnitude,0,100);//根据距离来判断摇杆中心的位置if (_mouseToCenterDistance < _radius){//若是距离小于最大半径,这里取向量的归一值,就是模为1的向量,乘上中心到触摸点的距离,这个就是摇杆中心应该移动的方向和距离,并且移动是在移动中心的基础上,所以加上移动中心的坐标_joyCenter.position = _mouseToCenterVect.normalized * _mouseToCenterDistance + _moveCenter;}else{//同上,不过就是限定了移动的最大距离_joyCenter.position = _mouseToCenterVect.normalized * _radius + _moveCenter;}//摇杆中心的X - 移动中心的x就是水平的变化值,这里 /100 控制_hor在(-1,,1)之间_hor = (_joyCenter.position.x - _moveCenter.x)/100;//摇杆中心的Y - 移动中心的Y就是垂直的变化值,这里 /100 控制_hor在(-1,,1)之间_ver = (_joyCenter.position.y - _moveCenter.y)/100;//角度就是 中心店到触摸点的向量 和 2D平面Y轴正方向的夹角,这里只能显示0——180度_rotAngle = Vector3.Angle(_mouseToCenterVect, Vector3.up);//这里根据_hor的正负来判断摇杆中心是位于移动中心左侧还是右侧,然后修改度数,显示在0——360之间if (_hor<0){_rotAngle = 360 - _rotAngle;}//Vector3.forward 以Vector3.up为中心旋转轴,旋转_rotAngle度,这里计算出主角的旋转度数_forwardTarget = Quaternion.AngleAxis(_rotAngle, Vector3.up) * Vector3.forward;}

拖动结束逻辑:

        /// <summary>/// 拖动结束/// </summary>public void OnDragEnd(){//水平移动值归零_hor = 0;//垂直移动值归零_ver = 0;//隐藏摇杆_joyBg.gameObject.SetActive(false);}

写到这里摇杆的内容就完成了。我们看一下效果吧:

(2)移动控制

移动控制所需属性:

        /// 主角/// </summary>private Transform _player;/// <summary>/// 目标朝向/// </summary>private Vector3 _forwardTarget;

属性介绍:

_player:移动控制的主角(在Start中初始化)

_forwardTarget:主角的朝向 (在OnDragMove中最底赋值)

人物移动逻辑:

        private void Update(){//只有在水平或者垂直值大于0的情况下,主角才移动或旋转if (Math.Abs(_hor) > 0||Math.Abs(_ver) > 0){//Mathf.Clamp(_mouseToCenterDistance/100,0,1):根据摇杆中心的移动距离判断速度//new Vector3(0,0,0.1f*Mathf.Clamp(_mouseToCenterDistance/100,0,1)):在Z轴方向上移动Mathf.Clamp(_mouseToCenterDistance/100,0,1)的距离,限定在(0-1)的大小//不停地在Z轴方向上移动Mathf.Clamp(_mouseToCenterDistance/100,0,1)的距离_player.position += _player.TransformDirection(new Vector3(0,0,0.1f*Mathf.Clamp(_mouseToCenterDistance/100,0,1)));//根据摇杆的旋转设置主角的朝向_player.forward = _forwardTarget;}}

写到这里所有的逻辑都写完了,效果就是我们文章开头所展示的效果了。


4.资源包下载

需要完整代码和演示的下载资源包:https://download.csdn.net/download/mr_sun88/10822046


5.推送

先空着。。


6.结语

本篇博客只是简单的介绍的了摇杆的制作和控制物体移动,希望各位同学能有所收获和体会,若是真正运用到手机项目当中还会有诸多问题,例如在手机当中应该使用Touch来获取手指的触摸而不是Input.MousePosition,这些问题博主会在之后专门开一篇来介绍Touch类,各位同学若有兴趣可以关注博主的后续文章。另博主能力有限,文中若有错误的地方期望各位看家可以指点交流。

 QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

     本文属于原创文章,转载请著名作者出处并置顶!!!!!

【Unity】UGUI超级简单的摇杆制作,摇杆控制物体移动相关推荐

  1. 【Unity UGUI】简单的美术字体的制作(教你写插件)

    在 unity UGUI 使用中我们常常用到美术字体,然而有时却没有那么复杂那么多,再此介绍下生成美术字体的原理 选中预先制作好的图片 点击Go 就可以生成一个简单的字体了 使用也很简单 要注意设置( ...

  2. excel一列求和_超级简单实用excel制作表格,手把手教学(适合无根基初学者)...

    我拉网,专注办公模板设计 Excel表格为最常用办公表格吗,其制作在如今工作生活中是最常用到的,重要性可以说和会识字写字一样.如果你一点不会excel制作,没关系,今天我们就以制作一个"成绩 ...

  3. Unity学习记录:使用触发器制作人物靠近物体后交互的方法

    使用Tigger触发器来制作靠近后出现交互图标的方法 本文基于Unity2019.3.2f1版本 最近想做一个第一人称的游戏出来,关于人物与物体的交互想做成很多游戏都采用的,人物靠近到一定的距离就会在 ...

  4. 超级简单系列(收藏)

    我不是技术牛人,但是基本文章上总是发首页,为什么呢?因为我每次写文章都很努力,希望我的努力会给你带来收获,明年会更加努力滴.明天就回家了,在这里祝所有的园友们新春愉快.新的一年心想事成,梦想成真,祝博 ...

  5. [Unity实战]一个简单的unity手写摇杆[入门级][手写demo][开箱可用]

    一个简单的unity手写摇杆 1.摇杆是什么 2.常见的unity摇杆插件 3.如何做一个简单摇杆(代码) 4.效果展示 5.github 1.摇杆是什么 固定移动摇杆的意思指固定一个摇杆的贴图,操作 ...

  6. 使用EasyTouch一分钟简单制作摇杆

    使用EasyTouch一分钟简单制作摇杆<一> 1.效果: 2.过程 (1)..首先把EasyTouch这个插件导入到新建的工程里,我用的是Easy Touch5.0.12. (2).创建 ...

  7. Unity UGUI通过摇杆joystick 控制角色移动 标准的第三人称视角手游-左侧控制移动,右侧控制视角和方向

    Unity UGUI通过摇杆joystick 控制角色移动 标准的第三人称视角手游-左侧控制移动,右侧控制视角和方向 效果图显示 附上demo下载地址 备注:资源是URP的,普通平台修改资源材质即可 ...

  8. unity使用摇杆控制物体移动

    文章目录 前言 一.Scroll Rect是什么? 二.虚拟摇杆的建立过程 1.创建摇杆UI 2,为摇杆添加Scroll Rect 2.写代码,来实现摇杆对于物体移动的控制 总结 前言 unity做移 ...

  9. Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理

    Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理 目录 Unity UGUI 效果 之 UI 元素 多边形UI (例如雷 ...

最新文章

  1. 计算机等级考试二级ACCESS考试大纲
  2. 【Pytorch】X.view(-1)操作
  3. 结业考试笔记 2014中超联赛项目笔记 0327
  4. 读入字符串/字符 scanf与getchar/gets区别
  5. 60-100-022-使用-MySQL 开启全局查询日志
  6. DTO,VO,POJO,JavaBeans之间的区别?
  7. Android 四种启动模式
  8. jquery利用appendTo动态创建元素
  9. (转载)C/C++:sizeof('a')的值为什么不一样?
  10. 深圳大学计算机保护一志愿吗,考研保护第一志愿是什么意思?哪些院校官宣保护一志愿?...
  11. 阿里互联网一线大厂 Java 岗面试题库(2022 年版)
  12. TCP/IP协议栈详解
  13. 【毕设教程】ESP8266 WiFi 模块介绍和使用
  14. Excepted in :flat namespace
  15. 使用特征传播重构缺失数据进行图机器学习
  16. 用Axure撰写产品需求文档
  17. 2021-06-17springboot本地正常启动,部属服务器找不到外部文件 file:/apps/xxx/xxx/xxx.jar!/BOOT-INF/classes!/
  18. 归并排序详解(Acwing 归并排序y总模板)
  19. Backtrader(十二)- 订单 Order -buy、sell、close
  20. 用友BIP 安装配置专业脚手架开发工具(图文)

热门文章

  1. 都 2022 了,还不抓紧学 typeScript ?
  2. 【JavaWeb】TableDemo 表格隔行显色+鼠标悬停高亮显示
  3. Android实现相机拍照和相册选择以及图片裁剪适配Android10以上
  4. [MICCAI2019] Conv2Warp: An unsupervised deformable image registration with continuous convolution an
  5. javaScript:js数据类型,模板字符串,函数
  6. 2021年安全员-A证考试技巧及安全员-A证试题及解析
  7. 离线安装vscode插件(没有网络的环境下安装插件)
  8. clique 解题报告
  9. surface go2重装系统后pe各种进不去
  10. 上不了北大“图灵”、清华“姚班”,AI专业还能去哪上?