unity2D:角色下蹲移动

注:该文为学习笔记,具体请看b站upMichael-Studio的unity教程2D入门:13敌人Enemy!

环境:unity2020.3

一个修正(与本文内容无关

Update与Time.deltaTime匹配

FixedUpdate与Time.fixedDeltaTime匹配

本文知识点:

设置蹲下键

蹲下按哪个按钮,unity里面是没有预制的,所以我们要自己设置

第一步,打开Edit——Project Setting——Input Manager,随便选一个右键——DUplicate

unity2D:角色下蹲移动_第1张图片

这样你就得到了一个复制版

 

我们修改这个复制的Jump,把他改成蹲下就可以

 unity2D:角色下蹲移动_第2张图片

 

代码实现——当按下下蹲键时下蹲

    void Crouch()
    {
        if(Input.GetButton("Crouch"))
        {
            Anim.SetBool("crouching",true);
            Anim.SetBool("idle",false);
        }else
        {
            Anim.SetBool("crouching",false);
            Anim.SetBool("idle",true);
        }
    }

if和else语句中是响应蹲下或站起的内容,可以根据自己需要写,我这里就是切换一下动画状态

另外要说一下,这里用到的是GetBotton而不是GetBottonDown

这个函数在update中调用(或者在update调用的函数中调用

下蹲穿过通道

很多游戏里面都有一些很窄的地形,需要下蹲穿过,这部分就是实现这个内容

“通过”实质上是Player身上的Collider大小可以通过

“不能通过”实质上是Player身上的Collider太大不足以通过

这就说明趴下和站着这两种状态下的Collider是不同的,本着任何状态下Player最好只有一个碰撞体的原则,我们就需要切换碰撞体,在哪里切换呢?就在上面那个函数里面就可以了

首先先给Player添加好两个碰撞体,我这里站立用胶囊,下蹲用了圆

(最好别用方形的,会卡在tilemap里,当然如果你不是用tile做的地形,随意)

unity2D:角色下蹲移动_第3张图片unity2D:角色下蹲移动_第4张图片

 说下我的思路,我在写代码的时候,所有的碰撞体都默认的是Coll,然后根据当前状态需要,决定这个Coll到底是StandColl还是CrouchColl

    public Collider2D StandColl;//player's colliderBox
    public Collider2D CrouchColl;
    private Collider2D Coll;//当前正在使用的Collider

状态切换主要在三个地方,首先是Start函数里面,默认Coll为站立coll

    void Start()
    {
        rb=GetComponent();
        Anim=GetComponent();
        Coll=StandColl;
        StandColl.enabled=true;
    }

然后是按下趴下键和松开的时候


    void Crouch()
    {
        if(Input.GetButton("Crouch"))
        {
            Anim.SetBool("crouching",true);
            Anim.SetBool("idle",false);

            //StandColl被禁用 CrouchColl被启用
            StandColl.enabled=false;
            Coll=CrouchColl;
            Coll.enabled=true;
        }else
        {
            Anim.SetBool("crouching",false);
            Anim.SetBool("idle",true);

            //StandColl被启用 CrouchColl被禁用
            CrouchColl.enabled=false;
            Coll=StandColl;
            Coll.enabled=true;
        }
    }

这样就可以了

在通过隧道的时候不可站立

当我们按下趴下键正在过隧道,此时你松开了,如果站起来了岂不是要卡墙里了,所以应该设置在通过隧道的时候不可以站立起来

实质为,判断头顶上是不是有碰撞体,有的话就不站起来,这里要用到Physics2D(用于 2D 物理的全局设置和 Helper 方法。)——Physics2D详情见官网Unity

要用到它的一个函数

OverLapCircle:Check If a Collider falls within a circle area ——检查碰撞体是否位于一个圆形区域内。圆形由其在世界空间中的中心坐标及其半径定义

函数原型如下(仅仅其中一个重载)

public static Collider2D OverlapCircle (Vector2 point, float radius, int layerMask= DefaultRaycastLayers, ); 中心点、半径、碰撞图层 

 首先我们设置一个Point,这里我用一个空的gameObject来定义位置

unity2D:角色下蹲移动_第5张图片

 然后代码中的函数即为Physics2D.OverlapCircle(CellingCheck.position,02f,Groud),意思是以CellingCheck为中心,0.2f为半径,检测是否碰到了Ground

这里CellingCheck的值就是Point节点

所以整个总结一下就是这样

public Transform CellingCheck;//将Point赋值给他


void Crouch()
    {
        if(!Physics2D.OverlapCircle(CellingCheck.position,02f,Groud))
        {
            if(Input.GetButton("Crouch"))
            {
                Anim.SetBool("crouching",true);
                Anim.SetBool("idle",false);

                //StandColl被禁用 CrouchColl被启用
                StandColl.enabled=false;
                Coll=CrouchColl;
                Coll.enabled=true;
            }else
            {
                Anim.SetBool("crouching",false);
                Anim.SetBool("idle",true);

                //StandColl被启用 CrouchColl被禁用
                CrouchColl.enabled=false;
                Coll=StandColl;
                Coll.enabled=true;
            }
        }
    }

 可以了,呼,好累

你可能感兴趣的:(unity2D)