超详细,unity如何制作人物行走的遥杆?

news2024/10/6 5:57:07

介绍

在游戏中,移动遥杆是一种常见的用户界面元素,它允许玩家通过触摸或鼠标输入来控制游戏对象的移动。移动遥杆通常由一个圆形或方形的背景和一个可以拖动的小球(称为拇指杆)组成。玩家可以通过拖动拇指杆来控制游戏对象的移动方向和速度。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


方法

1.新建一个canvas图片,用于显示遥杆区域

在这里插入图片描述

2.新建第二个canvas图片,用于显示遥杆控制点

在这里插入图片描述
在这里插入图片描述

3.给第二个图片挂载脚本GameTouch,并且挂载Tag为“Player”

以下是对GameTouch脚本每行代码的注释:

using UnityEngine;
using UnityEngine.EventSystems;  // 引入Unity事件系统命名空间

public class GameTouch : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
	Vector2 startPos;  // 记录遥杆起始位置
	public Vector2 Pos;  // 记录遥杆的移动值

	public void OnBeginDrag(PointerEventData eventData)  // 当玩家开始拖拽遥杆时执行
	{
		startPos = transform.position;  // 记录遥杆的起始位置
	}

	public void OnDrag(PointerEventData eventData)  // 当玩家拖拽遥杆时执行
	{
		Pos = eventData.position - startPos;  // 计算遥杆的移动值
		transform.position = Vector2.ClampMagnitude(Pos, 30) + startPos;  // 移动遥杆并限制其最大移动距离
	}

	public void OnEndDrag(PointerEventData eventData)  // 当玩家停止拖拽遥杆时执行
	{
		Pos = Vector2.zero;  // 重置遥杆的移动值
		transform.position = startPos;  // 将遥杆移回起始位置
	}
}

这个脚本实现了一个基本的移动遥杆,当玩家拖拽遥杆时,它会记录遥杆的移动值,并将遥杆移动到合适的位置。这个脚本实现了三个接口:IBeginDragHandler、IDragHandler和IEndDragHandler,这些接口都是Unity事件系统中的接口,用于处理用户输入事件。当玩家开始拖拽遥杆时,OnBeginDrag()函数将记录遥杆的起始位置;当玩家拖拽遥杆时,OnDrag()函数将计算遥杆的移动值,并将遥杆移动到合适的位置,并限制其最大移动距离;当玩家停止拖拽遥杆时,OnEndDrag()函数将重置遥杆的移动值,并将遥杆移回起始位置。

在这里插入图片描述

4.新建一个物体,作为遥杆的控制对象,挂载脚本ObjectMover 
using UnityEngine;

public class ObjectMover : MonoBehaviour
{
	public float speed = 5f; // 物体移动的速度
	private GameTouch gameTouch; // 存储GameTouch组件的引用

	private void Start()
	{
		GameObject player = GameObject.FindGameObjectWithTag("Player"); // 获取标签为"Player"的物体
		if (player != null) {
			gameTouch = player.GetComponent<GameTouch>(); // 获取GameTouch组件
		}
		if (gameTouch == null) {
			Debug.LogError("GameTouch component not found on Player object!");
		}
	}

	private void Update()
	{
		// 获取遥杆的移动值
		float horizontal = gameTouch.Pos.x;
		float vertical = gameTouch.Pos.y;

		// 计算物体的移动方向
		Vector3 direction = new Vector3(horizontal, 0f, vertical).normalized;

		// 计算物体的移动距离
		float distance = Mathf.Clamp(gameTouch.Pos.magnitude, 0f, 30f) / 30f;
		distance *= speed * Time.deltaTime;

		// 移动物体
		transform.position += direction * distance;
	}
}

在这里插入图片描述
定义了一个名为ObjectMover的类,该类继承自MonoBehaviour,表示它是一个Unity组件。

声明了一个公有的浮点型变量speed,用于控制物体移动的速度。

声明了一个私有的GameTouch类型变量gameTouch,用于存储GameTouch组件的引用。

Start()方法在脚本启动时被调用。在该方法中,通过标签查找到一个名为"Player"的游戏对象,并获取其上的GameTouch组件的引用。

如果找到了GameTouch组件,则将其赋值给gameTouch变量;否则输出错误信息。

Update()方法在每一帧都被调用。在该方法中,获取gameTouch的Pos属性,该属性存储了一个遥杆的移动值。

根据遥杆的移动值计算出物体的移动方向,使用Vector3的normalized方法将其标准化。

计算物体的移动距离,使用Mathf.Clamp方法将移动值限制在0到30之间,并乘以speed和Time.deltaTime,确保移动平滑。

将物体沿着移动方向乘以移动距离进行移动,更新物体的位置。

5.调整摄像机位置,便于观察

在这里插入图片描述


演示

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某IC交易网 js逆向解析学习【2023/05/16】

文章目录 文章目录 文章目录前言网址目标参数确认加密点cookie解密第一步hex1算法解析rind和rnns完结撒花前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 如果有加密的网站可以留言发给我,一起学习共享学习路程 如侵权,联系我…

Vue.js表单输入绑定

对于Vue来说&#xff0c;使用v-bind并不能解决表单域对象双向绑定的需求。所谓双向绑定&#xff0c;就是无论是通过input还是通过Vue对象&#xff0c;都能修改绑定的数据对象的值。Vue提供了v-model进行双向绑定。本章将重点讲解表单域对象的双向绑定方法和技巧。 10.1 实现双…

单片机的介绍

目录 一、介绍 1.单片机简介 2.单片机型号 3.体系 二、硬件基础 1.引言 2.电路基础 电的类比 电流 电压 电路 3.电子元器件 电阻 电容 二极管 三极管 4.常见电气接口 传统音频 视频 电源 RJ45网口 DB9串口 5.开发板/最小系统板 三、STM32介绍 1.简介…

JAVA电商 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

JAVA电商 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 1. 鸿鹄Cloud架构清单 2. Commonservice&#xff08;通用服务&#xff09; 通用服务&#xff1a;对spring Cloud组件的使用&封装&#xff0c;是一套完整的针对于分布式微…

Android Studio中的布局讲解

文章目录 1.LinearLayout&#xff08;线性布局&#xff09;2.RelativeLayout&#xff08;相对布局&#xff09;相对于兄弟元素&#xff1a;相对于父元素对齐方式间隔 3.GridLayout&#xff08;网格布局&#xff09;设置最大列数设置最大行数指定控件的位置 4.FrameLayout&#…

包管理工具:pnpm | 京东云技术团队

作者&#xff1a;京东零售 杨秀竹 pnpm 是什么 pnpm&#xff08; performant npm &#xff09;指的是高性能的 npm&#xff0c;与 npm 和 yarn 一样是一款包管理工具&#xff0c;其根据自身独特的包管理方法解决了 npm、yarn 内部潜在的安全及性能问题&#xff0c;在多数情况…

耗子叔-我的互联网引路人

早上一早看到各大程序员群提到左耳朵耗子-陈皓&#xff0c;因为心梗辞世的信息&#xff0c;真的让人难以置信&#xff0c;因为据我所知他还不到50。 虽然我从来没见过他&#xff0c;交谈也很少&#xff0c;但是我知道他的情况&#xff0c;知道他的公司&#xff0c;知道他的好恶…

不要再问我加密的问题了,使用crypto-js中的AES加密方法,连续多次加密/解密,注意事项

每日鸡汤&#xff0c;每个你想要学习的念头&#xff0c;都是未来的你向自己求救 需求&#xff1a;有一段字符串text&#xff0c;有3个key&#xff0c;后端用这三个key一次加密&#xff1b;然后把加密后的字符串返回给前端&#xff0c;前端用这3个key依次解密&#xff0c;得到原…

剖析:在线帮助中心对企业能够起到什么作用?

随着互联网技术的不断发展和普及&#xff0c;越来越多的企业开始将自己的业务转移到了线上。这种转移不仅能够大幅度提高企业的效率&#xff0c;还能够让企业的服务更加贴近用户的需求。然而&#xff0c;在线服务也存在着一些问题&#xff0c;比如用户可能会遇到一些困难&#…

大人,时代变了!缺少成本票可不能买发票啊,是有办法的!

业务是流程&#xff0c;财税是结果&#xff0c;税收问题千千万&#xff0c;关注《税算盘》来帮你找答案。 企业所得税和增值税一样&#xff0c;都是我国重要的税收之一。企业所得税征收对象为企业的利润部分&#xff0c;再度细分就与企业的成本票有关。 企业所得税高是如今众…

电商系统分类树查询功能优化方案总结

前言 分类树查询功能&#xff0c;在各个业务系统中可以说随处可见&#xff0c;特别是在电商系统中。 但就是这样一个简单的分类树查询功能&#xff0c;我们却优化了5次。 到底是怎么回事呢&#xff1f; 背景 我们的网站使用了SpringBoot推荐的模板引擎&#xff1a;Thymelea…

案例5:Java大学生创新创业项目管理设计与实现任务书

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

RK3568|3588|3566处理器属于什么档次?

随着科技的迅猛发展&#xff0c;处理器作为计算机和电子设备的核心组件&#xff0c;其性能的提升对于设备的功能和用户体验起着至关重要的作用。在处理器市场中&#xff0c;不同的处理器被划分为不同的档次&#xff0c;以便用户能够更好地选择适合自己需求的产品。那么&#xf…

解决git clone与git push出现的若干问题:Failed to connect to github.com port 443: Timed out

1 连接github失败问题汇总&#xff1a;Failed to connect to github.com port 443: Timed out 1.1 解决ping不通github.com的问题 1.1.1 查询github的IP的地址 在以下链接找到网页显示github的ip地址http://github.global.ssl.fastly.net.ipaddress.com/&#xff0c;如图所示…

FSW26现金回收RS FSW43 信号和频谱分析仪

Rohde & Schwarz FSW26信号和频谱分析仪&#xff0c;2 Hz - 26.5 GHz 高性能 Rohde & Schwarz (R&S) FSW26 信号和频谱分析仪专为方便、准确和快速而设计。其独特的触摸屏、直观的多视图结果显示和优化的用户指南使 R&S FSW26 分析仪的操作高效方便。凭借其无…

玩转ChatGPT:AskYourPDF插件尝鲜

一、写在前面 首先&#xff0c;吐槽一下&#xff0c;感觉被CloseAI耍了&#xff1a; 上周发文说这一周对PLUS开放联网和插件功能&#xff0c;搞得网络一片狂欢。但是今天通过身边统计学发现&#xff0c;开通了PLUS后&#xff0c;拥有联网和插件功能的只是少数&#xff08;而且…

TCP连接不释放,应用产生大量CLOSE_WAIT状态TCP

一、起源 23年元旦期间&#xff0c;大家都沉浸在一片祥和的过节气氛当中。 “滴滴滴”&#xff0c;这头同事的电话响起&#xff0c;具体说些什么我也没太在意&#xff0c;但见同事接完电话之后展现出了一副懊恼夹杂着些许不耐烦的表情。 我不解问道&#xff1a;“怎么了&…

扇区(sector),块(block),簇(cluster)

1.硬盘(可以认为硬盘就是磁盘) # fdisk -l Disk /dev/cciss/c0d0: 146.7 GB, 146778685440 bytes 255 heads, 63 sectors/track, 17844 cylinders Units cylinders of 16065 * 512 8225280 bytes 可以看到几个名词&#xff1a;heads/sectors/cylinders&#xff0c;分别就是磁…

altium Designer22 AD22 CAD电子绘图员三级知识点操作说明

文章目录 AD22一、解决局域网中多台电脑冲突&#xff1a;禁用license的网络功能二、添加库文件三、库的使用四、库绘制1、原理图库绘制2、PCB封装库绘制 五、动态标题栏六、原理图模板的使用七、层次电路图设计1、在母图上放置页面符2、给sheet symbol添加Entry,名字与子图原理…

案例4:Java宠物管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…