unity2022版本 实现手机虚拟操作杆

这篇具有很好参考价值的文章主要介绍了unity2022版本 实现手机虚拟操作杆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

在许多移动游戏中,虚拟操纵杆是一个重要的用户界面元素,用于控制角色或物体的移动。本文将介绍如何在Unity中实现虚拟操纵杆,提供了一段用于移动控制的代码。我们将讨论不同类型的虚拟操纵杆,如固定和跟随,以及如何在实际游戏中使用这些操纵杆。

界面节点设置

1. 添加一个Canvas节点

首先,我们需要创建一个画布节点,这是我们整个界面的基础。这个节点将允许我们绘制和排列其他元素。

2. 在Canvas节点下添加一个Panel节点

接下来,我们将在Canvas节点下创建一个Panel节点。这个Panel节点将充当容器,用于组织和管理我们的界面元素。

3. 在Panel节点下添加两个Image节点

在Panel节点中,我们将添加两个Image节点。这两个Image节点具有不同的用途:

a. 背景节点:第一个Image节点将用作背景,为整个界面提供背景图像或颜色。

b. 操作按钮节点:第二个Image节点将用于显示操作按钮或其他交互元素。

4. 结构示意图:

你可以使用以下结构示意图来更清晰地展示节点的层次关系:

UiCanvas (画布)
│
└─ Joystick (面板)
   │
   ├─ Bg(背景)
   │
   └─ Btn(操作按钮)

截图可以这样:

unity2022版本 实现手机虚拟操作杆,unity开发,游戏,c#,unity,游戏开发

脚本编写

简要说明:

因为编写的是虚拟操作杆 需要添加三个事件:

触摸开始(Pointer Down),拖动(Drag),触摸结束(Pointer Up)

在触摸开始记录拖动的一些起始坐标。

在拖动中移动操作按钮节点如果是操作角色移动这里就可以操作移动角色

在触摸结束的时候重置坐标

  1. PointerDown方法:描述PointerDown方法,它处理当玩家触摸操纵杆时的行为。根据操纵杆类型(固定或跟随),它设置操纵杆的初始位置。

  2. Drag方法:详细解释Drag方法,这是当玩家拖动操纵杆时执行的代码。说明如何计算操纵杆输入的方向,以及如何限制操纵杆的移动范围。

  3. PointerUp方法:描述PointerUp方法,用于当玩家释放操纵杆时重置相关变量和位置,同时停止玩家的移动。

在初始化引用的时候可以传入参数(JoystickType)控制虚拟操作杆是固定的还是跟随触摸点的

完整的脚本如下:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class MovementJoystick : MonoBehaviour
{
    // 枚举类型,用于指定操纵杆的类型
    public enum JoystickType
    {
        FIXED,    // 固定类型的操纵杆
        FOLLOW    // 跟随类型的操纵杆
    }

    // 对操纵杆和其背景对象的引用
    public GameObject joystick;  // 操纵杆对象
    public GameObject joystickBG;  // 操纵杆背景对象

    // 存储当前操纵杆的输入值作为一个二维向量
    public Vector2 joystickVec;

    // 指定操纵杆的类型(固定或跟随)
    public JoystickType joystickType = JoystickType.FIXED;

    // 触摸操纵杆时的位置
    private Vector2 joystickTouchPos;

    // 操纵杆背景的原始位置
    private Vector2 joystickOriginalPos;

    // 操纵杆背景的半径,根据屏幕宽度计算而来
    private float joystickRadius;

    // 初始化
    void Start()
    {
        // 初始化操纵杆背景的原始位置
        joystickOriginalPos = joystickBG.transform.position;

        // 根据屏幕宽度计算操纵杆背景的半径
        joystickRadius = joystickBG.GetComponent<RectTransform>().sizeDelta.y * Screen.width / 800 / 2;
    }

    // 当玩家按下操纵杆时调用
    public void PointerDown()
    {
        if (joystickType == JoystickType.FIXED)
        {
            // 对于固定操纵杆,将触摸位置设置为操纵杆背景的原始位置
            joystickTouchPos = joystickOriginalPos;
        }
        else if (joystickType == JoystickType.FOLLOW)
        {
            // 对于跟随操纵杆,将操纵杆及其背景设置为触摸位置
            joystick.transform.position = Input.mousePosition;
            joystickBG.transform.position = Input.mousePosition;
            joystickTouchPos = Input.mousePosition;
        }
    }

    // 当玩家拖动操纵杆时调用
    public void Drag(BaseEventData baseEventData)
    {
        // 将基本事件数据强制转换为PointerEventData
        PointerEventData pointerEventData = (PointerEventData)baseEventData;

        // 获取当前拖动位置
        Vector2 dragPos = pointerEventData.position;

        // 计算操纵杆输入的方向
        joystickVec = (dragPos - joystickTouchPos).normalized;

        // 计算当前位置与触摸位置之间的距离
        float joystickDist = Vector2.Distance(dragPos, joystickTouchPos);

        // 限制操纵杆在指定半径范围内移动
        if (joystickDist < joystickRadius)
        {
            joystick.transform.position = joystickTouchPos + joystickVec * joystickDist;
        }
        else
        {
            joystick.transform.position = joystickTouchPos + joystickVec * joystickRadius;
        }

        // 根据操纵杆输入设置玩家的移动方向
        // HHSJ.Main.instance.PlayerEx.GetComponent<HHSJ.Player>().moveDir = dragPos - joystickTouchPos;
    }

    // 当玩家释放操纵杆时调用
    public void PointerUp()
    {
        // 重置操纵杆输入和位置到初始值
        joystickVec = Vector2.zero;
        joystick.transform.position = joystickOriginalPos;
        joystickBG.transform.position = joystickOriginalPos;

        // 将玩家的移动方向重置为零
        // HHSJ.Main.instance.PlayerEx.GetComponent<HHSJ.Player>().moveDir = Vector3.zero;
    }

    // 可以在这里添加其他方法和FixedUpdate以实现特定功能
}

大致效果如下:

unity2022版本 实现手机虚拟操作杆,unity开发,游戏,c#,unity,游戏开发

社交:

QQ群:859055710 文章来源地址https://www.toymoban.com/news/detail-715830.html

到了这里,关于unity2022版本 实现手机虚拟操作杆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手机端三维人体建模软件-易模,为虚拟现实、游戏开发带来新体验

    三维人体建模是一种高级的数字技术,用于将人体的形态、肌肉、骨骼等三维信息转化为数字模型。这项技术涵盖了计算机图像处理、计算机辅助设计等领域,具有广泛的应用价值。通过三维人体建模,可以更好地理解人体的结构和功能,对于医学研究、康复治疗、运动仿真

    2024年02月08日
    浏览(51)
  • Unity手机游戏开发:从搭建到发布上线全流程实战

    前言: 技术书籍是学习技术知识的重要资源之一。读技术书可以帮助我们学习新技能和知识,技术书籍提供了可靠的、全面的信息,帮助我们快速学习新技能和知识。同时技术书籍有助于保持你的竞争力,因为它们提供了最新的技术知识和实践。这在当今快速发展的技术领域

    2024年01月22日
    浏览(65)
  • 解决Unity游戏开发使用Visual Studio Enterprise 2022提示未找到目标框架.net framework4.7.1问题

    采用Visual Studio Installer安装Visual Studio Enterprise 2022,安装中勾选游戏下Unity游戏开发。 单个组件中确保勾选.NET Framework 4.7.1目标包 安装位置自定义修改至F盘后使用Visual Studio Enterprise 2022登录,在Unity设置使用Visual Studio Enterprise 2022并打开对应项目文件,提示未找到目标框架.net

    2024年02月10日
    浏览(52)
  • 微信小游戏开发之unity-精灵的创建动画和操作移动

    我们的目标是通过unity开发微信小游戏! 这是第一篇正式实战开发文章,将会很详细介绍每一个步骤和代码。 废话不多说直接操作! 由于目标开发游戏是2D小游戏,我们选择2D核心模板. 我们的目标是开发微信小游戏所以我们需要修改setting,选择运行平台选择转换 WebGL ,刚开

    2024年01月16日
    浏览(66)
  • [游戏开发][Unity] TPS射击游戏相机实现

    滑屏控制 角色的横向旋转 相机的纵向旋转(区别于横向旋转) 相机贴墙拉近(不能穿墙) 相机观察旋转(角色不转相机转用于观察四周) 开火按钮和旋转屏幕功能共存(边开枪边转向瞄准) 市面上的TPS射击游戏基本上有两种实现射击瞄准 方案一:以枪口射击方向为基准,相机跟着人

    2024年02月16日
    浏览(36)
  • Unity游戏开发:场景切换的实现

    在unity中可以将不同场景的背景和道具放置在不同的Scene当中,通过对Scene的加载和卸载来实现场景之间的切换。同时创建一个基础场景(Control Scene)来对整个游戏系统进行管理,在基础场景(Control Scene)中不放置背景图片或者游戏道具而只添加各种控制单元和Canvas。 在场景

    2024年02月15日
    浏览(47)
  • [游戏开发]Unity红点系统_树实现

    刚好处理到红点系统的问题,就写个文章记录一下。本文的红点系统为一个 树 结构,UI实现需要和红点运行逻辑剥离,防止过度耦合,现在就暂时不提及,后续在讲述。 红点是游戏中一种常见且重要的提醒方式,通常涉及到很多方面信息和界面的显示,如果不做成独立的系

    2024年02月06日
    浏览(34)
  • Unity开发日记-进入游戏按钮和退出游戏按钮的逻辑实现

    本篇文章只是总结一下UGUI中进入游戏和退出游戏的逻辑代码的两种实现方式,方便以后查阅,以后如果有其他的方法也会随时更新(Unity版本为2021) 首先是在UI的Image(背景图)上挂载脚本 代码如下 两种方法各有各的好。方法一代码量少但项目大的时候管理比较麻烦;方法

    2024年02月11日
    浏览(72)
  • unity使用PhotonEngine实现多人联机游戏开发(一)

    先来了解一下PhotonEngine(光子引擎),这是德国ExitGame公司开发的网络引擎,photonengine简单易上手,很多游戏公司开发的网络游戏都是使用的这个。这个网络引擎里面包括了PhotonCloud(光子云)、photonServer(光子服务器)、PhotonQuantum(确定性量子引擎)、PhotonVoice(光子语音)

    2024年02月07日
    浏览(52)
  • Unity 游戏开发、01 基础篇 | 知识大全、简单功能脚本实现

    Unity默认窗口布局 Hierarchy 层级窗口 Scene 场景窗口,3D视图窗口 Game 游戏播放窗口 Inspector 检查器窗口,属性窗口 Project 项目窗口 Console 控制台窗口 恢复默认布局 Window | Layouts | Default 调大页面字体 Preference | UI Scaling 新项目默认创建了 SampleScene 场景 {摄像机,平行光} SampleScen

    2024年02月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包