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

这篇具有很好参考价值的文章主要介绍了Unity创建一个可移动的2D角色。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建角色与场景

我们首先创建一个角色,这里我新建了一个胶囊体用来当Player,一个Square用来当地面。
Unity创建一个可移动的2D角色,Unity,unity,游戏引擎
接下来,为角色增加碰撞体和刚体,为地面增加碰撞体。然后我们为Player的刚体增加一个Z轴的约束,避免其东倒西歪。如下图所示:
Unity创建一个可移动的2D角色,Unity,unity,游戏引擎

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

创建地面

接下来我们要新建一个Layer,用于表示地面。
将Square改名为Ground,并修改其Layer为Ground。
Unity创建一个可移动的2D角色,Unity,unity,游戏引擎

角色控制脚本

接着新建一个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选取我们之前设置好的地面层。
Unity创建一个可移动的2D角色,Unity,unity,游戏引擎

运行结果

运行结果如下图所示,可以跑,跳:
Unity创建一个可移动的2D角色,Unity,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-683232.html

到了这里,关于Unity创建一个可移动的2D角色的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 2d平面unity,鼠标点击某个位置,人物角色朝这个方向移动

    2d平面unity,鼠标点击某个位置,人物角色朝这个方向移动 如果我们没有将鼠标点击位置转换为世界坐标系中的位置,而是直接将屏幕坐标系中的位置作为角色移动的目标位置,那么可能会发生以下两种情况: 角色会偏离目标位置 由于屏幕坐标系中的位置和世界坐标系中的位

    2024年02月06日
    浏览(78)
  • 【笔记】Unity2D角色和物体移动的几种方法

    在Unity中对于物体移动有多种方法,这里根据b站up主【鼓励Jun】的视频整理了一些笔记 变量声明: 位移向量var dir=new Vector3(deltax.deltay,deltaz); 移动速度var speed=2; ps:变量声明都在主要都在方法外,实际位移操作则在Update方法中。 #键盘输入,这里举一个只x轴上移动的例子,y轴同

    2023年04月08日
    浏览(58)
  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(124)
  • Unity实现2D游戏跟随摄像机(平滑移动)

    摄像机运行效果如下所示。 首先创建一个可用的玩家角色,写好移动逻辑,如果要使用在Unity商店中购买的资源,可以点击Window菜单栏 Package Manager选项,来打开Package Manager窗口,如下所示,然后下载你需要的资源。 如果你没有在资源商店的精灵资产,可以在Hierarchy视图,右

    2024年02月19日
    浏览(55)
  • unity如何创建一个角色(实现角色的行走、奔跑)

    1、首先从资源商店下载导入一个模型,这里选择的是下面这个模型(用了很多,这个比较好用,还是免费的),下载后导入模型。  2、创建一个平面,打开刚才导入的模型的预制体,把角色拖到场景中并命名为Player,打开的文件目录如下  3、创建一个角色控制器(右键-Cr

    2024年02月11日
    浏览(51)
  • 用unity写一个2D类的拼图游戏

    前几天接了一个拼图项目刚好现在写完了,拿出来分享,拼图不难,我也是看了一个官方案例写的,因为当我们写图片跟随鼠标的时候,鼠标已经有一个图片了,这个图片会遮挡射线,然后就无法判断当前拼图块在哪里,话不多说,上菜 1、新建总控脚本LevelManager 2、新建Pu

    2024年02月08日
    浏览(45)
  • 【Unity游戏开发教程】零基础带你从小白到超神16——四种方法控制人物移动之角色控制器

    直接修改组件位置 去资源商城下载角色控制系统成品直接拿来用 unity提供的角色控制器组件 通过物理系统自己做

    2024年02月08日
    浏览(47)
  • 【用unity实现100个游戏之14】Unity2d做一个建造与防御类rts游戏(附项目源码)

    【视频】:https://www.udemy.com/course/awesome-builder-defender-game-in-unity/?couponCode=CMCOURSEDEC23 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入

    2024年02月05日
    浏览(59)
  • 【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)

    本期紧接着上一篇,本期主要内容是实现商店、购买、出售、升级等功能。 新增TurretSettings 配置不同炮塔参数 绘制商店UI 新增TurretCard,渲染商品数据,如果前面有绘制价格文本,还可以渲染价格文本,这里我就偷懒不弄了 挂载脚本,并配置 新增TurretShopManager,商店管理器

    2024年01月21日
    浏览(63)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包