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.hqwc.cn/news/87465.html

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

相关文章

Matlab图像处理-除法运算

除法运算 除法运算可用于去除数字化器灵敏度随空间变化造成的影响。图像的除法运算给出的是两幅图像相应像素值的变化比率&#xff0c;而不是每个像素的绝对差异&#xff0c;因而图像除法也称为比率变换&#xff0c;常用于校正成像设备的非线性影响。 在 MATLAB图像处理工具箱…

Nginx-报错no live upstreams while connecting to upstream

1、问题描述 生产环境Nginx间歇性502的事故分析过程 客户端请求后端服务时一直报错 502 bad gateway&#xff0c;查看后端的服务是正常启动的。后来又查看Nginx的错误日志&#xff0c;发现请求后端接口时Nginx报错no live upstreams while connecting to upstream&#xff0c…

dolphinschedule配置企微告警服务(WeChat群组)

一、前置说明 ds配置好工作流后&#xff0c;比较重要的一个就是上线后的监控报警服务&#xff0c;如果你是基于企微作为协同办公的&#xff0c;WeChat群组预警必须是要安排上的&#xff0c;文章基于自建应用配合群组方式构建预警群&#xff0c;接入后&#xff0c;任务成功或者…

CSS中如何实现背景图片的平铺和定位?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 平铺背景图片⭐ 背景图片定位⭐ 同时设置平铺和定位⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是…

记一次因函数入参没有带类型所引发的问题

工作中&#xff0c;sit测试中&#xff0c;测试突然发现页面异常。经排查&#xff0c;是函数参数没有定义类型所以&#xff0c;dart默认是dynamic类型&#xff0c;而dynamic编译阶段不检查类型&#xff0c;正是由于编译阶段不检查类型&#xff0c;很明显的错误也只能运行的时候才…

ExpressLRS开源之RC链路性能测试

ExpressLRS开源之RC链路性能测试 1. 源由2. 分析3. 测试方案4. 测试设计4.1 校准测试4.2 实验室测试4.3 拉距测试4.4 遮挡测试 5. 总结6. 参考资料 1. 源由 基于ExpressLRS开源基本调试验证方法&#xff0c;对RC链路性能进行简单的性能测试。 修改设计总能够满足合理的需求&a…

WPF自定义命令及属性改变处理

1、项目建构 2、自定义命令 namespace WpfDemo.Base {public class MyCommand : ICommand{Action executeAction;public MyCommand(Action action){executeAction action;}public event EventHandler? CanExecuteChanged;public bool CanExecute(object? parameter){retu…

bpmnjs Properties-panel拓展(属性设置篇)

最近有思考工作流相关的事情&#xff0c;绘制bpmn图的工具认可度比较高的就是bpmn.js了&#xff0c;是一个基于node.js的流程图绘制框架。初始的框架只实现了基本的可视化&#xff0c;想在xml进行客制化操作的话需要拓展&#xff0c;简单记录下几个需求的实现过程。 修改基础 …

【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南

Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库&#xff0c;所有的操作都是对象级别的粒度的&#xff0c;这种做法的优势是: 个别对象的失效&#xff0c;不会溢出为更大级别的系统失效。便于实现"强一致性"这个特性。此特性对于机器学习与大数据处理非…

图像翻拍检测——反射分量分离的特征融合

随着计算机技术的迅速发展&#xff0c;需要建立人与信息一一对应的安保认证技术&#xff0c;通过建立完整的映射网络体系&#xff0c;从而确保每个人的人身、财产、隐私等的安全.与指纹、基因等人体生物特征识别系统相比&#xff0c;人脸识别系统更加友好&#xff0c;不需要人的…

③matlab向量和矩阵

目录 手动输入数组 创建等间距向量 数组创建函数 手动输入数组 1.背景 单个称为标量的数值实际上是一个 11 数组&#xff0c;也即它包含 1 行 1 列。 任务 创建一个名为 x 并且值为 4 的变量。 2.您可以使用方括号创建包含多个元素的数组。 x [3 5] x 3 5 任务 …

企业级数据共享规模化模式

数据共享正在成为企业数据战略的重要元素。对于公司而言&#xff0c;Amazon Data Exchange 这样的亚马逊云科技服务提供了与其他公司共享增值数据或从这些数据获利的途径。一些企业希望有一个数据共享平台&#xff0c;他们可以在该平台上建立协作和战略方法&#xff0c;在封闭、…