【Unity2022】Unity实现手机游戏操控摇杆(实现操控轮盘)

这篇具有很好参考价值的文章主要介绍了【Unity2022】Unity实现手机游戏操控摇杆(实现操控轮盘)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

运行效果预览

首先展示一下本文章实现的效果:
unity手机摇杆,Unity,unity,游戏引擎,c#,游戏

创建物体

创建两个UI图像,一个用于表示背景,作为父物体,命名为JoyStick,一个表示摇杆,命名为Center。
unity手机摇杆,Unity,unity,游戏引擎,c#,游戏
背景图像选择一个圆,最好加点半透明的属性,最终完成图如下图所示。
unity手机摇杆,Unity,unity,游戏引擎,c#,游戏

脚本

创建一个脚本,命名为Joystick,然后将脚本挂载到JoyStick物体上,我们将通过这个脚本来实现摇杆。

获取RectTransform

我们首先需要在Awake() 方法中,获取摇杆背景的 RectTransform 组件和手柄的RectTransfomr组件。

background = GetComponent<RectTransform>();
handle = transform.GetChild(0).GetComponent<RectTransform>(); // 摇杆手柄是背景的子元素

background 变量保存了背景的 RectTransform 组件,handle 变量保存了摇杆手柄的 RectTransform 组件。

处理玩家拖动事件

接下来,编写一个方法,用于处理拖动事件,代码如下所示。

public void OnDrag(PointerEventData eventData)
{
    Vector2 touchPosition = Vector2.zero;
    if (RectTransformUtility.ScreenPointToLocalPointInRectangle(background, eventData.position, eventData.pressEventCamera, out touchPosition))
    {
        // 获取触摸位置相对于摇杆背景的百分比
        touchPosition.x = (touchPosition.x / background.sizeDelta.x)*2;
        touchPosition.y = (touchPosition.y / background.sizeDelta.y)*2;
        touchPosition = (touchPosition.magnitude > 1f) ? touchPosition.normalized : touchPosition;
        
        // 更新摇杆手柄的位置
        handle.anchoredPosition = new Vector2(touchPosition.x * (background.sizeDelta.x / 2), touchPosition.y * (background.sizeDelta.y / 2));
        // 更新输入方向
        inputDirection = touchPosition;
    }
}

OnDrag(PointerEventData eventData) 方法用于处理拖动事件。在该方法中,首先通过 RectTransformUtility.ScreenPointToLocalPointInRectangle() 方法将触摸位置从屏幕坐标系转换为摇杆背景的本地坐标系。然后将触摸位置转换成相对于摇杆背景的百分比,这样摇杆手柄就能够根据触摸位置的百分比调整自己的位置。最后更新输入方向变量。

完整代码

using UnityEngine;
using UnityEngine.EventSystems;

public class Joystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler
{
    private RectTransform background; // 摇杆背景
    private RectTransform handle; // 摇杆手柄

    private Vector2 inputDirection; // 输入方向

    private void Awake()
    {
        background = GetComponent<RectTransform>();
        handle = transform.GetChild(0).GetComponent<RectTransform>(); // 摇杆手柄是背景的子元素
    }

    public void OnDrag(PointerEventData eventData)
    {
        Vector2 touchPosition = Vector2.zero;
        if (RectTransformUtility.ScreenPointToLocalPointInRectangle(background, eventData.position, eventData.pressEventCamera, out touchPosition))
        {
            // 获取触摸位置相对于摇杆背景的百分比
            touchPosition.x = (touchPosition.x / background.sizeDelta.x)*2;
            touchPosition.y = (touchPosition.y / background.sizeDelta.y)*2;
            touchPosition = (touchPosition.magnitude > 1f) ? touchPosition.normalized : touchPosition;
            
            // 更新摇杆手柄的位置
            handle.anchoredPosition = new Vector2(touchPosition.x * (background.sizeDelta.x / 2), touchPosition.y * (background.sizeDelta.y / 2));
            // 更新输入方向
            inputDirection = touchPosition;
        }
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        OnDrag(eventData);
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        // 重置摇杆位置和输入方向
        handle.anchoredPosition = Vector2.zero;
        inputDirection = Vector2.zero;
    }

    // 返回输入方向
    public Vector2 GetInputDirection()
    {
        return inputDirection;
    }
}

获取输入

接下来就可以在其他所需获取输入的地方调用我们的GetInputDirection方法,来获取玩家的输入了,具体示例代码如下所示;

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

public class Player : Ball
{
    public Joystick joystick;
    // Start is called before the first frame update
    protected override void Start()
    {
        base.Start();
        GameObject canvas = GameObject.FindGameObjectWithTag("UI");
        joystick = canvas.transform.Find("Input/JoyStick").GetComponent<Joystick>();
    }
// Update is called once per frame
void Update()
    {
        Vector2 joystickInput=joystick.GetInputDirection();
        Move(new Vector3(joystickInput.x,joystickInput.y,transform.position.z));
        //Debug.Log(Weight);
    }
}

运行

运行程序,效果如下所示:
unity手机摇杆,Unity,unity,游戏引擎,c#,游戏

其他文章

Unity实现在两个物体之间连出一条线

Unity如何生成随机数文章来源地址https://www.toymoban.com/news/detail-724911.html

到了这里,关于【Unity2022】Unity实现手机游戏操控摇杆(实现操控轮盘)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity手机游戏开发:从搭建到发布上线全流程实战

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

    2024年01月22日
    浏览(65)
  • 百人项目组unity2d游戏手机端发烫帧率低优化从10帧优化到60帧

    项目组排查及优化: 1.http://zh.esotericsoftware.com/forum/Skeleton-Unity-16481 此外,请务必在实际设备上测试 Release 版本的性能,因为调试版本的性能可能会更差,而分析器会使事情变得更糟。 这里一定要去掉开发者模式,否则会掉个10~20帧左右(提升明显) 2.检查正常2d游戏drawcall

    2023年04月23日
    浏览(40)
  • 一加11/Ace2/10Pro手机如何实现全局120HZ高刷-游戏超级流畅效果

    已经成功root啦。安卓13目前也一样支持LSPosed框架,如果你对LSP框架有需求,也可以使 自测120HZ刷新率诞生以后,很多小伙伴用上了就很难回来啦,一加11/Ace2/10Pro/9pro手 机厂商也对新机做了很多的适配,让我们日常使用起来更棒。虽然屏幕的确支持了120HZ高刷 但很多APP还是自

    2024年02月09日
    浏览(155)
  • JAVA五子棋手机网络对战游戏的设计与实现(源代码+论文)

    在现代社会中,手机及其它无线设备越来越多的走进普通老百姓的工作和生活。 随着3G技术的普及与应用,基于Java开发的软件在手机上的使用非常的广泛,手机增值服务的内容也是越来越多,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。 本文基于J2ME技术,以

    2024年02月09日
    浏览(43)
  • 手机如何运行exe文件游戏,手机如何运行代码软件

    大家好,小编为大家解答手机如何运行旧版安卓应用的问题。很多人还不知道手机如何运行exe文件游戏,现在让我们一起来看看吧! 大家好,小编来为大家解答以下问题,手机上的python怎么运行程序,手机的python怎么运行文件,今天让我们一起来看看吧! 1、python程序怎么在

    2024年02月03日
    浏览(52)
  • 手机如何运行exe文件游戏,手机如何运行两个微信

    本篇文章给大家谈谈手机如何运行python脚本画画,以及手机如何运行exe文件游戏,希望对各位有所帮助,不要忘了收藏本站喔。 Source code download: 本文相关源码 大家好,小编为大家解答手机python编程软件怎么运行的问题。很多人还不知道在手机上如何运行python,现在让我们一

    2024年01月18日
    浏览(44)
  • python可以编写手机软件吗,python可以做手机游戏吗

    大家好,小编来为大家解答以下问题,python手机版做小游戏代码大全,python可以写手机游戏脚本吗,今天让我们一起来看看吧! Source code download: 本文相关源码 教你如何用 Python 写一个小游戏 引言 最近 python 语言大火, 除了在科学计算领域 python 有用武之地之外, 在游戏后台等

    2024年01月17日
    浏览(53)
  • 游戏手机低迷,黑鲨、红魔花式求生

    手机游戏很红火,但游戏手机并不好出圈。 整体来看,今年游戏手机市场按下了减速键。鲸参谋数据显示,今年1-9月游戏手机累计销量约320万件,同比下滑近40%,累计销量额约76亿元,同比下滑39%。 具体来看,各家游戏手机厂商似乎都并不太好过。就拿黑鲨来说,不久前,腾

    2024年02月05日
    浏览(37)
  • 切水果游戏曾经是一款风靡手机的休闲游戏,今天要分享的就是一款网页版的切水果游戏, 由HTML+CSS+JS实现,虽然功能和原版的相差太大,但基本的功能具备,效果逼真。感兴趣的小伙伴可收藏学习(完整源码

    前言 切水果游戏曾经是一款风靡手机的休闲游戏,今天要分享的就是一款网页版的切水果游戏, 由HTML+CSS+JS实现,虽然功能和原版的相差太大,但基本的功能具备,效果逼真。感兴趣的小伙伴可收藏学习(完整源码在文末) 推荐学习专栏: Web前端 JavaWeb学习专栏 文章目录

    2024年02月03日
    浏览(39)
  • 小米手机小游戏隐私问题解决方案

    1.由于laya底层代码调用获取设备信息,导致原先启动laya引擎后才去弹出隐私政策条款的功能是过不了审核的,所以需要在android的设计一个隐私条款的弹窗,玩家同意条款后才启动laya引擎: (1)定义隐私条款弹窗的xml文件:在layout文件夹下创建 activity_privacy_policy.xml (2)既

    2024年02月03日
    浏览(63)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包