【unity2d】教会你如何做一个自动升降平台

       在我们小时候玩过的2d游戏中,比如超级玛丽、魂斗罗等等,地图中都常常会有升降平台的出现,话不多说,以下为博主实现自动升降平台的过程:

        第一步,新建Tilemap(如下图,素材可在Unity Asset Store中搜索Sunnyland,导入即可),并搭建一个平台,(Inspector)检视面板Layer设置为Ground(即地面,根据自己项目设置进行调整),给平台添加Tilemap Collider 2D 以及 Rigidbody 2D,设置Body Type为Kinematic(文末我会介绍),并锁定X轴和Z轴,注意如果你添加的是Box Collider 2D,需要编辑其碰撞体范围,Tilemap Colider 2D很好的解决了这个问题。

        第二步,在平台子层级新建两个空物体(分别命名为top,bottom),为方便观察,可以在空物体检视面板设置颜色标记(如下图),接着移动两个空物体,分别置于平台的正上方和正下方,距离自由设置,这样我们需要的环境就搭建好了。

      第三步,给平台贴代码,新建C#文件,命名为PlatformController,博主的思路是获取top、bottom两点(临界点),判断平台的状态是向上移动还是向下移动,默认向上速度为Speed,当平台向下移动时,速度为-Speed,当然这只是一种实现方法,博主将在下篇文章以3d自动升降平台为例用另一种方法实现,有兴趣的小伙伴欢迎查阅,PlatformController.cs代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlatformController : MonoBehaviour
{
    private Rigidbody2D rb;
    private Collider2D coll;
    public Transform top, bottom;
    public float Speed;
    public float TopY, BottomY;
    private bool isUp = true;
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        coll = GetComponent<Collider2D>();
        TopY = top.position.y;//获取top点
        BottomY = bottom.position.y;//获取bottom点
        Destroy(top.gameObject);
        Destroy(bottom.gameObject);
        /*破坏top和bottom物体,使运行后层级面板更美观*/
    }

    // Update is called once per frame
    void Update()
    {
        Movement();
    }
    void Movement()
    {
        if (isUp)
        {
            rb.velocity = new Vector2(rb.velocity.x, Speed);
            if (transform.position.y >= TopY)
            {
                isUp = false;
            }
        }
        else
        {
            rb.velocity = new Vector2(rb.velocity.x, -Speed);
            if (transform.position.y <= BottomY)
            {
                isUp = true;
            }
        }
    }
}

       运行之前别忘了在检视面板Script中获取Top和Bottom,设置速度哦!

Body Type的属性有三种:

  • Dynamic(动态,默认)
  • Kinematic(运动学)
  • Static(静态)

       对于为什么要改变Body Type,你可以试试先设置为Dynamic,当你跳起落到平台,细心观察,你会发现,平台受到了角色落下的冲击力而向下移动了一段距离,当我们设置为Static,平台是不会受代码控制而移动的,只有设置为Kinematic时,平台的移动才不会受其他因素(力的作用)影响,有兴趣的小伙伴可以自己查阅资料进一步学习理解。

猜你喜欢

转载自blog.csdn.net/m0_51942776/article/details/127603535
今日推荐