当前位置: 首页 > news >正文

unity学习64,第3个小游戏:一个2D跑酷游戏

目录

学习参考

素材资源导入

1 创建项目

1.1 创建1个2D项目

1.2 导入素材

2 背景图bg

2.0 bg素材

2.1 创建背景

2.2 修改素材,且修改摄像机等

2.2.1 修改导入的原始prefab素材

2.2.2  对应调整摄像机

2.2.3 弄好背景

2.3 背景相关脚本实现

2.3.1 错误例子解析

2.3.2 bg缓慢移动的代码

2.3.3 到边界后bg重复迭代移动的代码

3 地面ground

3.0 地面的素材

3.1 创建好地面

3.1.1 地图层级

3.1.2 给地面增加碰撞

3.1.3 拼好2个地面

3.2 地面ground移动的代码

4 地面修改

4.1 地图尺寸缩小

4.1.1 屏幕宽大约2.8

4.2 设计3个不同地面

4.3 地面也做成prefab,记得选原生的,脱离其他地面的影响

4.4 定义地面的数组,把3个prefab拖进去

4.5  对应脚本

4.6 重大BUG和解决

5 音效的 (这后面都没写完,下次继续搞把)


学习参考

Unity小白超神教程:2D跑酷_哔哩哔哩_bilibili关注一下视频中的公众号,就可以获取资源哈!, 视频播放量 31145、弹幕量 109、点赞数 508、投硬币枚数 333、收藏人数 1004、转发人数 212, 视频作者 Gamer飞羽, 作者简介 玩游戏、做游戏的up一枚,《新印象 Unity 2020游戏开发基础与实战》与《新印象:Unity游戏开发实例教程》作者。,相关视频:【Unity3D经典案例】--天天酷跑,无限场景怎么来的???原来这么简单粗暴,使用Unity制作无限跑酷游戏,Unity 2D 搞定<跑酷超级马里奥>,「福利」「中英字幕」Udemy - Unity休闲3D跑酷游戏制作,Cocos Creator零基础小白超神教程,Unity小白超神教程:气球大战,Unity跑酷游戏开发UI篇 —mvc框架的游戏实战教程_Untiy3d开发新手教程学习#知识分享官#,unity横版2D游戏零基础开发教程A,史上最全Unity3D教程https://www.bilibili.com/video/BV16t4y1z7xw?spm_id_from=333.788.videopod.sections&vd_source=5fa6d2958ae880d9550a17f8050fd5ed

素材资源导入

  • 想下载项目资源,结果需要用夸克,用了了,感觉比百度网盘还恶心
  • 彷佛看到当年360的样子,赶紧给卸载了
  • 直接用之前flappy bird的素材做这个跑酷吧

1 创建项目

1.1 创建1个2D项目

1.2 导入素材

虽然素材很不搭,反正瞎搞^ ^

2 背景图bg

2.0 bg素材

  • 这个bg图是378*537,竖版的,
  • 手机跑酷虽然竖版不少,但是这个可能横板的更好
  • 先这样吧,无所谓了,以后有素材的也好替换吧

2.1 创建背景

  • 用了一个竖版的分辨率 1080*1920
  • 然后把摄像机的size拉大,仍然不去调整素材本身的尺寸
  • 暂时看起来也没啥问题,先这样

2.2 修改素材,且修改摄像机等

2.2.1 修改导入的原始prefab素材

  • 突发奇想,之前觉得这个小鸟的素材bg,16pixels/1米 很奇葩
  • 然后我这强行给改了会怎么样
  • 果然图片在unity直接变小了好多!!
  • 我喜欢用标准的 100pixels/1米

2.2.2  对应调整摄像机

size只需要2.5倍差不多够了,之前都是16倍

2.2.3 弄好背景

  • 弄好2张图片,都是 bg
  • 图片横向378像素,因此x填入3.78即可, 手动改可弄不精确

2.3 背景相关脚本实现

2.3.1 错误例子解析

  • Transform.position不能直接当作变量使用
  • 必须先通过创建一个变量,获得其内容后,计算后中转,再赋值给Transform.position

如果这么写,会报错

trans1.position.x=trans1.position.x-2*bgSpeed1*Time.deltaTime;

Assets\Scripts\bgControl.cs(26,13): error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable

必须这么写

Vector2 v1=trans1.position;

v1.x=v1.x-2*bgSpeed1*Time.deltaTime;

trans1.position=v1;

2.3.2 bg缓慢移动的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class bgControl : MonoBehaviour
{public float bgWidth1;public float bgSpeed1=0.2f;//use this for initialization;void Start(){}//Update is called once per frame;void Update(){//需要遍历其下每个bg,都需要这样移动foreach(Transform trans1 in transform){//每个背景自动移动//向左边移动,x需要变小Vector2 v1=trans1.position;v1.x=v1.x-2*bgSpeed1*Time.deltaTime;trans1.position=v1;}}    
}

2.3.3 到边界后bg重复迭代移动的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class bgControl : MonoBehaviour
{public float bgWidth1;public float bgSpeed1=0.2f;//use this for initialization;void Start(){}//Update is called once per frame;void Update(){//需要遍历其下每个bg,都需要这样移动foreach(Transform trans1 in transform){//每个背景自动移动//向左边移动,x需要变小Vector2 v1=trans1.position;v1.x=v1.x-2*bgSpeed1*Time.deltaTime;trans1.position=v1;//背景更换位置//如果移动距离超过了宽度,再给加2个宽度,放到另外1个图后面if(v1.x<-bgWidth1){v1.x=v1.x+2*bgWidth1;trans1.position=v1;}}}    }

3 地面ground

3.0 地面的素材

  • 地面素材 800*392,横向的
  • 这个bg图是378*537,竖版的,
  • 导致地面比bg大一倍,有点不匹配啊。。。。
  • 管他呢,就当只有400用 ^ ^ 反正都张一个样,叠起来无所谓
  • 记得也把素材16比1 改成100比1

3.1 创建好地面

3.1.1 地图层级

  • 因为默认层级0
  • 所以bg -99
  • ground就-9吧
  • 这样新加的东西层级都会高于 bg和ground

3.1.2 给地面增加碰撞

3.1.3 拼好2个地面

  • 因为地面本身很大,只要注意下花纹
  • 重叠很大就行了,后面也需要按这个距离去更换地面

3.2 地面ground移动的代码

  • 为什么不用之前bg相同的代码
  • 因为地面有些代码内容会不同

  • 新建 groundControl ,内容可以拷贝 bgControl的
  • 但是要改一些变量名
  • 记得把外面的初始速度,地面宽度要改

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class groundControl : MonoBehaviour
{public float groundWidth1;public float groundSpeed1=1f;//use this for initialization;void Start(){}//Update is called once per frame;void Update(){//需要遍历其下每个,都需要这样移动foreach(Transform trans1 in transform){//每个自动移动//向左边移动,x需要变小Vector2 v1=trans1.position;v1.x=v1.x-2*groundSpeed1*Time.deltaTime;trans1.position=v1;//背景更换位置//如果移动距离超过了宽度,再给加2个宽度,放到另外1个图后面if(v1.x<-groundWidth1){v1.x=v1.x+2*groundWidth1;trans1.position=v1;}}}    }

4 地面修改

  • 跑酷的地图要有jump,地面不能无缝连接!而且需要是随机的!

4.1 地图尺寸缩小

  • 地图尺寸也缩小了
  • 比如关心X,原始800,这里0.3=240像素=2.4米

脚本的地面长度也修改为2.4

4.1.1 屏幕宽大约2.8

但是很显然我现在地面的宽度小于屏幕,因此

屏幕大概是3.5/3, 也就是地面2.4,屏幕宽2.8 所以2个地面移动出屏幕,实际得是2.8.否则地面会重叠

4.2 设计3个不同地面

  • 前面的需要修改
  • 新建3个ground
  • 每个地面设计不同的分数,我这直接拿小鸟缩小点当分数
  • 注意,因为小鸟分数是作为ground的子物体,前面ground缩放变小过,所以这里的小年分数,也做成prefab,然后统一把 birdScore 倍数搞大点

  • 至少设计3个地面
  • 每个地图设计不同的分数
  • ground1: 0
  • ground1: 3
  • ground1: 2

4.3 地面也做成prefab,记得选原生的,脱离其他地面的影响

方便后面修改


 

4.4 定义地面的数组,把3个prefab拖进去

    //定义一个需要随机生成的gb的数组

    public GameObject[] GroundPrefabs;

4.5  对应脚本

  • 可以实现
  • 随机地面的高度不同
  • 随机地面的 缺口不一样长
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class groundControl : MonoBehaviour
{public float groundWidth1;public float groundSpeed1=1f;//定义一个需要随机生成的gb的数组public GameObject[] GroundPrefabs;//use this for initialization;void Start(){}//Update is called once per frame;void Update(){//需要遍历其下每个,都需要这样移动foreach(Transform trans1 in transform){//每个自动移动//向左边移动,x需要变小Vector2 v1=trans1.position;v1.x=v1.x-2*groundSpeed1*Time.deltaTime;trans1.position=v1;if(v1.x<-groundWidth1){//创建新地面newTrans//,transform)这是是设置为当前gB的子物体Transform newTrans=Instantiate(GroundPrefabs[Random.Range(0,GroundPrefabs.Length)],transform).transform;//获得新地面位置Vector2 v2= newTrans.position;//修改新地面位置//为了避免2个地面叠一起,因此这个宽度只能加不能减小,或者减小很小v2.x=v1.x+groundWidth1*3.5f/3f*2f+Random.Range(0,0.3f);v2.y=v1.y+Random.Range(-0.4f,0.6f);//赋值,更新位置newTrans.position=v2;//销毁出了屏幕的老地面trans1Destroy(trans1.gameObject);}}}    }

4.6 重大BUG和解决

就是地面高度,会读之前的那个,然后可能越随越高,越随越低啊

修改一句代码就可以

                v2.y=v1.y+Random.Range(-0.4f,0.6f);

修改为

                v2.y=v2.y+Random.Range(-0.4f,0.6f);

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class groundControl : MonoBehaviour
{public float groundWidth1;public float groundSpeed1=1f;//定义一个需要随机生成的gb的数组public GameObject[] GroundPrefabs;//use this for initialization;void Start(){}//Update is called once per frame;void Update(){//需要遍历其下每个,都需要这样移动foreach(Transform trans1 in transform){//每个自动移动//向左边移动,x需要变小Vector2 v1=trans1.position;v1.x=v1.x-2*groundSpeed1*Time.deltaTime;trans1.position=v1;if(v1.x<-groundWidth1){//创建新地面newTrans//,transform)这是是设置为当前gB的子物体Transform newTrans=Instantiate(GroundPrefabs[Random.Range(0,GroundPrefabs.Length)],transform).transform;//获得新地面位置Vector2 v2= newTrans.position;//修改新地面位置//为了避免2个地面叠一起,因此这个宽度只能加不能减小,或者减小很小v2.x=v1.x+groundWidth1*3.5f/3f*2f+Random.Range(0,0.3f);v2.y=v2.y+Random.Range(-0.4f,0.6f);//赋值,更新位置newTrans.position=v2;//销毁出了屏幕的老地面trans1Destroy(trans1.gameObject);}}}    }

5 音效的 (这后面都没写完,下次继续搞把)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AudioControl : MonoBehaviour
{//单例public static AudioControl Instance;//播放组件private AudioSource player;//use this for initialization;void Start(){//自己创建类的唯一单例Instance=this;//获得播放组件player=GetComponent<AudioSource>();//这里可以搞背景音乐}//Update is called once per frame;void Update(){}    public void play(string name){//通过名称获取音频clipname="sfx_point";AudioClip clip=Resources.Load<AudioClip>(name);//播放player.PlayOneShot(clip);}}

相关文章:

unity学习64,第3个小游戏:一个2D跑酷游戏

目录 学习参考 素材资源导入 1 创建项目 1.1 创建1个2D项目 1.2 导入素材 2 背景图bg 2.0 bg素材 2.1 创建背景 2.2 修改素材&#xff0c;且修改摄像机等 2.2.1 修改导入的原始prefab素材 2.2.2 对应调整摄像机 2.2.3 弄好背景 2.3 背景相关脚本实现 2.3.1 错误…...

rom定制系列------小米note3 原生安卓15 批量线刷 默认开启usb功能选项 插电自启等

小米Note 3搭载骁龙660处理器&#xff0c;1200万像素广角镜头、俗称大号版的小米6&#xff0c;官方最终版为12.0.1稳定版安卓9的固件。客户需要运行在安卓15的rom。根据原生官网的rom修改一些功能选项。以便客户操作需求。 定制资源说明 根据客户需求采用安卓15原生系统为底包…...

基于开源 AI 大模型、AI 智能名片及 S2B2C 商城小程序源码的个人 IP 用户运营策略研究

摘要&#xff1a;本文深入剖析了个人 IP 运营领域中用户运营的核心地位与关键作用&#xff0c;详细阐述了以拉新、留存和促活为主要方式的用户运营策略&#xff0c;旨在实现对用户的有效管理和用户价值的全面提升&#xff0c;进而延长用户生命周期&#xff0c;推动用户向消费者…...

什么是:马尔可夫博弈

什么是:马尔可夫博弈 马尔可夫博弈(Markov Game),也被称为随机博弈(Stochastic Game),是马尔可夫决策过程(MDP)在多智能体环境下的扩展。它描述了多个智能体在一个环境中相互作用的动态过程,每个智能体的决策不仅取决于当前环境状态,还会影响其他智能体的决策以及环…...

【探商宝】大数据企业销售线索平台:销售型公司的战略转型引擎

一、市场现状与销售型公司的核心痛点 在数字经济高速发展的2025年&#xff0c;全球企业获客成本较五年前增长超过300%&#xff0c;而B2B销售线索的平均转化率仍徘徊在15%-20%之间。这一矛盾背后&#xff0c;折射出传统销售模式的三重困境&#xff1a; ​数据孤岛导致决策滞后…...

用Ruby的Faraday库来进行网络请求抓取数据

在 Ruby 中&#xff0c;Faraday 是一个非常强大的 HTTP 客户端库&#xff0c;它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据&#xff0c;处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求&#xff0c;抓取数据并处理响应。 1.…...

Ubuntu的软件源

百度搜索 ubuntu清华镜像源 根据下面的网页&#xff0c;选择对应Ubuntu操作系统的源&#xff0c;一定要对应&#xff01;&#xff01;&#xff01; https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/上图的系统是16.04 xenial&#xff0c;这时就一定要使用16.04 xenial的源 …...

笔记五:C语言编译链接

Faye&#xff1a;孤独让我们与我们所爱的人相处的每个瞬间都无比珍贵&#xff0c;让我们的回忆价值千金。它还驱使你去寻找那些你在我身边找不到的东西。 ---------《寻找天堂》 目录 一、编译和链接的介绍 1.1 程序的翻译环境和执行环境 1.1.1 翻译环境 1.1.2 运行环境 …...

GitCode 助力 vue3-element-admin:开启中后台管理前端开发新征程

源码仓库&#xff1a; https://gitcode.com/youlai/vue3-element-admin 后端仓库&#xff1a; https://gitcode.com/youlai/youlai-boot 开源助力&#xff0c;开启中后台快速开发之旅 vue3-element-admin 是一款精心打造的免费开源中后台管理前端模板&#xff0c;它紧密贴合…...

SyntaxError: Invalid regular expression flag “x“

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

HiveServer2与Spark ThriftServer详细介绍对比

HiveServer2与Spark ThriftServer详细介绍对比 1、概述 1.1 HiveServer2 是 Apache Hive 提供的基于 Thrift 的服务进程&#xff0c;用于让远程客户端执行 Hive SQL 查询 ([一起了解一下HiveServer2 - zourui4271 - 博客园]。它是早期 HiveServer1 的改进版本&#xff0c;引入…...

ESP32S3N16R8驱动ST7701S屏幕(vscode+PlatfoemIO)

1.开发板配置 本人开发板使用ESP32S3-wroom1-n16r8最小系统板 由于基于vscode与PlatformIO框架开发&#xff0c;无espidf框架&#xff0c;因此无法直接烧录程序&#xff0c;配置开发板参数如下&#xff1a; 在platformio.ini文件中&#xff0c;配置使用esp32-s3-devkitc-1开发…...

软考初级程序员知识点汇总

以下是计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称“软考”&#xff09;中 程序员&#xff08;初级&#xff09; 考试的核心知识点汇总&#xff0c;涵盖考试大纲的主要方向&#xff0c;帮助你系统复习&#xff1a; 一、计算机基础 计算机组…...

亲测解决笔记本触摸板使用不了Touchpad not working

这个问题可以通过FnFxx来解决&#xff0c;笔记本键盘上Fxx会有一个触摸板图标。如果不行应该玉藻设置中关了&#xff0c;打开即可。 解决办法 在蓝牙&#xff0c;触摸板里打开即可。 Turn it on in settings。...

13.数据结构(软考)

13.数据结构&#xff08;软考&#xff09; 13.1:线性表 13.1.1 顺序表 顺序存储方式:数组的内存是连续分配的并且是静态分配的&#xff0c;即在使用数组之前需要分配固定大小的空间。 时间复杂度&#xff1a; 读&#xff1a;O(1) 查询&#xff1a;1&#xff0c;(n1)/2&#x…...

开发环境搭建-完善登录功能

一.完善登录功能 我们修改密码为md5中的格式&#xff0c;那么就需要修改数据库中的密码和将从前端获取到的密码转化成md5格式&#xff0c;然后进行比对。比对成功则登录成功&#xff0c;失败则禁止登录。 二.md5格式 使用DigestUtils工具类进行md5加密&#xff0c;调用md4Dig…...

HAL库,配置adc基本流程

1. 初始化阶段---cubemx (1) GPIO初始化 函数&#xff1a;HAL_GPIO_Init() 作用&#xff1a;配置ADC引脚为模拟输入模式。 代码示例&#xff1a; // 使能GPIOA时钟 __HAL_RCC_GPIOA_CLK_ENABLE();// 配置PA1为模拟输入 GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStr…...

DeepSeek爆火催生培训热潮,是机遇还是陷阱?

DeepSeek 掀起的学习风暴 最近&#xff0c;DeepSeek 以迅猛之势闯入大众视野&#xff0c;在国内引发了一场学习狂潮。它的出现&#xff0c;就像是在平静的湖面投入了一颗巨石&#xff0c;激起层层涟漪。 在各大社交平台上&#xff0c;与 DeepSeek 相关的话题讨论热度居高不下&…...

Apache Httpd 多后缀解析

目录 1.原因 2.环境 3.复现 4.防御 1.Apache Httpd 多后缀解析原因 Apache HTTP Server 在处理文件请求时&#xff0c;通常会根据文件的后缀来确定如何处理该文件。例如&#xff0c;.php文件会被交给 PHP 解释器处理&#xff0c;而.html文件则直接作为静态文件返回。 然而…...

备赛蓝桥杯之第十五届职业院校组省赛第五题:悠然画境

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules

定义在 objs\ngx_modules.c #include <ngx_config.h> #include <ngx_core.h>extern ngx_module_t ngx_core_module; extern ngx_module_t ngx_errlog_module; extern ngx_module_t ngx_conf_module; extern ngx_module_t ngx_openssl_module; extern ngx_modul…...

css错峰布局/瀑布流样式(类似于快手样式)

当样式一侧比较高的时候会自动换行&#xff0c;尽量保持高度大概一致&#xff0c; 例&#xff1a; 一侧元素为5&#xff0c;另一侧元素为6 当为5的一侧过于高的时候&#xff0c;可能会变为4/7分部dom节点 如果不需要这样的话删除样式 flex-flow:column wrap; 设置父级dom样…...

【并发编程】聊聊定时任务ScheduledThreadPool的实现原理和源码解析

ScheduledThreadPoolExecutor 是在线程池的基础上 拓展的定时功能的线程池&#xff0c;主要有四种方式&#xff0c;具体可以看代码&#xff0c; 这里主要描述下 scheduleAtFixedRate &#xff1a; 除了第一次执行的时间&#xff0c;后面任务执行的时间 为 time MAX(任务执行时…...

【虚拟化】Docker Desktop 架构简介

在阅读前您需要了解 docker 架构&#xff1a;Docker architecture WSL 技术&#xff1a;什么是 WSL 2 1.Hyper-V backend 我们知道&#xff0c;Docker Desktop 最开始的架构的后端是采用的 Hyper-V。 Docker daemon (dockerd) 运行在一个 Linux distro (LinuxKit build) 中&…...

DeepSeek 医疗大模型微调实战讨论版(第一部分)

DeepSeek医疗大模型微调实战指南第一部分 DeepSeek 作为一款具有独特优势的大模型,在医疗领域展现出了巨大的应用潜力。它采用了先进的混合专家架构(MoE),能够根据输入数据的特性选择性激活部分专家,避免了不必要的计算,极大地提高了计算效率和模型精度 。这种架构使得 …...

c++实现最大公因数和最小公倍数

最大公因数和最小公倍数的介绍 读这篇文章&#xff0c;请你先对最大公因数以及最小公倍数进行了解&#xff1a; 最大公因数&#xff08;英文名&#xff1a;gcd&#xff09; 定义&#xff1a;最大公因数&#xff0c;也称最大公约数&#xff0c;指两个或多个整数共有约数&…...

知识库Dify和cherry无法解析影印pdf word解决方案

近期收到大量读者反馈&#xff1a;上传pdf/图文PDF到Dify、Cherry Studio等知识库时&#xff0c;普遍存在格式错乱、图片丢失、表格失效三大痛点。 在试用的几款知识库中除了ragflow具备图片解析的能力外&#xff0c;其他的都只能解析文本。 如果想要解析扫描件&#xff0c…...

【记录一下学习】Embedding 与向量数据库

一、向量数据库 向量数据库&#xff08;Vector Database&#xff09;&#xff0c;也叫矢量数据库&#xff0c;主要用来存储和处理向量数据。 在数学中&#xff0c;向量是有大小和方向的量&#xff0c;可以使用带箭头的线段表示&#xff0c;箭头指向即为向量的方向&#xff0c…...

【第21节】C++设计模式(行为模式)-Chain of Responsibility(责任链)模式

一、问题背景 在 VC/MFC 开发中&#xff0c;消息处理机制是核心部分之一。VC 是基于消息和事件驱动的框架&#xff0c;消息的处理流程通常是通过链式传递的方式进行的。例如&#xff0c;一个 WM_COMMAND 消息的处理流程可能如下&#xff1a; &#xff08;1&#xff09;MDI 主窗…...

createrepo centos通过nginx搭建本地源

yum update 先安装一个nginx。 安装Nginx yum install gcc gcc-c pcre pcre-devel openssl openssl-devel libtool zlib zlib-devel -y cd /usr/local/src wget http://nginx.org/download/nginx-1.22.0.tar.gz tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0 ./configu…...