跳跃系统

按空格让玩家跳跃起来
**原理:将刚体y的速度等于跳跃的速度 **
在C#Move脚本里添加代码

(1)先设置跳跃的速度

    public float jumpVelocity = 10;//跳跃的速度

(2)让玩家跳起来 将刚体y的速度设置成跳跃的速度即可

velocity.y = jumpVelocity;
rgd.velocity = velocity;

(3)设置if语句 判定玩家按下了空格键

  			 if (Input.GetKeyDown(KeyCode.Space))//如果输入了空格键
            {
                velocity.y = jumpVelocity;// 将刚体y的速度等于跳跃的速度 
                rgd.velocity = velocity;
            }

至此,保存进入游戏 你会发现玩家可以跳跃了2D横版跳跃游戏第二节
但是会发现玩家可以无限跳跃 为了游戏的平衡性和合理性 要让玩家到达地面上才可以跳跃
先给地面添加Ground1的标签
然后我们重新回到脚本中设置代码
(1)设置一个布尔值 来判断玩家是否在地面上

public bool isGround = false;//表示它是否在地面上

(2)有了布尔值 就要建立函数来改变它的状态

    //判断是否碰到地面,碰到就开启,没碰到就关闭  
    public void OnCollisionEnter2D(Collision2D col)//设置参数
    {
        if(col.collider.tag=="Ground1")
        {
            isGround = true;
         }
     }
         public void OnCollisionExit2D(Collision2D col)
    {
        if (col.collider.tag == "Ground1")
        {
            isGround = false;
        }
   }

注意这里有两个函数 一个是Enter 一个是Exit 就是碰到和离开的意思
(3)状态设置好了 就来重新更改if的条件

			if (isGround && Input.GetKeyDown(KeyCode.Space))//如果在地面上并且输入了空格键
            {
                velocity.y = jumpVelocity;
                rgd.velocity = velocity;
            }

至此保存游戏 进入游戏就可以发现 只有在碰到地面时才能跳跃

但是会发现因为重力的原因会导致下降很慢
所以要增高rigidbody2D 的Gravity Scale的值
2D横版跳跃游戏第二节
Gravity Scale增高也会使移动变慢
将摩擦力(Friction)调为0

滑行系统

与跳跃系统类似
2D横版跳跃游戏第二节
原理:碰到墙上时降低速度
先添加墙(Wall)的标签
与跳跃的判断方式一样
我们回到脚本里添加代码
(1)设置布尔值 来判断玩家是否在墙面上

public bool isWall = false;//是否在墙上

(2)给OnCollisionEnter2D函数添加新的代码

    public void OnCollisionEnter2D(Collision2D col)//设置参数
    {
        if(col.collider.tag=="Ground1")
        {
            isGround = true;
            rgd.gravityScale = 2;
        }
        if (col.collider.tag == "Wall1")//如果碰到墙面时
        {
            isWall = true;//状态打开
            rgd.velocity = Vector2.zero;//速度等于0
            rgd.gravityScale = 1;//下降重力降低 让玩家减速下降
            wallTrans = col.collider.transform;//保存,记录这个墙的坐标
        }
        public void OnCollisionExit2D(Collision2D col)
    {
        if (col.collider.tag == "Ground1")
        {
            isGround = false;
        }
        if (col.collider.tag == "Wall1")
        {
            isWall = false;//关闭这个状态
            rgd.gravityScale = 2;//将下降重力调回原速
        }

至此就完成了 但是需要动画才能体现效果
所以我们要开始添加动画系统

动画系统2

先在变量这里添加布尔值 用来判断是否碰到墙壁与地面
2D横版跳跃游戏第二节
要让这个状态能跟随脚本里的状态 需要在脚本里添加代码

private Animator anim;//获取动画组件
private void Awake()
    {
        anim = this.GetComponent<Animator>();
    }
       public void OnCollisionEnter2D(Collision2D col)
    {
        anim.SetBool("isGround", isGround);//让unity里的isGround的bool跟随这脚本里的isGround
        anim.SetBool("isWall", isWall);
    }
     public void OnCollisionExit2D(Collision2D col)
    {
        anim.SetBool("isGround", isGround);
        anim.SetBool("isWall", isWall);
    }
    

这样状态就能实时跟随了

然后依据着这些变量 给每个状态添加判断值 来让它自动转换动画
2D横版跳跃游戏第二节

滑行时调整正确朝向

设置好了滑行的动画状态 我们跳跃到墙上的时候会发现这种情况
2D横版跳跃游戏第二节
这是因为 我们没有调碰到墙壁时的朝向
在脚本里添加函数

 public void ChangeDir()
    {
        isSlide = true;
        if (wallTrans.position.x < transform.position.x)//如果碰到墙的x坐标小于玩家的x坐标,就说明墙在左边
        {
            transform.localScale = new Vector3(1, 1, 1);//玩家朝向右
        }
        else
        {
            transform.localScale = new Vector3(-1, 1, 1);//朝向左
        }
    }

添加完以后就完成了

相机跟随

原理:建立一个目标跟随他的X值
新建一个脚本
(1)建立一个目标 用来跟随

public Transform target;

(2)得到当前坐标

Vector3 pos = transform.position;

(3) 因为我们是横向移动视角的,所以只跟随x值就好了

pos.x = target.position.x;

(4)把值复制给我们的transfrom.position

transform.position = pos;

将这些代码放入到脚本中 ctrl+s保存后 将脚本放入到main camera
再在main camear的面板中Target的目标选player
因为我们在脚本中新建了一个目标 transfrom可以延伸到unity界面选取目标
选好后再启动游戏会发现视角跟着玩家移动了

相关文章: