在我们小时候玩过的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 updatevoid 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 framevoid 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时,平台的移动才不会受其他因素(力的作用)影响,有兴趣的小伙伴可以自己查阅资料进一步学习理解。

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

  1. 【Unity3d】使用插值函数Lerp实现自动升降平台

    Unity的插值函数允许我们计算位于两个给定点之间某处的值.其中的函数行为各不相同,适用于不同的情况,有关更多信息,可以查阅Unity中文文档(重要的类 - Mathf),下面我将介绍如何使用插值函数 ...

  2. 【Unity3d】 教会你如何做一个简单的电梯系统(升降平台)

    博主第一次写博客,语言略俗,有不足之处还请指正! 由于自己还处在unity小白阶段,受2d升降平台的影响(后续我也会上传关于2d升降平台的文章),突发奇想如何用3d做一个电梯系统,查阅网上资料后,发现 ...

  3. Micropython 如何用Turnipbit做一个自动浇水装置

    2019独角兽企业重金招聘Python工程师标准>>> 最近在研究Turnipbit这块板子,打算是连接一个摄像头模块,正在实验练习中,(祝自己早日弄好)上篇文章我们讲了用Turni ...

  4. 周杰伦演唱会总是抢不到票?教你用Python做一个自动抢票脚本!

    相信想去周董演唱会的大家都用过大麦网抢票吧? 可是 抢不到啊 该说不说 我抢到了 那么,今天带大家用Python来制作一个自动抢票的脚本小程序! 知识点: 面向对象编程 selenium 操作浏览器 ...

  5. 周杰伦演唱会总是抢不到票?教你用Python做一个自动抢票脚本

    相信想去周董演唱会的大家都用过大麦网抢票吧? 可是 抢不到啊 该说不说 我抢到了 那么,今天带大家用Python来制作一个自动抢票的脚本小程序! 知识点: 面向对象编程 selenium 操作浏览器 ...

  6. 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...

    软件开发手机app系统软件高端定制-做一个app软件要多少钱 APP开发分原生APP开发和在线制作,我们来看下这两种都需要多少费用吧. 1.原生APP开发(定制开发) 互联网是个神奇的大网,大数据开发 ...

  7. 如何做一个自动重复发消息的脚本

    我们可以使用vbs来写一个自动重复发消息的脚本,VBS是基于Visual Basic的脚本语言.VBS的全称是:Microsoft Visual Basic Script Edition.(微软公司可 ...

  8. 如何使用STM32开发板做一个自动感应垃圾桶

    目录 一.所用到的软件和硬件 二.硬件的用途 三.代码的编写和整理 主函数程序 中断处理程序函数 红外线感应到的处理函数 关门断电函数 四.后面的优化思路 一.所用到的软件和硬件 软件: 使用的KEI ...

  9. 深入浅出教你做一个快速开发平台

    快速开发平台,重点在于快,要快无非就是两种手段: 1.生成代码 2.重用模块 详细看如下的分支图 就第一种情况生成代码来说,是每个快速开发平台必备的,基本上所有的快速开发平台都能生成CRUD,从jsp ...

最新文章

  1. Javascript中的函数重载-最佳做法
  2. C++ 文件大小格式化
  3. 解决fixed在苹果手机抖动问题/头部底部固定布局
  4. Windows端5款MySQL客户端工具
  5. 生成token和获取token
  6. 文件服务器代码大全,文件服务器 代码
  7. 微型计算机的地址加法器,地址加法器
  8. 如何高效率的使用Google搜索
  9. 重复线性渐变repeating-linear-gradient
  10. EI收录的中国(中文)期刊(2022版)
  11. 【ACM】kuangbin基础数论专题
  12. 怎么用计算机计算年月份,win7计算器怎么计算某年某月某日到某年某 – 手机爱问...
  13. 微信开发者工具报错 系统错误,错误码-1,undefined 问题解决
  14. 构建之法读书笔记01
  15. XML操作类(Seaskyer)
  16. 知到网课大学生创业概论与实践考试试题|真题|题库(含答案)
  17. python爬取豆瓣租房信息
  18. “真太极”先生论太极拳录
  19. VS中sln和suo的区别
  20. aboboo 快捷键

热门文章

  1. 数据库原理与应用(一)数据库基础知识
  2. CompileFlow 基本组件--第二节
  3. 均线系统之详解 —— 第一讲
  4. 使用PE全新安装系统
  5. 生存感悟:只有偏执狂才能成功
  6. ffmpeg编译及使用
  7. C语言 乒乓球比赛问题
  8. linux清除碎片命令,Linux磁盘碎片快速清理工具Kleandisk (2)
  9. 当智能汽车变成一个超级计算机,传统车厂还有机会吗?
  10. 1190PHP,1190 RC8 R 最拉风的超级跑车就是它!