区域摇杆制作

区域摇杆

  • 介绍
  • 界面制作
  • 脚本
  • 总结

介绍

我之前讲过摇杆,那么看到现在游戏做区域摇杆的更多一些,那么我们来剖析一下。说白了区域摇杆就是在之前固定摇杆的基础上增加了一个启动事件,当我们开始拖拽的时候,我们将摇杆现实启动然后位置是按照开始拖拽的位置来进行摇杆中心点的移动,然后当停止拖拽时,则摇杆就回到原来位置并且隐藏。说白了就是启动事件 + 固定摇杆的显示隐藏位置变换就是区域摇杆,下面我会把我的做法讲一下,如果有更好的方法可以跟我说下。

请添加图片描述

界面制作

我这里做的是1920 * 1080的如果进入拖拽不准确,可以设置成1920 * 1080的分辨率
在这里插入图片描述

最外层是一个铺满的Image,这里主要用于接收拖拽使用
在这里插入图片描述

这里创建一个背景底板,大小根据自己需要调整,这里我设置的长款都是200,居中展示界面即可

在这里插入图片描述
在创建一个中心的拖拽点,这里大小我设置的80,中心居中即可
在这里插入图片描述
将底板和中心拖拽的点直接隐藏即可

脚本

该脚本挂载到拖拽中心上
在这里插入图片描述

原理就不讲了,可以看看我之前的普通摇杆文章,这个脚本是改动过的普通摇杆脚本

Joystick.cs

using UnityEngine;
using UnityEngine.EventSystems;


public class Joystick : MonoBehaviour
{
    /// <summary>
    /// 最大距离
    /// </summary>
    private float m_maxDis = 100;

    /// <summary>
    /// 初始位置
    /// </summary>
    private Vector2 m_originalPos;

    /// <summary>
    /// 当前半径
    /// </summary>
    private float m_radius;

    /// <summary>
    /// 底板背景
    /// </summary>
    [SerializeField]
    private GameObject m_joystick_bg;

    // Use this for initialization
    void Start()
    {
        m_originalPos = transform.position;
        m_maxDis = m_joystick_bg.GetComponent<RectTransform>().sizeDelta.x / 2;
    }

    #region UI相关

    /// <summary>
    /// 初始设置
    /// </summary>
    public void InitSet(Vector2 pos)
    {
        ShowUI(true);
        m_joystick_bg.transform.position = pos;
        transform.position = pos;
        m_originalPos = pos;
    }

    /// <summary>
    /// UI设置
    /// </summary>
    /// <param name="isShow"></param>
    public void ShowUI(bool isShow)
    {
        if (!m_joystick_bg) return;
        m_joystick_bg.gameObject.SetActive(isShow);
        gameObject.SetActive(isShow);
    }

    #endregion

    #region 滑动事件

    public void OnDrag(PointerEventData eventData)
    {

        //偏移量
        Vector2 dir = eventData.position - m_originalPos;

        //获取向量长度
        float distance = Vector3.Magnitude(dir);

        //获取当前
        m_radius = Mathf.Clamp(distance, 0, m_maxDis);

        //位置赋值
        transform.position = dir.normalized * m_radius + m_originalPos;

    }

    public void OnEndDrag(PointerEventData eventData)
    {
        transform.position = m_originalPos;
    }

    #endregion

}

这个才是真正拖拽的拖拽事件具体逻辑
TouchMoveArea.cs
挂载到最外层上并且持有摇杆
在这里插入图片描述

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

public class TouchMoveArea : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IEndDragHandler, IDragHandler
{
    /// <summary>
    /// 摇杆
    /// </summary>
    public Joystick m_joy;

    #region 滑动事件

    public void OnDrag(PointerEventData eventData)
    {
        if (!m_joy) return;
        m_joy.OnDrag(eventData);
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        if (!m_joy) return;
        m_joy.OnEndDrag(eventData);
    }

    #endregion

    #region 按下抬起事件

    public void OnPointerDown(PointerEventData eventData)
    {
        m_joy.InitSet(eventData.position);
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        m_joy.ShowUI(false);
    }

    #endregion
}

总结

TouchMoveArea才是真正的摇杆事件,这个脚本触发的所有事件在自身调用Joystick的对应开始拖拽、拖拽中、拖拽结束事件,只是做了一个偏差

如果有不理解的可以到我的资源库中下载看看MoveAreaJoySticks

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/268153.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp cli开发和HBuilderX开发

uniapp cli开发和HBuilderX开发 前言 uniapp是一个跨平台的开发框架&#xff0c;可以开发出微信小程序、支付宝小程序、百度小程序、头条小程序、H5、App等&#xff0c;开发者只需要写一套代码&#xff0c;就可以发布到各个平台&#xff0c;大大提高了开发效率。 uniapp的开…

动态规划系列 | 最长上升子序列模型(上)

文章目录 最长上升子序列回顾题目描述问题分析程序代码复杂度分析 怪盗基德的滑翔翼题目描述输入格式输出格式 问题分析程序代码复杂度分析 登山题目描述输入格式输出格式 问题分析程序代码复杂度分析 合唱队形题目描述输入格式输出格式 问题分析程序代码复杂度分析 友好城市题…

驾驶未来:百度Apollo自动驾驶技术的探索与实践(文末赠送apollo周边)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

【5G PHY】NR参考信号功率和小区总传输功率的计算

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

什么是网站监控?

网站监控是跟踪网站的可用性和性能&#xff0c;以最小化宕机时间&#xff0c;优化性能并确保顺畅的用户体验。维护网站正常运行对于任何企业来说都是至关重要的&#xff0c;因而对大多数业务来说&#xff0c;网站应用监控都是一个严峻的挑战。Applications Manager网站应用监控…

2024年【金属非金属矿山安全检查(地下矿山)】模拟试题及金属非金属矿山安全检查(地下矿山)模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山安全检查&#xff08;地下矿山&#xff09;模拟试题参考答案及金属非金属矿山安全检查&#xff08;地下矿山&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山安全检查&#…

C++系列第九篇 数据类型下篇 - 复合类型(指针高级应用)

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建&#xff08;WSL 方向&#xff09;-CSDN博客 C 系列 第二篇 你真的了解C吗&#xff1f;本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 C 系列 第四篇 C 数据类型…

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端&#xff0c;EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法&#xff0c;FreeRedis和CsRedis算是近亲&#xff08;都是GitHub中账号为2881099下的开源项目&#xff09;&#xff0c;因此其用法特别相似。FreeRedis的主要…

MoveIt!生成的机器人**_moveit_config包中config文件和launch文件

MoveIt!生成的机器人**_moveit_config包中config文件和launch文件 MoveItconfig文件srdfcartesian_limits.yamljoint_limits.yamlfake_controllers.yamsimple_moveit_controllers.yamlgazebo_controllers.yaml1. ros_controllers.yamlkinematics.yamlsensors_3d.yamlompl_plann…

【Qt之Quick模块】6. QML语法详解_1 基础语法与三种导入语句

前言 通过以上1-5文档的介绍&#xff0c;Quick与QML的概念及QML语法、类型、文件作用等已叙述个大概&#xff0c;接下来是对QML语法进行展开来说。 其实&#xff0c;学习任何一门语言或者做任何一件事情&#xff0c;并不用一开始就要求尽善尽美&#xff0c;做个无懈可击&…

vue3组件通信(父给子传参,子调用父的方法,父调用子的方法,顶层组件给底层组件传参,底层组件调用顶层组件的方法)

目录 1.父传子&#xff08;父给子传参&#xff09; 2.子传父&#xff08;子调用父的方法&#xff09; 3.父调用子的方法 4.顶层给底层传参&#xff0c;底层调用顶层的方法 5.模板引用 1.父传子&#xff08;父给子传参&#xff09; ①.步骤 父组件中给子组件通过绑定属性…

收银管理系统怎样帮助商家很好地经营服装门店

收银管理系统对于服装门店的经营可以提供多方面的帮助&#xff0c;以下是一些具体的优势和功能&#xff1a; 1. 快速准确的收银&#xff1a;收银管理系统可以实现快速、准确的收银操作&#xff0c;通过条码扫描或手动输入商品信息&#xff0c;自动计算价格并生成收据。这样可以…

nacos配置中心配置已经常见错误总结

&#x1f4bb;目录 前言1、基础架构2、依赖3、配置文件3.1、bolg-product配置文件3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.1.3、nacos远程配置 3.2、bolg-system3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.2.3、nacos远程配置 4、测试…

【文本处理】正则表达式

一、简介 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&…

在Redis客户端设置连接密码 并演示密码登录

我们先连接到Redis服务 然后 我们要输入 CONFIG SET requirepass “新密码” 例如 CONFIG SET requirepass "A15167"这样 密码就被设置成立 A15167 我们 输入 AUTH 密码 例如 AUTH A15167这里 返回OK说明成功了 然后 我们退出在登录就真的需要 redis-cli -h IP地…

嵌入式开发——PWM高级定时器

学习目标 加强掌握PWM开发流程理解定时器与通道的关系掌握多通道配置策略掌握互补PWM配置策略掌握定时器查询方式掌握代码抽取优化策略掌握PWM调试方式学习内容 需求 点亮8个灯,采用pwm的方式。 定时器 通道 <

vue3 新项目 - 搭建路由router

创建router/index 文件 main.ts 安装 router 然后 在 app下面 去 设置 路由出口

【贪心】买卖股票的最佳时机含手续费

/** 贪心&#xff1a;每次选取更低的价格买入&#xff0c;遇到高于买入的价格就出售(此时不一定是最大收益)。* 使用buy表示买入股票的价格和手续费的和。遍历数组&#xff0c;如果后面的股票价格加上手续费* 小于buy&#xff0c;说明有更低的买入价格更新buy。如…

深度神经网络下的风格迁移模型(C#)

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 这个是C#版本的&#xff0c;这里就只放出代码。VB.Net版本请参看 深度神经网络下的风格迁移模型-CSDN博客 斯坦福大学李飞飞团队的…