文章目录

  • 前言
  • 1.贴图准备
  • 跳板的逻辑
  • 人物的逻辑
  • 相机的逻辑
  • 如何自动生成跳板
  • 如何赢得游戏

前言

  • 这个只是练手的一个2D小游戏,不许商用哦
  • 完成了原版的一个关卡的内容,跳板也只有一种,但是如果需要的话可以往深了做的
  • 项目地址+Demo试玩(win64的exe在Client文件夹中)

1.贴图准备

  • 使用到的工具是ps,切一个板,切一个主人公,再找一个背景墙,这样材料就准备齐全了~

跳板的逻辑

  • 将跳板放入场景中后,因为涉及到了碰撞,因此给一个碰撞体组件

  • 之后有个细节,就是如果任务触碰到板子的下方,是不会算作踩到跳板获得向上的速度的!这个需求可以从两方面来实现(一个就是当角色下落的时候才判断碰撞回调;二就是使用到下面这个Platform Effector 2D啦)注意需要在collider中的use by effector打钩

  • 最后再给板子一个tag,用来判断碰撞,这样就可以将板子作为预制件,然后拖走啦 ~

人物的逻辑

  • 首先人物会受到重力作用,因此加入Rigibody2D组件,并给其一个重力规模
  • 需要计算碰撞,因此给一个碰撞体!记得把Is Trigger勾上,不√的话,我们用不了碰撞回调的OnTriggerEnter2D方法,因为角色会停在板子上,不会进入!
  • 下面我们给角色一个控制的脚本
  • 下面这个脚本的功能,有查看左右的越界(当左边越界的时候,角色会从右边出来,看起来左右地图不会出界,是联通的)
  • 当角色触碰到板子上的时候会得到一个向上的速度
  • 角色受到方向键的控制(细节:角色的朝向也会受到向左向右的影响)
public class Player : MonoBehaviour
{public Rigidbody2D rb;public float sensitive = 10f;private void Update(){PlayerController();//查看越界checkOverEdge();}private void checkOverEdge(){if (transform.position.x < -6f){transform.position = new Vector2(6f, transform.position.y);}if (transform.position.x > 6f){transform.position = new Vector2(-6f, transform.position.y);}}private void OnTriggerEnter2D(Collider2D col){//下落的时候才计算碰撞。不然角色只要碰到东西就会往上飞if (rb.velocity.y <= 0){if (col.CompareTag("board")){rb.velocity = new Vector2(0f, 10f);}}if (col.CompareTag("win")){SceneManager.LoadScene("Win");}}private void PlayerController(){float horizontalAxis = 0;horizontalAxis = Input.GetAxis("Horizontal");if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)){transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));}if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)){transform.rotation = Quaternion.Euler(new Vector3(0, 180, 0));}rb.velocity = new Vector2(horizontalAxis * sensitive, rb.velocity.y);}

相机的逻辑

  • 相机的话就跟上一个小球跳圈的游戏是一样的道理,如果角色y大于相机y,那么相机跟着向上走
  • 角色如果一下子跌落(与相机的y轴相差一定的大小,记作失败,重新加载游戏场景),游戏回到起点~
public class PlayerFollow : MonoBehaviour
{public Transform PlayerTransform;private Vector3 currentVelocity;public Rigidbody2D playerRigidbody2D;private void LateUpdate(){if (PlayerTransform.position.y >= transform.position.y){Vector3 tmpv = new Vector3(transform.position.x, PlayerTransform.position.y, transform.position.z);transform.position =Vector3.SmoothDamp(transform.position, tmpv, ref currentVelocity, .3f * Time.deltaTime);}//掉入谷底,回到原点if (PlayerTransform.position.y < transform.position.y - 3f){SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);}}
}

如何自动生成跳板

  • 在场景中,专门有个空物体是用来自动生成板子的。就是个空物体,放在原点就好,方便地图生成。

  • 这里生成地图的逻辑是在游戏开始的时候,在Start的时候就将本关卡所有的板子位置生成好了

  • 在下面脚本中,按照一定的高度差,和一定的水平差随机生成numberOfPlatforms-1数量的板子,并在最后一次生成一个win point(在游戏中就是一面红旗,触碰到了算胜利!)

  • 游戏中的板子水平距离不能太宽,不然跳不过去,因此这里写个while循环,如果生成过宽,则重新生成。

public class LevelGenerator : MonoBehaviour
{public GameObject platformPrefab;public int numberOfPlatforms;public GameObject winPointPrefab;public float levelWidth = 3f;public float minY = .2f;public float maxY = 1.8f;private float lastx;private void Start(){Vector3 spawnPosition = new Vector3();for (int i = 0; i < numberOfPlatforms; i++){spawnPosition.y += Random.Range(minY, maxY);float tmpx = Random.Range(-levelWidth, levelWidth);while (Math.Abs(tmpx - lastx) > 4f){tmpx = Random.Range(-levelWidth, levelWidth);}lastx = tmpx;spawnPosition.x = tmpx;if (i == numberOfPlatforms - 1){//生成win pointInstantiate(winPointPrefab, spawnPosition, Quaternion.identity);}else{Instantiate(platformPrefab, spawnPosition, Quaternion.identity);}}}
}

如何赢得游戏

  • 做一个标志物(这里用的是红旗),给其一个tag,作为预制体,被自动生成
  • 当角色触碰到后,加载win场景~

  • 这样好玩又解压的Demo就大功告成啦!具体可以查看工程代码~

【unity】分享一个2D小游戏的完整制作教程——涂鸦跳跃demo相关推荐

  1. 【unity】分享一个2D小游戏的完整制作教程——小球跳圈

    文章目录 前言 1.准备游戏材质 2.进入编辑器,处理四色环的逻辑 3.玩家控制小球逻辑 4.关于摄像机部分 前言 看到了个不错的unity3D游戏教程,于是记录一下 这是工程地址+游戏Demo 1. ...

  2. 一个2d小游戏c++

    #include<iostream> #include<windows.h> using namespace std; string fk[41][41]; string ba ...

  3. Unity中FPS类小游戏的简单制作

    1.摄像机放Player上,射线机代码 using UnityEngine; using System.Collections;public class Camera : MonoBehaviour ...

  4. 大家都在发圣诞树,我偏偏要发一个圣诞小游戏给大家玩【内附源码】

    ​大家好,我是辣条. 前言 圣诞节快来了,热榜都被一堆圣诞树攻占了,这样的流量密码我怎么会错过,大家都发圣诞树,我就不发啦,直接分享一个圣诞小游戏给大家玩,代码太长一定要先赞和收藏. 领取福利 300 ...

  5. 【phaser】快速实现HTML5 2D小游戏

    原文链接 前言 最近忙着看项目和写项目,在 github 上无意中发现了别人用 phaser 实现的2d小游戏,代码简单易懂,而且phaser框架本身就是非常的简单,非常适合想快速开发小游戏的开发者. ...

  6. 基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@[M_Studio]的教学视频

    基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@M_Studio的教学视频) 主要内容:在Sunnyland游戏的设计基础上,新增了物理组件Joint系列.DrawGi ...

  7. 「Unity2D」使用Unity创建一个2D游戏系列-1

    「Unity2D」使用Unity创建一个2D游戏系列-1 安装unity并且创建你的第一个场景 在第一章,你将会学习到一些非常基本的内容:首先是unity的下载和安装,其次是准备创建我们游戏内的第一个 ...

  8. Unity 之 转微信小游戏本地数据存储方法分享

    Unity 之 转微信小游戏本地数据存储 问题背景 微信小游戏读写本地文件 WebGL平台的一些限制 报错查看方法分享 问题背景 近期在将Unity转换为小游戏的时候发现在读写本地文件的时候,使用Ap ...

  9. 学习用C#在Unity中创建一个2D Metroidvania游戏

    学习用C#在Unity中创建一个2D Metroidvania游戏 你会学到: 构建2D Unity游戏 用C#编程 玩家统计,水平提升,米尔和远程攻击 敌方人工智能系统 制定级别和级别选择 Lear ...

最新文章

  1. Transformer在CV领域有可能替代CNN吗?还有哪些应用前景?
  2. 对于python来说、一个模块就是一个文件-PYTHON中的包和模块
  3. 总线制和多线制示意图_再谈总线制与多线制的区别
  4. [深度学习] DeepFM 介绍与Pytorch代码解释
  5. SQL Server代理(11/12):维护计划作业
  6. java 圆的交点_java – 获取线条和形状的交点
  7. Hibernate的数据删除,更改
  8. RocketMQ入门到入土(六)发消息的时候选择queue的算法有哪些?
  9. 基于postman的api自动化测试实践
  10. Python socket – network programming tutorial
  11. 微信模拟器不显示鼠标解决办法
  12. 好好编程-物流项目01【搭建maven工程】
  13. 人工智能数学基础8:两个重要极限及夹逼定理
  14. python倒计时器-带图像
  15. Workgroup 协议
  16. iVMS-4200 Vs区别_菲尔·杰克逊揭示了迈克尔·乔丹和科比·布莱恩特之间的关键区别...
  17. 终生学习者,永远劳苦命!
  18. 机器人学笔记(01):1.绪论
  19. 文件系统区别ntfs ext fat、mbr guid
  20. elementPlus el-dialog 自适应

热门文章

  1. 如何从Linux下载一个文件到本地
  2. [T-ARA][남주긴 아까워][给别人可惜了]
  3. MSVS2008和VS2010的痛苦加装
  4. 把php放入火车头采集,火车头采集文章并导入帝国CMS
  5. Android中禁止WebView滑动
  6. BIGO | imo实时语音传输优化揭秘
  7. 【安徽大学】考研初试复试资料分享
  8. 【黑帽大牛】浅谈SEO快排系统对网站排名优化真的有帮助吗?【精品】
  9. 春天,盐城北大青鸟学子收获成长的季节
  10. win10下node.js升级