0


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

文章目录

创建角色与场景

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

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

创建地面

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

角色控制脚本

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

检测地面

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

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

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

publicstaticCollider2DOverlapCircle(Vector2 point,float radius,int layerMask)

参数含义如下:

  • point:表示圆心位置的二维向量。这个参数指定了圆形区域检测的中心点坐标。即以 point 为中心,以给定的 radius 为半径创建一个圆形区域进行碰撞检测。
  • radius:表示圆形区域的半径。这个参数确定了进行碰撞检测的范围大小。半径越大,检测到的碰撞物体可能性越高。
  • layerMask:指定要进行碰撞检测的图层。图层是 Unity 中用于控制物体可见性和碰撞交互的一种机制。使用 layerMask 可以限制或者排除特定的图层进行碰撞检测。

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

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

privatefloat groundCheckRadius =0.2f;

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

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

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

usingUnityEngine;publicclassCharacterController2D:MonoBehaviour{publicfloat speed =5f;publicfloat jumpForce =5f;publicTransform groundCheck;publicLayerMask groundLayer;privateRigidbody2D rb;privatebool isGrounded;privatefloat groundCheckRadius =0.2f;voidStart(){
        rb =GetComponent<Rigidbody2D>();}voidUpdate(){// 检测角色是否与地面接触
        isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);// 获取水平输入float moveInput = Input.GetAxisRaw("Horizontal");// 应用水平速度
        rb.velocity =newVector2(moveInput * speed, rb.velocity.y);// 角色跳跃if(Input.GetButtonDown("Jump")&& isGrounded){
            rb.AddForce(newVector2(0f, jumpForce), ForceMode2D.Impulse);}}}

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

运行结果

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

标签: unity 游戏引擎

本文转载自: https://blog.csdn.net/weixin_44499065/article/details/132539951
版权归原作者 芝士就是力量啊 ೄ೨ 所有, 如有侵权,请联系我们删除。

“Unity创建一个可移动的2D角色”的评论:

还没有评论