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

unity学习62,尝试做一个flappy bird

目录

学习参考

1 创建1个unity 2D项目

1.1 2D项目模板选择

1.1.1 2D(built-in-Render pipeline)

1.1.2  universe 2D

1.1.3 这次选择  2D(built-in-Render pipeline)

1.2 创建项目

1.2.1 注意点

1.2.2 如果想修改项目名

2 导入美术资源包

2.1 下载一个flappy bird的资源包

2.2 导入资源包

2.3 记得把UNITY视图修改为经典的2*3模式

2.4 先把界面整理成熟悉的2*3,然后开始整

2.5 还要把项目 设置修改为安卓,因为是手机游戏

3 开始整:基础调整准备

3.1 先新建1个 288*512的屏幕分辨率

3.2 图片UI素材太大的问题

3.3 修改摄像机size,而不是素材尺寸

4 地图背景bg

4.1 创建第2个bg,复制即可

4.2 更科学的修改方法

4.3 尝试间接计算bg的像素大小

​编辑

4.4 关于3D和2D的最标准,新手要记住

4.5 创建1个空物体bg

5 创建地图背景bg脚本

5.1 脚本文件夹

5.2 给bg空物体挂一个脚本,实现bg自动滚动

5.3 脚本内容

5.4 把bg的 order in layer修改为很小的数,放在最底层,避免遮挡前面的内容

6 地面 ground

6.1 修改地面ground的配置

6.2  共用bg的脚本,只修改公共变量

6.3 记得营造视觉差效果

6.4 给地面增加碰撞

7 管子pipe

7.1 新建空物体和up down的pipe

7.2 调整layer的order, 让ground 显示在的pipe上层

7.3 给pipe增加碰撞

7.4 给空的父物体,增加一个 collider 2D, 并修改为触发器

8 小鸟bird

8.1 创建小鸟动画

8.2 给小鸟增加碰撞 和刚体,控制小鸟往下掉

8.3 脚本控制小鸟向上飞

9 控制小鸟的头的朝向

9.1 注意unity里的欧拉角

9.2 修改脚本


学习参考

Unity小白超神系列教程:Flappy Bird_哔哩哔哩_bilibili素材加公众号免费下载, 视频播放量 16589、弹幕量 19、点赞数 221、投硬币枚数 129、收藏人数 549、转发人数 135, 视频作者 Gamer飞羽, 作者简介 玩游戏、做游戏的up一枚,《新印象 Unity 2020游戏开发基础与实战》与《新印象:Unity游戏开发实例教程》作者。,相关视频:Unity制作飞扬的小鸟小游戏视频教程,【Unity 游戏开发教程】一小时制作一款小游戏 - 03. 愤怒的小鸟,Unity小游戏【吃豆人】-自己做的游戏作业,简单易懂,一小时使用Unity制作一个2D小游戏|基于Unity2023.1.1|游戏开发|Unity|编程|游戏制作|入门教程,Unity小白超神系列教程:超级玛丽,【灯塔极简教程】20分钟用Unity做一个滚球跑酷游戏,Unity小游戏【贪吃金币】-自己做的游戏作业,简单易懂,【Unity基础教程】入门游戏制作,十分钟搞定涂鸦跳跃2D游戏,愤怒的小鸟开发-基于Unity2023-2D小白教程-游戏开发|编程|unity3d|u3d|unity基础|手游开发|C#编程|虚幻游戏开发,Unity小游戏《FlappyBird》从演示到发布 零基础最全教程(Unity/C#/零基础/游戏制作/游戏开发/编程)B0102https://www.bilibili.com/video/BV1Sb411N7DQ?spm_id_from=333.788.videopod.sections&vd_source=5fa6d2958ae880d9550a17f8050fd5ed

2_按钮单击效果与场景切换_哔哩哔哩_bilibili2_按钮单击效果与场景切换是Unity制作飞扬的小鸟小游戏视频教程的第2集视频,该合集共计9集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV1GV411a7Mc?spm_id_from=333.788.player.switch&vd_source=5fa6d2958ae880d9550a17f8050fd5ed&p=2

1 创建1个unity 2D项目

1.1 2D项目模板选择

1.1.1 2D(built-in-Render pipeline)

This is an empty project configured for 2D apps. It uses Unity's built-in renderer.
这是一个为2D应用程序配置的空项目。它使用Unity的内置渲染器。

1.1.2  universe 2D

This is an empty project configured for 2D apps. It uses Unity’s Universal Render Pipeline pre-configured with 2D Renderer.

这是一个为2D应用程序配置的空项目。它使用预先配置了2D渲染器的Unity通用渲染管道。

1.1.3 这次选择  2D(built-in-Render pipeline)

因为之前3D项目也是选择 universe 3D ,结果在asset store里下载的资源是紫色贴图报错

怀疑是不是轻量级的和大多数人的项目不匹配,这次用传统的这个2D(built-in-Render pipeline)

1.2 创建项目

1.2.1 注意点

  • 注意,创建前,记得修改项目名
  • 否则比较麻烦

1.2.2 如果想修改项目名

  • 如果想修改项目名
  • 右键,show in exolporer /浏览器中打开
  • 修改项目文件夹的名字
  • 然后unityhub里就找不到了
  • 需要重新再打开就可以了

2 导入美术资源包

2.1 下载一个flappy bird的资源包

  • 其实没有也可以,就是自己做,对于没美术基础的比较麻烦,比如我
  • 可以先丑一点
  • 我之后打算替代掉这些资源

2.2 导入资源包

  • 双击unity资源包,即可import
  • 点击import

2.3 记得把UNITY视图修改为经典的2*3模式

主要跟着各种视频,文章都是这么学的,习惯了

换个格式看的难受

2.4 先把界面整理成熟悉的2*3,然后开始整

舒服了开始整

2.5 还要把项目 设置修改为安卓,因为是手机游戏

一般不修改默认是windows

切换完毕

3 开始整:基础调整准备

3.1 先新建1个 288*512的屏幕分辨率

  • 好像原游戏的地图分辨率,屏幕图就这么大
  • 需要再下面的game窗口,新建这么一个

3.2 图片UI素材太大的问题

  • 没搞明白,为啥这个bg这么大
  • 可能是因为导入的素材包里是别人已经设置过的UI,而不是原图吧?
  • 而且我看不到图片的原始尺寸??比如288*512
  • 管他呢,先改

3.3 修改摄像机size,而不是素材尺寸

  • 修改摄像机size,而不是素材尺寸
  • 这样可以避免,后面每个资源都要修改,
  • 只需要修改摄像机1次,去适配资源即可
  • 拖到摄像机的白色控制点,但是好像只能 按照摄像机的宽高比一起调整,不能自由调整。

4 地图背景bg

4.1 创建第2个bg,复制即可

  • 且保证2个bg的y是一致的,就是 transform里的y要一致

4.2 更科学的修改方法

  • 是知道图片的尺寸
  • 按照1米=100pixel来换算
  • 图片是按像素,比如288*512,而unity里是填写米
  • 然后把bg2,也和bg叠在一起,也就是,重置 transform为000,然后把X修改为288/100=2.88即可刚好两张平铺错开

4.3 尝试间接计算bg的像素大小

  • 上下叠一张,左右叠一张
  • 虽然都是看 pviot之间的距离,实际也就是图片的大小

  • 而这个资源上写的16比
  • 换算下来 23.2*16=371.2像素
  • 换算下来 23.2*16=533.6像素
  • 和我现在用的288*512 还是有些区别的

后来发现,双击UI里图片可以看到实际大小 378*537

4.4 关于3D和2D的最标准,新手要记住

unity里默认的

3D的是 水平平面(X right ,Z  front),Y up 纵 ---立体

2D的是 竖直平面  (X  horizontal,Y vectical 纵 )

4.5 创建1个空物体bg

把之前的bg图,分别改名bg1 bg2放入其作为子物体

5 创建地图背景bg脚本

5.1 脚本文件夹

这里出现了很诡异的问题

不让我在unity里创建c#脚本,每次创建都一闪而过

气得我差点准备删了重建

我后来想,可能是导入资源包做了点手脚限制了

我干脆绕了过去。直接在 windows对于的assets里创建脚本是OK的

5.2 给bg空物体挂一个脚本,实现bg自动滚动

5.3 脚本内容

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


public class bgControl : MonoBehaviour
{
    //bg移动速度,方便外面修改
    public float speed1=0.2f;

    //use this for initialization;
    void Start()
    {
        
    }

    //Update is called once per frame;
    void Update()
    {
        //遍历bg
        foreach(Transform trans1 in transform)
        {
            //移动bg
            Vector2 v1=trans1.position;
            v1.x=v1.x+speed1*Time.deltaTime;
            trans1.position=v1;
        
        }
    }    


}

实测OK,但是动的特别慢,因为是远景的原因 

  • 速度的原因,怀疑是因为这里是按16:1的像素/米,得搞快点
  • 往右移动,是+
  • 可以修改为往左边移动,更符合一般视角感觉,修改为-

修改

  • 如100:1是速度0.2,16:1 速度为1.25,
  • 同时改成向左移动试试
  • 而且,因为 speed1是public 变量,unity脚本外面修改得优先级高,只改脚本不生效,外面还是0.2f,记得修改unity里的speed1得值。

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


public class bgControl : MonoBehaviour
{
    //bg移动速度,方便外面修改
    public float speed1=1.25f;

    //use this for initialization;
    void Start()
    {
        
    }

    //Update is called once per frame;
    void Update()
    {
        //遍历bg
        foreach(Transform trans1 in transform)
        {
            //移动bg
            Vector2 v1=trans1.position;
            v1.x=v1.x-speed1*Time.deltaTime;
            trans1.position=v1;
        
        }
    }    


}

bg移动速度

那如果把宽度严格得定义为23.625,还有2个匹配修改

  • bg1本身图片是左边和右边是刚好可以相接的
  • bg2 距离bg1,也就是bg2的x 也要刚好是23.625,否则会有缝隙或叠加
  • 现在bg可以无缝的向左边后退滚动了

5.4 把bg的 order in layer修改为很小的数,放在最底层,避免遮挡前面的内容

6 地面 ground

同样新建空物体,建2个ground

6.1 修改地面ground的配置

  • 地面应该是336*112
  • 但是这里的是 800*392

把ground的scale 调整为 0.6x 0.4y差不多

让2个ground相距离X为30

其中一个x=-3。 另外一个x=27

6.2  共用bg的脚本,只修改公共变量

  • bg的脚本继续挂载ground空物体上
  • 修改参数
  • 实测🆗

6.3 记得营造视觉差效果

  • 也就是地面移动速度快,近景
  • 城市移动速度慢,远景

6.4 给地面增加碰撞

7 管子pipe

7.1 新建空物体和up down的pipe

  • 并且设置到00后调整空缺位置

7.2 调整layer的order, 让ground 显示在的pipe上层

  • 让ground 显示在的pipe上层
  • ground的order更高即可

7.3 给pipe增加碰撞

  • 新增 collider 2D

7.4 给空的父物体,增加一个 collider 2D, 并修改为触发器

这样没有碰撞,但是会有触发判断

且弄到后半段

8 小鸟bird

8.1 创建小鸟动画

多个图片一起拖过去

8.2 给小鸟增加碰撞 和刚体,控制小鸟往下掉

限制小鸟自己Z轴移动,就是X,Y 之外的翻滚,滚动

8.3 脚本控制小鸟向上飞

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


public class birdControl : MonoBehaviour
{
    //以下都是按1/16算的
    //外界给小鸟向上飞得外力
    public float force1=10f;
    //定义一个新刚体
    public Rigidbody2D rbody1;


    //use this for initialization;
    void Start()
    {
        //  获取小鸟得刚体
        rbody1=GetComponent<Rigidbody2D>();
        
    }

    //Update is called once per frame;
    void Update()
    {
        //判断点击则给小鸟向上  0左,1右键,2鼠标中键
        if(Input.GetMouseButtonDown(0))
        {
            rbody1.velocity=new Vector2(0,force1);
        }
    }    



}

9 控制小鸟的头的朝向

9.1 注意unity里的欧拉角

unity里是用的0-360度,都是正数的角度

但是unity外面面板上填的不是,是正数和负数

9.2 修改脚本

增加头部转向

限制角度

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


public class birdControl : MonoBehaviour
{
    //以下都是按1/16算的
    //外界给小鸟向上飞得外力
    public float force1=10f;
    //定义一个新刚体
    public Rigidbody2D rbody1;
    //定义一个最大角度
    public float maxAngle=40;    


    //use this for initialization;
    void Start()
    {
        //  获取小鸟得刚体
        rbody1=GetComponent<Rigidbody2D>();
        
    }

    //Update is called once per frame;
    void Update()
    {
        //判断点击则给小鸟向上  0左,1右键,2鼠标中键
        if(Input.GetMouseButtonDown(0))
        {
            rbody1.velocity=new Vector2(0,force1);
        }

        //获取当前的角度.Z表示旋转
        Vector3 angle1 =transform.eulerAngles;
        //旋转
        //只给Y轴的,不给X轴的?
        angle1.z=angle1.z+rbody1.velocity.y;
        //将旋转Z同步面板上的值,如果不做这个可以直接用360角度去做也可以
        angle1.z=angle1.z-180;
        if(angle1.z>0)
        {
            angle1.z=angle1.z-180;
        }
        else
        {
            angle1.z=angle1.z+180;
        }
        Debug.Log(angle1.z);
        //限制翻转
        angle1.z=Mathf.Clamp(angle1.z,-maxAngle,+maxAngle);
        transform.eulerAngles=angle1;
    }    









}

相关文章:

  • 打造个人知识库(Page Assist版)- 私人专属AI-本地化部署deepseek
  • Leetcode 49: 字母异位词分组
  • vue原理面试题
  • 浏览器注入可以实现同时进行n个浏览器注入的方案
  • JavaWeb-社区版Idea安装配置
  • Spring Boot 与 MyBatis 版本兼容性
  • 简述下Spark中的自带的standalone集群管理的任务执行流程
  • 【决策树】分类属性的选择
  • Linux端口映射
  • 图解KV Cache:解锁LLM推理效率的关键
  • NVIDIA GPU 系列简单介绍
  • Vue盲区扫雷
  • oracle decode
  • WireGuard搭建网络,供整个公司使用
  • 自动计算相机pose,pyrender渲染例子
  • QILSTE H6-C210TCG高亮翠绿光LED灯珠 发光二极管LED
  • 使用 `#pragma comment(lib, “xxx.lib“)` 简化 DLL 依赖管理
  • (十 八)趣学设计模式 之 观察者模式!
  • vscode通过ssh远程连接(linux系统)不能跳转问题
  • CSS—显示模式display、定位position、元素溢出overflow、float浮动
  • 超越梅罗,这样一个亚马尔折射巴萨的容错率
  • 体坛联播|欧冠巴萨3比3战平国米,柯洁未进入国家集训队
  • 新型算法助力听障人士听得更清晰
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使
  • “75后”袁达已任国家发改委秘书长
  • 准80后湖北省财政厅副厅长徐晶华已调任襄阳市副市长