服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity摇杆制作的方法

Unity摇杆制作的方法

2022-11-29 12:20_不动明王 C#

这篇文章主要为大家详细介绍了Unity摇杆制作的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Unity摇杆制作方法的具体代码,供大家参考,具体内容如下

一.UI制作

1.首先创建一个空物体,命名为摇杆,锚点调至左下角

Unity摇杆制作的方法

2.创建一个image作为摇杆厨盆的有效地方,并命名为tough_place

Unity摇杆制作的方法

3.创建一个image放入摇杆的背景图片,并命名为bg。

Unity摇杆制作的方法

4.创建一个image放入摇杆的控制点,并命名为point。

Unity摇杆制作的方法

5.把tough_place的颜色设置为透明

Unity摇杆制作的方法

二.代码编写

创建脚本命名为PEListener,并引入相关接口,并进行封装。

using System;
using UnityEngine;
using UnityEngine.EventSystems;

public class PEListener : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
    public Action<PointerEventData> onClickDown;//鼠标按下时触发的事件
    public Action<PointerEventData> onClickUp;//鼠标抬起时触发的事件
    public Action<PointerEventData> onClickDrag;//鼠标按下时触发的事件
    public void OnPointerDown(PointerEventData eventData)
    {
        if (onClickDown != null)
        {
            onClickDown(eventData);
        }
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        if (onClickUp != null)
        {
            onClickUp(eventData);
        }
    }
   
    public void OnDrag(PointerEventData eventData)
    {
        if (onClickDrag!=null)
        {
            onClickDrag(eventData);
        }
    }
  
}

创建脚本命名为Test,进行相关的逻辑操作。

(1)定义相关数据并传入

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

public class Test : MonoBehaviour {

    //轮盘UI
    public Image imageTough;//轮盘触摸区域
    public Image imgDir;//轮盘背景
    public Image imaPoint;//轮盘操作点


    
    //轮盘相关数据
    Vector2 startPos;//轮盘按下的坐标
    Vector2 defulPos;//轮盘按下的坐标
    float poinDis=90;// 轮盘中心和边缘的最大距离(数据自己测试)


   private void Start()
    {
        defulPos = imageTough.transform.position;

        //由于我们的Canvas选择的是Scale with Screen Size,且Match为1,也就是UI缩放受高度影响到大,具体数据见下图
        //poinDis实际大小=poinDis *缩放
        poinDis = Screen.height * 1.0f / 1334 * poinDis;
    }
}

Unity摇杆制作的方法

(2)进行相关逻辑的书写

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

public class Test : MonoBehaviour {

    //轮盘UI
    public Image imageTough;//轮盘触摸区域
    public Image imgDir;//轮盘背景
    public Image imaPoint;//轮盘操作点


    
    //轮盘相关数据
    Vector2 startPos;//轮盘按下的坐标
    Vector2 defulPos;//轮盘按下的坐标
    float poinDis=90;// 轮盘中心和边缘的最大距离(数据自己测试)


    private void Start()
    {
        defulPos = imageTough.transform.position;

        //由于我们的Canvas选择的是Scale with Screen Size,且Match为1,也就是UI缩放受高度影响到大,具体数据见下图
        //poinDis实际大小=poinDis *缩放
        poinDis = Screen.height * 1.0f / 1334 * poinDis;


        RegisterTouchEvts();
    }


    public void RegisterTouchEvts()
    {
        PEListener lister = imageTough.gameObject.AddComponent<PEListener>();

        lister.onClickDown = (PointerEventData evt) =>
        {
            //鼠标按下时设置轮盘背景位置
            startPos = evt.position;
            imgDir.transform.position = evt.position;

        };

        lister.onClickUp = (PointerEventData evt) =>
        {
            //鼠标抬起时设置轮盘背景位置和轮盘操作点为默认位置
            
            imgDir.transform.position = defulPos;
            imaPoint.transform.localPosition = Vector2.zero;

        };

        lister.onClickDrag = (PointerEventData evt) =>
        {

            //计算是否超过轮盘中心和边缘的最大距离
            Vector2 dir = evt.position - startPos;
            float len = dir.magnitude;

            //超过了,限制为最大位置
            if (len > poinDis)
            {
                Vector2 clampDir = Vector2.ClampMagnitude(dir, poinDis);
                imaPoint.transform.position = startPos + clampDir;
            }
            else
            {
                imaPoint.transform.position = evt.position;
            }
        };
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/a15970673567/article/details/119533642

延伸 · 阅读

精彩推荐
  • C#C# SendMail发送邮件功能实现

    C# SendMail发送邮件功能实现

    这篇文章主要为大家详细介绍了C# SendMail发送邮件功能实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    shaomine5532022-01-12
  • C#C# 单元测试全解析

    C# 单元测试全解析

    这篇文章主要介绍了C# 单元测试的相关资料,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...

    五维思考5302022-11-11
  • C#C# interface与delegate效能比较的深入解析

    C# interface与delegate效能比较的深入解析

    本篇文章是对C#中interface与delegate的效能比较进行了详细的分析介绍,需要的朋友参考下...

    C#教程网5022020-12-14
  • C#C#实现数字转换

    C#实现数字转换

    这篇文章主要为大家详细介绍了C#实现数字转换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    敲代码两年半的练习生8852022-11-16
  • C#C#中DataBindings用法实例分析

    C#中DataBindings用法实例分析

    这篇文章主要介绍了C#中DataBindings用法,结合实例形式详细分析了DataBindings绑定数据源及刷新数据的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    aparche8222021-11-24
  • C#c#自定义Attribute获取接口实现示例代码

    c#自定义Attribute获取接口实现示例代码

    这篇文章主要给大家介绍了关于c#自定义Attribute获取接口实现的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价...

    麦叶7212022-08-07
  • C#C#中Byte转换相关的函数

    C#中Byte转换相关的函数

    这篇文章主要介绍了C#中Byte转换相关的函数介绍,非常具有参考借鉴价值,特此分享到脚本之家平台供大家学习...

    伖先生10222021-11-19
  • C#C#实现过滤sql特殊字符的方法集合

    C#实现过滤sql特殊字符的方法集合

    这篇文章主要介绍了C#实现过滤sql特殊字符的方法,以实例形式分析总结了C#针对SQL危险字符的几种常用的过滤技巧,非常具有实用价值,需要的朋友可以参考下...

    宁静.致远9092021-11-02