用unity开发教学辅助软件---幼儿绘本英语拼读

记录完整项目的制作,借鉴了大佬@被代码折磨的狗子 “unity创建《找不同》游戏 图片编辑器”一文。

(建议通过目录阅读本文哦~)

项目演示:

幼儿英语教辅

幼儿英语绘本教学游戏整体架构

游戏开发中设计的整体框架

游戏的总体功能框架如下图所示。

        主要先进入字母选择界面,选择一个需要学习的字母,然后进入到对应字母的选择模块界面,学生们先通过其中的视频了解一些单词和故事情节,然后老师带领学生体验各个游戏模块,自主决定教学顺序。

         以字母a为例,视频中介绍了小蚂蚁(ant)Andy喜欢艺术(art),在画布上画苹果(apple),在画布上画宇航员(astronaut),在画布上画自己(Andy ant)的故事情节。找不同、画画、测试、迷宫、唱歌的游戏就围绕这个主题展开。如下图所示,就是字母a的纸质绘本。

  目的:通过Unity3D引擎、C#脚本编程、游戏化设计,制作出更加有趣、有及时反馈的教学游戏和承载绘本内容、视频的平台。

幼儿英语绘本教学游戏的具体设计与实现

选择字母界面导航的设计与实现

选择字母界面与总体功能设计

实现的是通过不同的按钮点击进入不同的界面,界面如下图所示。

通过Grid Layout Group组件实现每一行按钮的与左右、上下的间距(Space)设置和按钮的大小(Cell Size)设置,然后通过通过Scroll Rect组件去控制所有按钮的所在区域,从而实现了规整的布局,如下图所示。

选择进入功能实现

实现的功能是通过UI素材放在Unity3D资源目录(Resource)下,动态生成各个按钮的图片,点击按钮后进入各自字母主题的界面。

新建CustomsPassData类存储每个按钮的图片,按钮图片如下图所示,通过ScriptableObject类来数据的永久储存,创建DataConfig,如下图所示,在Unity3D的主界面进行赋值的操作。

通过设计对应的数据类型来存储图片和相关数据(区域位置、大小以及模式参数等),代码设计如下图所示。

同时设计按钮的脚本CustomsPassItem类中的InitData()函数用于生成按钮的数据(包括如何跳转、代表哪个字母),代码设计如下图所示。

在SelectCustomsPassPanel(选择字母脚本)中调用CustomsPassItem类的InitData()函数,同时应用创建的DataConfig中存储的数据(在Unity3D平台的开发界面进行赋值)、这样就实现了自动获取按钮图片和字母内容,动态生成排列好的按钮,当按钮按下时就调用OnClick()函数,进入下一个界面(选择模块界面),代码设计如下图所示。

选择模块界面导航的设计与实现

选择模块界面和总体功能设计

主要有5个游戏模块(点击进入不同的游戏)、视频模块(观看预设的教学故事)和一个标题(显示当前学习的字母和主题),界面设计如下图所示。

也是通过Grid Layout Group组件实现的规整分布,如下图所示。

各种游戏进入按钮功能的实现

实现的功能是当点击按钮时,执行类似于显示界面、打开音乐、获取对应内容的程序。主要是通过为每一个按钮绑定一个事件监听来实现的,如下图所示。

同时在每个监听事件里执行类似于显示界面、打开音乐、获取对应内容的程序,代码设计如下图所示。

视频播放器内容更新和播放功能实现

实现的功能有可以根据所选字母主题动态更新视频内容,然后实现了基础的视频放大缩小、播放、暂停、从头观看的功能。动态更新视频内容的功能实现主要是设计类似于文章前面提到的dataconfig,设计一个存储视频封面、视频播放内容等元素的类(videoandbookData),代码设计如下图所示。

新建videoandbookData类存储每个按钮的图片,通过ScriptableObject类来数据的永久储存,创建videoandbookDataconfig,在Unity3D平台的开发界面中填入数据,如下图所示。

同时选择字母界面的各个字母按钮上了挂载监听事件(挂载了CustomsPassItem脚本,使用onClick()函数进行监听),当按钮被按下时,就会根据按钮的下标来生成对应的播放器内容,代码设计如下图所示。

再通过InitvideoandbookData()函数,动态修改播放的视频和视频封面等元素,代码设计如下图所示。

而播放、暂停、从头开始播放的功能,是通过videoPlayer脚本中设计的PlayOnClick()、pause()、finishOnClick()函数去实现的。代码设计如图所示。

最大化/最小化功能设计是通过设计image_Controller脚本,调用DG.Tweening动画插件去实现放大缩小的界面效果,核心代码如图所示。

最后在界面中给四个界面中的按钮(GameObject父物体下的4个子物体)设置按下的监听事件,就能实现相应的功能。

找不同界面导航的设计与实现

找不同界面和总体功能设计

设计了两张模式,类似于对比两张图的不同点或寻找一张图片中不同的元素,通过鼠标点击,可以选择,同时设计了倒计时的机制,让该过程更具趣味性,界面设计如图所示。

找不同界面可视化编辑器设计

实现的功能如下:

①在对比两张图片不同处的游戏机制中,可以选择添加节点,增加需要找出的不同数量,解决了数量不同也可以整体设计的效果。同时对每一个不同点(Element)可以设置它在画布中的X、Y坐标和长度与宽度,如下图所示。

②针对在一张图片中找不同的游戏机制中,也是可以添加节点和设置节点的坐标和大小,如下图所示。

找不同(find difference)界面比较复杂,有对比两张图片找出不同(同时不同处的数量也有区别)的模式,也有在一张图片里找出相同或者不同的元素(一个或者多个)的模式,因此需要设计一个整体的架构,能做到可视化实现每个字母对应找不同界面的资源快速替换,同时规定它的游戏机制。

设计CustomsPassDataConfigEditer脚本,设计可视化编译器,核心界面设计代码如下图所示:

CustomsPassDataConfigEditer核心代码

 编辑器界面设计代码

同时在数据初始化时,设计两行代码,第一行代码实现了对原本资源中数据读取,同时在数据初始化时调用SelectCustomsPassData()函数,如下图程序所示。

SelectCustomsPassData()函数设计如下图所示,主要是修改当前选择的关卡,并获取数据进行展示,主要是针对每一个字母对应的图片和模式进行修改和调整,其中在代码的最后调用了CreateAreaItem( )函数,通过CreateAreaItem( )函数进行具体数据的修改,例如每一个找不同节点的X、Y坐标和长度与宽度。

同时在之前提到的DataConfig类中,选择MainPattern模式,可以决定它的游戏机制是在一张图片中找不同还是两张图片对比找不同,如下图所示。

找不同游戏机制的具体实现

实现的主要功能,当选择对位置时,就会显示出对应的红框,把不同处框出来,如果寻找错误,就会有错误的提示,在规定时间内找到要求数量的不同点才算胜利。

核心代码设计如下图所示,主要是通过InitData()函数生成找不同的点位,同时在按钮上挂载ByClicking()监听事件,判断是否找对了,然后通过FindAreaItem()函数,在两个图片上生成红色的框框。

 InitData()ByClicking()代码设计

 FindAreaItem()代码设计

画画界面导航的设计与实现

画画界面和总体功能设计

界面主要分为选色区和绘画区,可以在选色区选择画笔的颜色,然后可以填充到某个封闭的白色区域,自己DIY一个卡通角色,界面如下图所示。

5.4.2选择区功能实现

主要是在选区色块(Color)上设置监听事件,当按下时就调用脚本去转化画笔(Brush)的颜色,游戏对象属性如下图所示。

绘画区功能实现

  绘画功能的实现主要是通过根据画笔现在的颜色改变每个区域图片的渲染器颜色实现的,设计的区域如图所示。

空白区域设计展示案例

测试界面导航的设计与实现

测试界面和总体功能的设计

        设计对应字母主题的题目(是否包含这个字母的发音),涉及到的图片都是在对应的字母故事视频出现过的,根据题干选择对应的图片,会有对应的反馈,但每道题的选项数量和正确选项数量都可能会有不一致,界面如下图所示。

测试界面可视化编辑器设计

        实现的功能大致是选择对应的关卡,修改题目的题干、选项的图片和发音以及正确选项的下标,编辑器设计如下图所示。

编译器界面设计代码跟找不同界面编辑器的代码有些类似,也是涉及到资源的动态读取、数据的展示、关卡的修改等,相关机制核心代码如下图所示。

然后利用TestPassDataConfig类的对象中实现资源动态生成的效果,存储如下图所示。

功能类似于上文提及的DataConfig类,主要是通过ScriptableObject来实现数据的永久存储,核心代码如下图所示。

测试具体功能实现

实现的功能是点击对应的按钮有相应的反馈(正确或者错误、发出什么读音、播放什么样的动画),核心代码如下图所示。

迷宫游戏界面导航的设计与实现

迷宫游戏界面和总体功能的设计

        该界面主要是由主角、字母和终点、地图四个元素所构成,游戏模式是拖动主角走过迷宫达到终点,在教学过程中会在每次碰到字母时,带领同学们一起去跟读,每个字母对应的迷宫游戏界面差别比较大,不同字母界面设计如下图所示。

迷宫游戏界面的具体功能实现

①控制主角移动,当人物被拖动且不接触迷宫边缘时,就可以运动,主要是通过检测是否长按和如图5-38所示的MoveTo()函数进行控制的。

②控制主角与字母、障碍物、终点的交互,通过给不同游戏对象打上标签(tag)来区别主角是跟什么对象发生了碰撞,从而去调用对应的事件,核心代码如下图所示。

唱歌界面导航的设计与实现

唱歌界面和总体功能的设计

主要就是显示对应字母的歌曲内容和播放相应的音频,界面设计如下图所示。

唱歌界面编辑器的设计

主要包括了两种图片、文字的替换,ChantDataConfig类设计如下图所示。

也是基于ScriptableObject实现数据的永久存储,同时包括文字、图片、间距的参数,核心代码如下图所示。

唱歌界面功能的具体实现

主要就是通过getIndex()函数获取当前字母主题的下标,然后通过CreatContent()函数根据下标设置相应的资源,给按钮挂载播放音乐的事件(PlayMusic()函数),核心代码如下图所示。

匹配单词界面导航的设计与实现

匹配单词界面和总体功能设计

 这个模块的作用主要体现在教学过程中,老师可以让学生先去找对应单词的东西在图片的哪个位置,然后老师点击具体的单词,所对应东西的颜色就加深,如下图5-44所示,tea单词被点击,图片中杯子颜色被加深。

匹配单词界面具体功能实现

主要就是通过点击左侧的单词按钮,就能产生对应的动画效果,是通过在按钮上挂载监听事件、调用动画插件Dotween来实现的,核心代码如图所示。

界面适配率的设计

为了满足适配不同电脑的分辨率不同,需要让界面有自适应的功能。需要实时获取运行这个软件所在电脑的分辨率,然后保持界面原有的长宽比,进行总体大小的放大或者缩小。核心代码如图5-46所示:

屏幕大小调整的代码设计

希望这个项目的思路对大家有所帮助~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90612.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java 程序设计》第 5 章 - 数组详解

引言在 Java 编程中,数组是一种基础且重要的数据结构,它允许我们将多个相同类型的元素存储在一个连续的内存空间中,通过索引快速访问。掌握数组的使用是学习 Java 集合框架、算法等高级知识的基础。本章将从数组的创建、使用开始,…

基于Spring Boot的可盈保险合同管理系统的设计与实现(源码+论文)

一、相关技术 技术/工具描述SSM框架在JavaWeb开发中,SSM框架(Spring Spring MVC MyBatis)是流行的选择。它既没有SSH框架的臃肿,也没有SpringMVC的简化,属于中间级别,更灵活且易于编写和理解。MyBatis框…

​​XSLT:XML转换的“魔法棒”​

大家好!今天我们来聊聊 ​​XSLT​​(Extensible Stylesheet Language Transformations),一种用于转换和呈现XML文档的神奇工具。如果你曾需要将一堆枯燥的XML数据变成精美的HTML网页、PDF报告,或其他XML格式&#xff…

面试实战,问题十,如何保证系统在超过设计访问量时仍能正常运行,怎么回答

如何保证系统在超过设计访问量时仍能正常运行 在Java面试中,当被问及如何保证系统在访问量激增(例如从100万用户增长到200万)时仍能稳定运行,这是一个考察高并发、可扩展性和容错能力的关键问题。核心在于通过架构设计、性能优化和…

DMDSC安装部署教程

一、环境准备 虚拟机准备,添加共享磁盘 (1)共享存储规划 裸设备名 容量 用途 /dev/sdb 10 G /dev/asmdata0(数据磁盘) /dev/sdc 5 G /dev/asmdcr(DCR 磁盘) /dev/sdd 5 G /dev/asm…

半导体 CIM(计算机集成制造)系统

半导体CIM(Computer Integrated Manufacturing,计算机集成制造)系统是半导体制造的“神经中枢”,通过整合硬件设备、软件系统和数据流转,实现从订单到成品的全流程自动化、信息化和智能化管理。其工作流程高度贴合半导…

AI是否会终结IT职业?深度剖析IT行业的“涌现”与重构

引言:一场不可回避的技术审判在ChatGPT、Copilot、Claude、Sora 等AI技术密集爆发的今天,IT行业首当其冲地感受到这股浪潮带来的“智力替代压力”。尤其是以开发、测试、运维、分析为主的岗位,逐渐被AI所“渗透”。于是,问题摆在每…

mid360连接机载电脑,远程桌面连接不上的情况

为什么会出现这种情况呢,一开始我以为是雷达使用的网线,使用的是和网络同样的口,是因为机载电脑带宽不足,所以导致的,但是后面发现不管是哪一个机载电脑都会断开连接,后面了解得知,并不是连接的…

目标检测系列(六)labelstudio实现自动化标注

一、启用图片文件服务用Nginx启用图片服务,配置好映射路径。新建图片文件夹,将文件夹下的图片路径存储到txt文件中访问地址(文件夹):http://112.12.19.122:8081/urls/ml-backend-test/进入labelstudio将txt文件路径填入…

从零开始大模型之编码注意力机制

从零开始大模型之编码注意力机制1 长序列建模中的问题2 使用注意力机制捕捉数据依赖关系3 自注意力机制4 实现带可训练权重的自注意力机制5 利用因果注意力隐藏未来词汇6 将单头注意力扩展到多头注意力7 Pytorch附录7.1 torch.nn.Linear多头掩码可训练权重的注意力机制。为什么…

小架构step系列26:Spring提供的validator

1 概述对于Web服务,需要对请求的参数进行校验,可以对不合法的参数进行提示,提高用户体验。也可以防止有人恶意用一些非法的参数对网站造成破坏。如果是对每个参数都写一段代码来判断值是否合法,那校验的代码就很多,也很…

0编程基础:用TRAE写出了会蹦跳躲避散发炫光的贪吃蛇小游戏

在某个深夜的代码深渊里,一个从未写过print("Hello World")的小白开发者,竟用自然语言指令让贪吃蛇跳起了"光棱华尔兹"——蛇身折射出彩虹轨迹,食物像星舰般自动规避追击,甚至实现了四头蛇的"量子纠缠式…

在Word和WPS文字中要同时查看和编辑一个文档的两个地方?拆分窗口

如果要在Word或WPS文字的长文档中同时查看两部同步的地方(文档位置),来回跳转和滚动费时费力,使用拆分窗口的功能即可搞定。将窗口一分为二,上下对照非常方便。一、拆分窗口的路径Word和WPS基本一样,就是菜…

Windows系统下安装mujoco环境的教程【原创】

在学习Mujoco仿真的过程中,我先前是在linux系统下进行的研究与学习,今天来试试看在windows系统中安装mujoco仿真环境。 先前在linux中的一些关于mujoco学习记录的博客:Mujoco仿真【xml文件的学习 3】_mujoco打开xml文件-CSDN博客 下面开始wi…

CSS中篇

#Flex布局#1、什么是flex布局?flex 布局,全称弹性布局(Flexible Box Layout),是 CSS3 中引入的一种新的布局模式。它主要通过给容器设置相关属性,来控制容器内部子元素的排列方式。相比传统的浮动布局和定位…

《云计算蓝皮书 2025 》发布:云计算加速成为智能时代核心引擎

近日,中国信息通信研究院发布了《云计算蓝皮书(2025 年)》,全面剖析了云计算领域的发展现状与未来趋势。在人工智能蓬勃发展的当下,云计算正从基础资源供给向智能时代的核心引擎加速转变,成为重塑全球数字竞…

excel删除重复项场景

问题描述 问题描述:因为表格中存在多条相同的数据,我现在excel有一列,值为#N/A 。另外有列叫做药品名称、规格、厂家 我要删除值为 #N/A,并且 药品名称、规格、厂家相等的数据,那条相同的删掉,只保留一条,…

Vue 3 与 Element Plus 中的 /deep/ 选择器问题

Vue 3 与 Element Plus 中的 /deep/ 选择器问题 在 Vue3 中使用 Element Plus 组件时,使用 ::v-deep或 :deep()的场景取决于 ​​样式作用域​​ 和 ​​选择器目标​​。以下是关键区别:

2025暑期—06神经网络-常见网络

六个滤波核提取特征Maps5X5 卷积核,1个阈值 6个元素,卷积后两边各少两个,28*28像素 又有6个卷积核,所以有122304个连接,连接数不多是因为很多都是公用参数的。池化是参数池化,和当前平均最大不一样。编程14…

硅基计划3.0 学习总结 叁 栈和队列

文章目录一、栈1. 模拟实现栈2. 小试牛刀1. 判断一个栈的出栈顺序是否为题目给定情况2. 括号匹配3. 逆波兰表达式求值4. 求最小栈元素3. 单链表实现栈二、队列1. 官方队列类Queue2. 双向链表模拟实现Queue类3. 顺序表模拟实现Queue类4. 双端队列5. 队列实现栈6. 栈实现队列一、…