一、解决空中无限跳跃
解决空中无限跳跃的根本就是添加落地检测,即在地面上才能进行跳跃(二段跳功能以后再开发)
在文件夹内新建PhysicsCheck物理检测脚本
在里面开发人物物理检测相关功能
添加isGround
布尔值变量,接触地面则为1,空中则为0。
以及两种检测变量:checkRadius
检测半径 groundLayer
检测对象层
[Header("状态")]
public Boolean isGround;
[Header("检测参数")]
// 检测半径
public float checkRadius;
public LayerMask groundLayer;
新建Check方法,由于是要持续监测,所以需要在Update方法内进行调用检测方法
private void Update()
{
Check();
}
public void Check()
{
// 检测地面
isGround = Physics2D.OverlapCircle((Vector2)transform.position + buttonOffset, checkRadius, groundLayer);
}
Physics2D.OverlapCircle文档:https://docs.unity3d.com/cn/2022.3/ScriptReference/Physics2D.OverlapCircle.html
transform.position
即以人物Player刚体轮廓的基准点为检测中心点,该基准点也是裁切人物素材时,圆圈的那一点。
buttonOffset
为检测中心偏离人物中心y轴时,加入的偏移量。
checkRadius
检测半径,值越小,检测严格程度越高。
groundLayer
检测层级,此处功能则是以地面为检测层。
创建自定义的groundLayer
检测层级
因为要以地面进行碰撞检测,所以将platform列为检测层
选中platform,选中Layer下拉菜单,点击Add Layer
然后,在列表中,写入Ground,则新建了一个自定义的层级
即可在PlatForm中选中Ground
最后,选择人物Player,在刚刚创建的物理检测脚本的Component中,GroundLayer选择刚刚新建的层级——Ground
二、黏墙问题
由于给人物Player创建了2D刚体,所以会赋予物理属性——摩擦力,于是碰撞在墙壁时,会因为摩擦力无法受到重力的影响
在Settings文件夹中,创建PhysicsMaterial文件夹,并创建Physics Material 2D
将Friction设置为0,即光滑表面,没有摩擦力
将此Material赋予人物Player的2D刚体