Unity2D—利用UGUI纯代码实现简易摇杆

2023-05-16

目标:拖动摇杆实现平面物体的移动

一、制作摇杆UI、平面物体
(1)新建画布Canvas,将Canvas的UI缩放模式设置为屏幕大小播放(如不设为该模式则会因界面缩放而导致UI消失)。请添加图片描述
(2)在Canvas下新增图片,名为Bound,源图像设置为圆形图片,作为摇杆外圈。
(3)在Bound下新增图片,名为Center,源图像设置为圆形图片、缩小宽度和高度,作为摇杆外圈。
请添加图片描述
(4)创建空对象,名为Actor,重置坐标并修改Sprite。
请添加图片描述
(5)示例界面
请添加图片描述

二、实现代码
(1)JoyStick.cs //摇杆通用脚本

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

public struct JoyStickData //结构体——摇杆数据
{
    public Vector2 dir; //移动方向
    public float radius; //移动半径
    public JoyStickData(Vector2 d,float r)
    {
        this.dir = d;
        this.radius = r;
    }
    public Vector2 GetPos()
    {
        return dir*radius;
    }

}
public class JoyStick : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IDragHandler    //三个接口,点击、抬起、拖拽
{
    public RectTransform bound; //外圈
    public RectTransform center; //内圈
    public float radius; //移动限制的半径

    private JoyStickData HandleEventData(PointerEventData eventData)
    {
        Vector2 dir;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(bound,eventData.position,eventData.pressEventCamera,out dir);
        float r =dir.magnitude;
        dir =dir.normalized;
        r=Mathf.Clamp(r,0,radius);

        return new JoyStickData(dir,r);
    }
    public void OnDrag(PointerEventData eventData)
    {
        var data=HandleEventData(eventData);
        center.localPosition=data.GetPos();
        onJoystickMove(data.dir,data.radius);
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        var data=HandleEventData(eventData);
        center.localPosition=data.GetPos();
        onJoystickDown(data.dir,data.radius);
        
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        var data=HandleEventData(eventData);
        center.localPosition=Vector2.zero; //抬起后回到0坐标
        onJoystickUp(data.dir,data.radius);
    }
    public virtual void onJoystickDown(Vector2 V,float R)
    {

    }
    public virtual void onJoystickUp(Vector2 V,float R)
    {
        
    }
    public virtual void onJoystickMove(Vector2 V,float R)
    {
        
    }
}

(2)MoveJoyStick.cs //移动摇杆脚本,继承JoyStick

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveJoyStick : JoyStick 
{
    public ActorController actorController;
    public override void onJoystickDown(Vector2 V, float R)
    {
        actorController.Move(V);
    }
    public override void onJoystickUp(Vector2 V, float R)
    {
        actorController.Move(Vector2.zero);
    }

    public override void onJoystickMove(Vector2 V, float R)
    {
        actorController.Move(V);
    }
}

(3)ActorController.cs //角色控制脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ActorController : MonoBehaviour
{
    private Vector2 moveDir;
    public float moveSpeed;
    public void Move(Vector2 dir)
    {
        moveDir = dir;
        
    }
    private void Update()
    {
        transform.Translate(moveDir * moveSpeed * Time.deltaTime);
    }
}

三、为物体添加脚本
(1)为Bound挂上MoveJoyStick.cs,并为其中变量赋值。请添加图片描述
(2)为ActorController挂上ActorController.cs,并为MoveSpeed赋值。请添加图片描述
运行成功,这样我们就实现了利用UGUI自己手写一个简单的摇杆,欢迎小伙伴们在评论区留言!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity2D—利用UGUI纯代码实现简易摇杆 的相关文章

  • 自制STLinkV2.1

    步骤 绘制原理图 layout 打板 焊接 烧录固件 更新固件 绘制原理图 layout 为了方便焊接 xff0c 元器件都放同一面 烧录固件 用现有STLink及软件STM32 ST LINK Utility为其烧录固件 软件及固件已打包
  • IAR下载报错 “Fatal error: Failed to connect to CPU Session aborted!”

    当IAR下载程序进入单片机运行时出现这个弹窗之后就再也下载不进去程序了 xff0c 报以下错误 解决办法 xff1a 这时候就需要对单片机进行复位了 xff0c 一般是先看电路有没有复位按键如果没有复位按键则需要找到复位电路然后找到电路中的
  • uboot和ubuntu ping通测试结果

    前一段时间开始研究uboot xff0c 首先遇到的问题就是下载的别人移植的uboot始终ping不通主机 xff08 Windows中VMWare虚拟机中的ubuntu10 04 xff09 这几天终于找到了一份可以配合手头开发板的移植说
  • PID算法原理及基本实现

    自动控制中 xff0c PID及其衍生出来的算法是应用最广的算法之一 各个做自动控制的厂家基本都有会实现这一经典算法 我们在做项目的过程中 xff0c 也时常会遇到类似的需求 xff0c 所以就想实现这一算法以适用于更多的应用场景 1 PI
  • linux下miniconda+torch环境配置

    几个很简单的步骤却陆陆续续配置了一整天 记录一下 部分步骤来自该博文 xff1a https blog csdn net m0 46336568 article details 127836072 下载miniconda安装包 wget c
  • 树莓派4B安装Ubuntu18.04 + vnc远程桌面

    在实验室对写程序的欲望越来越低下的时候 xff0c 学长给了一个树莓派4B xff0c 让我研究一下 xff0c 因为机器人的上位机就靠它运行 一说新东西我就来劲了 xff0c 可惜实验室里没有SD卡 xff08 旧的断掉了 xff09 x
  • 字符串简单操作(C++中的strrev函数)

    C 43 43 中有函数strrev xff0c 功能是对字符串实现反转 xff0c 但是要记住 xff0c strrev函数只对字符数组有效 xff0c 对string类型是无效的 如下题所示 xff1a Ignatius likes t
  • STC学习:蜂鸣器

    本文需要用到定时器与中断的相关内容 xff0c 已做该内容总结 xff1a STC学习 xff1a 定时器与中断 程序设计目标及程序运行效果说明 程序设计目标 xff1a 通过按下按键1来控制无源蜂鸣器的发声 程序运行效果说明 xff1a
  • STM32F103寄存器方式点亮LED流水灯

    一 点灯 点亮LED灯 xff0c 需要用到GPIO端口 为了点亮LED灯 xff0c 需要三个步骤 xff1a 打开GPIO口的时钟 初始化GPIO口 xff08 选择推挽输出 xff09 设置低电平 1 打开时钟 gpio地址 2 时钟
  • 决策树挑出好西瓜

    一 决策树 1 介绍 决策树是在已知各种情况发生概率的基础上 xff0c 通过构成决策树来求取净现值的期望值大于等于零的概率 xff0c 评价项目风险 xff0c 判断其可行性的决策分析方法 xff0c 是直观运用概率分析的一种图解法 主要
  • SVM算法与用python3+opencv3.4+dlib库编程提取人脸特征

    一 SVM算法 1 1 向量机简述 简介 xff1a 支持向量机 support vector machine SVM xff1a 是监督学习中最有影响力的方法之一 类似于逻辑回归 xff0c 这个模型也是基于线性函数wTx 43 b的 不
  • 游戏客户端编程

    一 测试能否ping通服务器 打开cmd xff0c 输入ping 10 1 230 74 游戏服务器的校园内网IP地址为 10 1 230 74 需要连接校园网 接着输入telnet xff0c 如果输入telnet提示无效命令 xff0
  • 基于I2C/SPI的温湿度采集与OLED显示

    一 I2c通讯协议 I2C通讯协议 Inter xff0d Integrated Circuit 引脚少 xff0c 硬件实现简单 xff0c 可扩展性强 xff0c 不需要USART CAN等通讯协议的外部收发设备 xff0c 现在被广泛
  • S3C2440 cp15协处理器详解

    2440的协处理器CP15总共有c0 c15这16个协处理器寄存器 xff0c 各自具有一定的功能定义 但总的来说 xff0c cp15主要跟以下功能有关 xff1a 1 获取device id和cache type等一些CPU相关信息 2
  • 动态网页的信息爬取

    一 Selenium介绍 Selenium是一系列基于Web的自动化工具 xff0c 提供一套测试函数 xff0c 用于支持Web自动化测试 函数非常灵活 xff0c 能够完成界面元素定位 窗口跳转 结果比较 具有如下特点 xff1a 1
  • 数字电路基础与Quartus-II入门

    一 安装Quartus II软件和Modsim仿真软件 1 安装Quartus 打开exe安装文件 一路默认next下去 xff0c 安装地址不要有中文空格路径 xff0c 最后弹出的对话框选择ok 2 破解Quartus 下载好破解器把文
  • FPGA基于DE2-115平台的VGA显示

    一 VGA简介 VGA xff08 Video Graphics Array xff09 视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准 VGA接口即电脑采用VGA标准输出数据的专用接口 VGA接口共有15针 xff0
  • 树莓派assert初步使用练习

    一 创建用户 用户密码 sudo useradd m 用户名 sudo passwd 用户名 给予用户sudo权限 切换到root用户 su 编辑配置文件 vi etc sudoers 增加配置 xff08 按i开始编辑 xff0c Esc
  • 计算机网络/谢希仁(第八版)第四章习题

    4 01 网络层向上提供的服务有哪两种 xff1f 试比较其优缺点 答 xff1a xff08 1 xff09 面向连接服务 xff08 或虚电路服务 xff09 和无连接服务 xff08 或数据报服务 xff09 xff08 2 xff0
  • Nginx正向代理任何域名的实现

    正向代理是一种代理方式 xff0c 在代理服务器和客户端之间建立连接 xff0c 并代表客户端向目标服务器发起请求 在正向代理模式下 xff0c 目标服务器并不知道请求来自代理服务器 xff0c 而是以为请求来自客户端 要在nginx中实现

随机推荐

  • MySQL设置允许远程连接与用户(Linux系统)

    要允许MySQL远程连接 xff0c 需要进行以下步骤 xff1a 修改MySQL配置文件 在Ubuntu上 xff0c MySQL的配置文件通常位于 etc mysql mysql conf d mysqld cnf或 etc mysql
  • 用Swift开发一个简单的iOS备忘录列表应用程序

    iOS提供了许多在应用程序里面可以调用的框架 xff0c 下面列举一些 xff1a 1 UIKit框架 xff1a 用于iOS用户界面设计 xff0c 包括按钮 标签 文本框 表格等控件 2 Foundation框架 xff1a 包含了iO
  • 【MATLAB】SIMULINK 基本模块的使用

    以下是使用SIMULINK构建基本通信系统模型的步骤 xff1a 1 打开MATLAB xff0c 点击SIMULINK图标 xff0c 创建一个空模型 2 从库浏览器中拖拽 信号发生器 Signal Generator 模块和 示波器 S
  • 【MATLAB】构建 SIMULINK 子系统和模块的封装

    构建SIMULINK的子系统可以使用自建模块进行封装 xff0c 帮助文档编写 xff0c 并掌握模型空间与MATLAB命名空间的交互 具体步骤如下 xff1a 1 创建自定义模块 在Simulink中 xff0c 可以使用Subsyste
  • rmmod时提示 rmmod : chdir(/lib/modules): No such file or directory

    insmod后 xff0c 使用lsmod查看 xff0c 如果成功则可以看到刚才安装的module 此时如果修改了module代码要重新安装 xff0c 则需要先rmmod刚才安装的模块才能重新安装 xff0c 否则在insmod时会提示
  • 无源蜂鸣器按特定频率发出相对应的音调

    蜂鸣器是什么 xff1f 蜂鸣器是什么呢 xff1f 相信大家在做项目中肯定多多少少都会用到蜂鸣器 xff0c 蜂鸣器呢是一种一体化结构的电子讯响器 xff0c 采用直流电压供电 xff0c 广泛应用于计算机 打印机 复印机 报警器 电子玩
  • 树莓派上安装Pytorch

    没有踩坑和报错 xff0c 浅浅记录以下 将torch 1 7 0a0 cp37 cp37m linux armv7l whl和torchvision 0 8 0a0 43 45f960c cp37 cp37m linux armv7l w
  • FreeRTOS学习记录(3)——任务创建与启动总结

    对FreeRTOS的使用过程进行精简后会发现 xff0c 它的整个过程其实非常简单 xff0c 首先创建任务 xff0c 其次登记任务 xff0c 根据任务所登记的位置不断开始执行任务 下面进行详细的解释 创建任务 xff0c 这个过程中会
  • 执行HQL直接被退出:Remote side unexpectedly closed network connection

    执行HQL直接被退出 xff1a Remote side unexpectedly closed network connection 文章目录 执行HQL直接被退出 xff1a Remote side unexpectedly close
  • 使用mybatisplus要导入的依赖

    lt dependency gt lt groupId gt com spring4all lt groupId gt lt artifactId gt spring boot starter swagger lt artifactId g
  • Hadoop中HDFS的读写流程详解

    一 HDFS写流程示意图 xff1a xff08 1 xff09 客户端通过Distributed FileSystem模块向NameNode请求上传文件 xff0c NameNode检查目标文件是否已存在 xff0c 父目录是否存在 检查
  • 基于树莓派(python)的平衡小车

    目前普遍是STM32或者51来实现平衡小车 xff0c 基于树莓派的平衡小车少见 xff08 因为树莓派适合用于数据处理 xff09 但有部分同学的毕设选择了用树莓派来做平衡小车的 xff0c 接下来分享一下基于树莓派的平衡小车如何完成 驱
  • BGP双平面架构

    要求 xff1a PC1 PC3 PC5为电信面路由 xff0c PC2 PC4 PC6为联通面路由 正常情况下 xff0c 电信面路由走AS1 xff0c 联通面路由走AS2 xff0c 当R9与R1之间的线路发生故障时 xff0c 电信
  • 宿主机可以正常上网,虚拟机不能上网的问题

    宿主机可以正常上网 xff0c 虚拟机不能上网的问题 问题描述 宿主机 xff1a Windows 10 虚拟机 xff1a VMware Ubuntu 14 04 6 LTS 之前配置过一个主节点 xff0c 三个从节点 宿主机 xff0
  • Jlink调试2440进不了中断的看这里

    很多人学习2440都是从裸机开始的 刚开始的小菜LED xff0c 然后定时器 按键这些常用内部外设 xff0c 最后则是LCD Nand等复杂外设 用Jlink裸机调试2440小程序时 xff0c 中断的调试是一个重要内容 像定时器 按键
  • 在Eclipse中运行第一个MapReduce程序

    这是Hadoop学习全程记录第2篇 xff0c 在这篇里我将介绍一下如何在Eclipse下写第一个MapReduce程序 新说明一下我的开发环境 xff1a 操作系统 xff1a 在windows下使用wubi安装了ubuntu 10 10
  • 论文笔记:Learning Deep Features for Discriminative Localization

    一 这篇论文解决什么问题 原始问题 xff1a Weakly supervised object localization xff0c 研究发现 xff0c 图像分类任务上训练的CNN xff0c 可以直接用于物体定位 两个子问题 xff1
  • CSS高度塌陷问题-六种解决方案

    问题背景 子元素浮动后 xff0c 无法撑起父元素高度 xff0c 导致父元素高度丢失 xff0c 其下元素会自动上移 xff0c 导致页面布局混乱 解决方案 一 BFC 块级格式化环境 xff08 Block Formatting Con
  • MySQL设置更改root密码

    MySQL设置更改root密码 方法一 xff1a 通过MySQL console直接设置密码 首先打开MySQL console 输入原始密码后按回车键 xff08 如果没有原始密码 xff0c enter password后面为空 xf
  • Unity2D—利用UGUI纯代码实现简易摇杆

    目标 xff1a 拖动摇杆实现平面物体的移动 一 制作摇杆UI 平面物体 xff08 1 xff09 新建画布Canvas xff0c 将Canvas的UI缩放模式设置为屏幕大小播放 xff08 如不设为该模式则会因界面缩放而导致UI消失