Unity创建一个可移动的2D角色

文章目录

  • 创建角色与场景
    • 创建地面
  • 角色控制脚本
    • 检测地面
  • 运行结果

创建角色与场景

我们首先创建一个角色,这里我新建了一个胶囊体用来当Player,一个Square用来当地面。
在这里插入图片描述
接下来,为角色增加碰撞体和刚体,为地面增加碰撞体。然后我们为Player的刚体增加一个Z轴的约束,避免其东倒西歪。如下图所示:
在这里插入图片描述

同时,为角色添加一个空物体作为子物体,用来向地面发射射线,检测是否触碰到了地面。
将Ground Check置于角色的脚底。

创建地面

接下来我们要新建一个Layer,用于表示地面。
将Square改名为Ground,并修改其Layer为Ground。
在这里插入图片描述

角色控制脚本

接着新建一个CharacterController2D脚本,用于控制角色。将该脚本挂载到玩家的身上。

检测地面

为了实现跳跃功能,我们需要检测地面的存在,如果玩家处于地面,并且按下了跳跃键,才能跳跃。
检测地面有多重实现方式,例如为角色添加子物体的触发器,用触发器来检测地面,也可以向脚下发射射线,也可以对一个区域进行碰撞检测,看看有没有地面存在。本篇文章,采用的就是最后一个方法。

我们需要使用Physics2D.OverlapCircle方法,该方法用于检测2D碰撞。它通过在场景中指定的位置创建一个圆形的区域,然后检测这个区域内是否与其他物体发生碰撞。

该方法其中的一个重载如下所示,也就是我们要使用的重载:

public static Collider2D OverlapCircle(Vector2 point, float radius, int layerMask)

参数含义如下:

  • point:表示圆心位置的二维向量。这个参数指定了圆形区域检测的中心点坐标。即以 point 为中心,以给定的 radius 为半径创建一个圆形区域进行碰撞检测。

  • radius:表示圆形区域的半径。这个参数确定了进行碰撞检测的范围大小。半径越大,检测到的碰撞物体可能性越高。

  • layerMask:指定要进行碰撞检测的图层。图层是 Unity 中用于控制物体可见性和碰撞交互的一种机制。使用 layerMask 可以限制或者排除特定的图层进行碰撞检测。

其中,point 和 radius 是必需的参数,而 layerMask 是可选的。但我们这里需要用,要用其单独检测地面。

point我们使用之前创建的角色子物体的位置,radius我们单独弄一个属性,用于表示其可以检测的范围,当然这个值要小一点辣,太大了检测就不准了,即使跳起来了,可能还会检测到在地面。
raius的定义如下:

private float groundCheckRadius = 0.2f;

然后我们编写检测的代码,如下所示:

// 检测角色是否与地面接触
isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);

下面是完整代码,直接复制到你的脚本中,然后就可以运行啦。

using UnityEngine;public class CharacterController2D : MonoBehaviour
{public float speed = 5f;public float jumpForce = 5f;public Transform groundCheck;public LayerMask groundLayer;private Rigidbody2D rb;private bool isGrounded;private float groundCheckRadius = 0.2f;void Start(){rb = GetComponent<Rigidbody2D>();}void Update(){// 检测角色是否与地面接触isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);// 获取水平输入float moveInput = Input.GetAxisRaw("Horizontal");// 应用水平速度rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);// 角色跳跃if (Input.GetButtonDown("Jump") && isGrounded){rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);}}
}

接下来将Player的子物体Ground Check拖拽到组件的Ground Check属性中,然后为Ground Layer选取我们之前设置好的地面层。
在这里插入图片描述

运行结果

运行结果如下图所示,可以跑,跳:
在这里插入图片描述

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

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

相关文章

WebDAV之π-Disk派盘 + 小象记账

小象记账是一款非常干净便捷的手机记账软件,这款软件的界面非常的简洁,整体以大面积的背景色、文字与符号的黑灰色为主,非常的简约,而且它的字体采用的是幼圆类字体并提高了字重,与整体的设计风格交相呼应,不仅提升了文字可读性还减少了用户的视觉疲劳。除了出色的外表之…

爬虫逆向实战(二十四)--某鸟记录中心

一、数据接口分析 主页地址&#xff1a;某鸟记录中心 1、抓包 通过抓包可以发现数据接口是front/record/search/page 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现&#xff0c;请求参数是加密的 请求头是否加密&#xff1f; 通过查…

安装虚拟机

软硬件准备 软件&#xff1a;推荐使用VMwear&#xff0c;我用的是VMwear 12 镜像&#xff1a;CentOS7 ,如果没有镜像可以在官网下载 &#xff1a;http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso 硬件&#xff1a;因为是在宿主机上运行虚拟…

RabbitMQ集群搭建和测试总结_亲测

RabbiMQ简介 RabbitMQ是用Erlang开发的&#xff0c;集群非常方便&#xff0c;因为Erlang天生就是一门分布式语言&#xff0c;但其本身并不支持负载均衡。 RabbitMQ模式 RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式(默认的集群模式)。 (3)镜像模式(把需要的队列…

工厂生产作业流程合规检测

工厂生产作业流程合规检测系统通过yolov7网络模型算法&#xff0c;工厂生产作业流程合规检测对作业人员的操作行为进行全面监测&#xff0c;通过图像识别算法和数据分析&#xff0c;对人员的操作动作、工具使用、安全防护等方面进行检测和评估&#xff0c;能够实时监测工人的操…

Verilog 实现超声波测距

Verilog 实现超声波测距 教学视频&#xff1a; https://www.bilibili.com/video/BV1Ve411x75W?p33&spm_id_frompageDriver&vd_source19ae31dff4056e52d2729a4ca212602b 超声波测距原理 参考资料&#xff1a;STM32的超声波测距程序_超声波测距stm32程序_VaderZhang的…

Python工具箱系列(四十一)

使用zip批量压缩文件 前文的代码示例了使用gzip对单个文件进行压缩。本文示例使用更通用的zipfile来批量压缩文件。zipfile也是python内置的库&#xff0c;使用起来非常方便。废话不说&#xff0c;直接上代码示例。 import dbm import glob import zipfile# 保存压缩计划的库名…

AtCoder Beginner Contest 317(D-G)

D - President (atcoder.jp) &#xff08;1&#xff09;题目大意 &#xff08;2&#xff09;解题思路 考虑到z最大不超过1e5&#xff0c;N最多不超过100&#xff0c;因此可以考虑用背包来写&#xff0c;dp[j]表示拿高桥拿j分最少需要花费多少个选民转换&#xff0c;最后把答案取…

防御网络攻击风险的4个步骤

如今&#xff0c;人们正在做大量工作来保护 IT 系统免受网络犯罪的侵害。令人担忧的是&#xff0c;对于运营技术系统来说&#xff0c;情况却并非如此&#xff0c;运营技术系统用于运行从工厂到石油管道再到发电厂的所有业务。 组织应该强化其网络安全策略&#xff0c;因为针对…

移动电源专用的单节锂离子电池充电器和恒定 5V 升压控制器HU5715

航誉微HU5715 为一款移动电源专用的单节锂离子电池充电器和恒定 5V 升压控制器&#xff0c;充电 部分集高精度电压和充电电流调节器、预充、充电状态指示和充电截止等功能于一体&#xff0c; 可以输出最大 1A 充电电流。而升压电路采用 CMOS 工艺制造的空载电流极低的 VFM 开 关…

运用Python解析HTML页面获取资料

在网络爬虫的应用中&#xff0c;我们经常需要从HTML页面中提取图片、音频和文字资源。本文将介绍如何使用Python的requests库和BeautifulSoup解析HTML页面&#xff0c;获取这些资源。 一、环境准备 首先&#xff0c;确保您已经安装了Python环境。接下来&#xff0c;我们需要安…

【Java基础篇】一文搞懂Java方法的调用与重载(超详细)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 目录 一、方法的概念以及使用1.1什么是方法1.2方法定义1.3方法调用的执行过程1.4形参和实参的关系 二、方法的重载方…

聚观早报|2023戴尔科技峰会助力创新;小米汽车电池供应商敲定

【聚观365】8月23日消息 2023戴尔科技峰会助力企业创新 小米汽车电池供应商敲定中创新航和宁德时代 iPhone15预计有6种配色 王小川卸任自动驾驶企业禾多科技董事 特斯拉动力总成副总裁宣布离职 2023戴尔科技峰会助力企业创新 近日“新生万物 数实新格局 —— 2023戴尔科技…

暑期实习总结(焊点数据管理软件开发):Python操作MySQL数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转

暑期实习总结&#xff08;焊点数据管理软件开发&#xff09;:Python操作MySQL数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转 ​ 这一周是我在企业实习的最后一周&#xff0c;在企业做的项目已基本完成。这篇博客的目的也是总结一些项目中的一些小问题&…

实用的面试经验分享:程序员们谈论他们的面试历程

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!

全套解决方案&#xff1a;基于pytorch、transformers的中文NLP训练框架&#xff0c;支持大模型训练和文本生成&#xff0c;快速上手&#xff0c;海量训练数据&#xff01; 1.简介 目标&#xff1a;基于pytorch、transformers做中文领域的nlp开箱即用的训练框架&#xff0c;提…

老Python程序员职业生涯感悟—写给正在迷茫的你

我来讲几个极其重要&#xff0c;但是大多数Python小白都在一直犯的思维错误吧&#xff01;如果你能早点了解清楚这些&#xff0c;会改变你的一生的。所以这一期专门总结了大家问的最多的&#xff0c;关于学习Python相关的问题来给大家聊。希望能带给大家不一样的参考。或者能提…

Cento7 Docker-compose安装RabbitMQ

RabbitMQ是一个消息中间件&#xff0c;是用Erlang语言编写的。RabbitMQ据说具有良好的性能和时效性&#xff0c;同时还能够非常好的支持集群和负载部署&#xff0c;非常适合在较大规模的分布式系统中使用。接下来我们就以docker形式安装。 1.先安装docker环境 yum -y install…

移动端h5项目的兼容和适配问题

解决兼容性问题的关键在于对移动端产品的生存环境进行梳理&#xff0c;在此基础之上制定应对策略。 所谓生存环境主要分为三个维度&#xff1a; 硬件环境&#xff0c;细分为品牌和机型&#xff0c;决定了屏幕大小、性能等硬件限制 操作系统&#xff0c;比如iOS6和iOS7&#xf…

四川玖璨电子商务有限公司:抖店运营攻略

抖店运营&#xff0c;是指在抖音平台上进行电商销售的一种新型商业模式。随着抖音平台越来越受到年轻人的喜爱和关注&#xff0c;抖店运营正变得越来越重要。那么&#xff0c;抖店运营应该如何做呢&#xff1f;我们来谈谈抖店运营的一些攻略。 第一&#xff0c;选对产品。选择…