GIET
  • 个人简介
  • 教学提要
  • 教学实施
  • 小结讲评

[ 个人简介 ]

张树彬
数字媒体 | 软件工程
党员
13*0**35481
1942194789@qq.com
撸码 | 逛B站 | 运动 | 美食 | 绿植

I'm a passinate web developer and creative technologist with a keen eye form design and a loe for building innovative digital solutions. With expertise in both front-end and back-end development, I create seamless user experience that lear a lasting impression.

My approach combines technical excellenace with creative problem-solving to deliver projects that not only meet but also exceed expectations.

I have a strong understanding of the entire development process and can deliver high-quality results on time. I also have a passion for learning and staying up-to-date with the latest industry trends and technologies.

学习
1995.08 - 1999.06 桂林电子科技大学 通信工程 学士
2005.08 - 2008.03 上海交通大学 通信与信息系统 硕士
工作
1999.07 - 2018.12 中国人民解放军陆军特种作战学院 侦察系 讲师
2020.07 - 2022.01 桂林学院 软件工程 讲师
2022.03 - 2022.06 厦门工学院 物联网 讲师
2022.07 - 2023.01 广州工商学院 软件工程 | 数字技术媒体 讲师
2023.02 - 2023.06 海口经济学院 计算机与大数据 讲师
2023.09 - 广州新华学院 软件工程 | 数字技术媒体 讲师
资源

WEB

微信小程序

微信公众号

自创品牌小程序

[ 教学提要 ]

项目 Project
飞翔的小鸟
内容 Content
柱子移动
柱子孵化
科目 Subject
程序开发综合实训
对象 Object
20数媒B1班、B2班、B3班、B4班
知识 Knowledge
碰撞、预制件
脚本动画
常见函数:重复函数、生成函数、随机函数
技能 Skill
规范开发
高效开发
自主开发
情感 Sentiment
发现美
欣赏美
创造美
方法 Method
理论讲解
查阅文档
项目实操
学时 Duration
2
建议 Advice
听 Listening
记 writing
思 Thinking
撸 Coding

[ 教学实施 ]

[老师课前准备及学生签到、准备]

1. 学习网站 飞翔的小鸟

2. 开发环境 Unity

3. 项目第一阶段资源包 bird_phase1.unitypackage

4. 考勤 课堂派

5. 电子笔记 语雀

6. 截图工具 Snipaste

[回顾及提问]

1. 创建帧动画的快捷键是什么?

2. 帧动画文件的后缀名是什么?

图1 创建动画
[教学设计]
柱子创建
柱子移动
柱子孵化
图2 教学内容安排
基本原理
知识点
项目实操
图3 教学过程安排
1. 单个柱子的创建

[] 知识点

类别
说明
Empty
空对象:分组 | 管理游戏对象
Box Collider 2D
普通碰撞 | 死亡碰撞
Box Collider 2D | Is Trigger
触发碰撞 | 得分碰撞
表1 柱子创建涉及到的知识点

[] 实操

1.1. 创建一个空游戏对象Empty为Pipes,作为容器收纳柱子精灵;reset到世界坐标中心

1.2. 拖动两个切分好的柱子精灵到空对象Pipes;调整位置,上下排列,中间隔开一定距离,允许小鸟飞过

1.3. 分别给两个柱子精灵添加碰撞组件Box Collider 2D,使用默认碰撞,检测是否和小鸟发生碰撞

1.4. 给Pipes添加碰撞组件Box Collider 2D,调整大小,置于上下柱子精灵空隙的右侧;使用触发碰撞,检测小鸟是否成功飞过

1.5. 运行游戏,查看柱子是否显示正常;如果被遮挡,请单独调整每个柱子精灵的层级 Order in Layer。因为柱子Pipes是空对象,没有渲染组件Render,不具有层级

图4 创建柱子并添加碰撞组件
图5 得分为触发碰撞

[] 说明

. 根据需要编辑碰撞区域

2. 单个柱子的移动
距离 m = 速度 m/s * 时间 s
公式1 距离的计算

[] 知识点

类别
说明
position
位置
Vector2
2维向量;维度常量
Vector3
3维向量;维度常量
Translate
位移;距离
Time.deltaTime
帧的刷新时间;完成上一帧所用的时间
float
浮点数据类型;以f结束
prefab
预制件
表2 柱子移动涉及到的知识点

[] 实操

2.1. 在层级Hierarchy选择柱子对象Pipes,为其添加脚本Pipe.cs

2.2. 双击脚本Pipe.cs,参照下述代码编辑并保存

Pipe.cs
public class Pipe : MonoBehaviour
{
  public float speed;

  void Update()
  {
      //方案1:使用位置向量的x属性 - 坐标运算
      //Vector2 pos=transform.position;
      //float x=speed*Time.deltaTime;
      //pos.x -= x;
      //transform.position = pos;

      //方案2:使用position - 矢量运算
      //transform.position += Vector2.left*speed * Time.deltaTime;

      //方案3:使用position - 矢量运算
      //transform.position += Vector3.left*speed * Time.deltaTime;

      //方案4:使用位移;构造新的位置属性position
      //transform.Translate(-speed * Time.deltaTime, 0, 0);

      //方案5:使用位移;构造新的Vector2位置向量
      //transform.Translate(new Vector2(-speed * Time.deltaTime, 0));

      //方案6:使用位移;构造新的Vector3位置向量
      //transform.Translate(new Vector3(-speed * Time.deltaTime, 0, 0));

      //方案7
      //transform.Translate(Vector3.left*speed*Time.deltaTime);

      //方案8
      //transform.Translate(Vector2.left*speed*Time.deltaTime);
  }
}

2.3. 返回Unity,为暴露的公有变量速度speed赋值,运行游戏,查看游戏效果;并根据实际情况调整speed、排查可能出现的告警信息

2.4. 确认正常后,在层级Hierarchy中,将柱子对象Pipes拖动到项目Project中,由系统自动生成对应的预制件Prefab,方便后期统一调整和修改

[] 说明

. 确认Unity已经关联了外部编辑器,如Vs Studio 或 Vs Code

. 改变游戏对象的位置 | 坐标

. 通常在项目Project中单独创建一个文件夹保存预制件,如创建文件夹Prefab

. 由预制件创建的对象实例在层级Hierarchy中显示为蓝色,以便和普通对象区分开来

. 也可以不使用脚本而采用Animation创建动画

3. 柱子的孵化

[] 知识点

类别
说明
InvokeRepeating(fn, startTime, repeatTime)
重复执行函数
Instantiate(obj, position, direction)
动态生成对象函数
Random.Range(min, max)
随机函数
Destroy(obj, delay)
延迟销毁对象函数
表3 柱子孵化涉及到的知识点

[] 实操

3.1. 创建一个空游戏对象Empty为PipeSpawn,用来孵化柱子,reset后,拖至舞台右侧外部孵化 | 生成柱子

3.2. 创建脚本Script为PipeSpawn.cs并挂载到空游戏对象PipeSpawn;使用系统函数InvokeRepeating()孵化柱子,并随机调整高度偏差;最后经过一定时间后销毁对象;参考代码如下,其中随机高度的实现由同学完成

PipeSpawn.cs
public class PipeSpawn : MonoBehaviour
{
  public GameObject pipePrefab;
  public int inter;//重复执行时间间隔
  public float h;//随机高度
  public del sec;//延迟删除对象时间

  void Start()
  {
      InvokeRepeating("Spawn", 0, inter);
  }

  void Spawn()//自定义孵化函数
  {
      Vector3 offset = new Vector3(0, Random.Range(-h, h), 0);
      GameObject prefab = Instantiate(pipePrefab, transform.position + offset, Quaternion.identity);
      Destroy(prefab, sec);
  }
}

3.4. 保存并返回Unity,为暴露的公有变量分别指定要孵化的柱子预制件pipePrefab和重复执行时间间隔inter、随机调整高度h和延迟删除对象时间sec

3.5. 运行游戏,查看游戏效果;并根据实际情况调整参数、排查可能出现的告警信息

[] 说明

. 也可以自定义重复生成函数

. 充分利用Vs Studio开发环境的代码提示功能,并注意查看各个函数的说明和参数介绍

. 更多函数说明和参数介绍,请查阅 Unity官网开发文档 或Unity环境自带的帮助文档

[ 小结讲评 ]

[] 主要内容

1. 柱子的创建:collider

2. 柱子的移动:transform、Time.deltaTime、Prefab

3. 柱子的孵化:InvokeRepeating()、Instantiate()、Destroy()、Random() *

1预制件 - 2脚本 - 3函数
[] 课后练习

完善 使用随机函数Random()实现柱子上下位置变化

体会 Instantiate()的各个重载

体会 使用帧动画Animation实现柱子移动

体会 使用自定义函数实现柱子孵化

提高 柱子移动的过程中,上下运动

[] 课后预习

1. 碰撞检测

2. 画布 Canvas - UI

[] 知识拓展

1. 开发者社区 developer

2. 更多开发教程,请访问 飞翔的小鸟