目录
目录README.md

项目文档

目录

git链接

引言

本项目是《技能实践班》第二阶段的作业,旨在通过团队协作,完成一个包含热更新功能的综合性项目——“热更新实战II”。本作业要求学生结合第二阶段所学的相关知识,利用互联网第三方代码托管平台,三人协作完成项目开发。项目主要包括四个部分:项目文档、代码优化、3D漫游场景优化和交互场景。在开发过程中,我们将运用异步、消息系统、单例模式、有限状态机等优化方法,提高项目的性能和可维护性。通过本次作业,学生不仅可以加深对热更新技术的理解,还能锻炼团队协作和项目管理能力。

项目概述

这个项目是基于Unity引擎的实践性作业,旨在运用《技能实践班》第二阶段所学的知识,由三名学生共同完成“热更新实战II”项目。任务要求包括但不限于:撰写详细的项目文档,包括项目运行流程图和工程文件结构图;优化代码结构与性能,使用异步编程、消息系统、单例模式、有限状态机等设计模式,以优化热更新和资源加载流程,并确保所有代码均有详尽注释;在现有3D漫游场景中,新增10个可交互的人形模型,通过鼠标或键盘交互进入对话状态,实现对话内容的管理与显示,要求对话内容长度差异化管理,采用CSV/XML格式存储;此外,项目还要求开发具备热更新能力的交互场景,参考《太空侵略者》游戏的设计理念,包含玩家控制角色移动与攻击、敌人对象、背景音乐、受击音效、得分UI等功能,并使用对象池有效管理子弹对象和敌人对象。

文件结构

项目的文件结构如下:

项目运行流程图

项目流程图

工程文件结构图

工程文件结构图

3D漫游场景优化

1. 模型添加与动画控制:

  • 模型导入与动画资源
    • 在 Unity 或类似引擎中导入至少 10 个独特的人形模型,每个模型应具备自定义的动画资源,包括行走、站立、交谈等动作。
    • 确保模型与引擎兼容,并使用适当的导入设置优化模型和动画性能。
  • 动画控制器创建
    • 为每个人形模型创建动画控制器或状态机,以便管理模型的不同动作状态。使用状态过渡和动画层(Layers)来实现平滑的状态切换和混合动画效果。

      2. 触发对话状态与交互设计:

  • 交互触发机制
    • 实现交互系统,通过点击或触发特定区域或按键,使玩家与人形模型进行交互。
    • 使用射线投射或碰撞体检测确定玩家是否与模型进行交互,并根据交互状态触发对应的交互逻辑。
  • 交互状态管理
    • 设计状态管理机制,确保玩家和人形模型之间的交互在游戏运行时能够顺畅进行。例如,定义交互状态、退出状态和过渡条件,以及可能的中断处理逻辑。

      3. 对话界面与内容管理:

  • 对话框和 UI 设计
    • 创建对话框 UI,用于显示当前交互的对话内容。UI 应设计成可定制和适应不同分辨率的布局。
    • 添加头像、说话者名称和文本框等元素,使对话内容清晰可读且用户友好。
  • 对话内容管理
    • 使用数据驱动的方法管理对话内容,将对话文本和条件存储在外部文件中(如 JSON 或 XML 格式)。
    • 实现对话数据的动态加载和解析,以便根据游戏进度或玩家选择加载不同的对话分支。

      4. 技术实现要求:

  • 状态管理与动画控制
    • 使用 Unity 的 Animator 控制器或类似的状态机系统,管理人形模型的动画状态。确保状态过渡流畅自然,不会出现动画卡顿或突兀的切换。
  • 数据加载与显示优化
    • 编写数据加载和解析逻辑,确保对话内容能够高效加载和更新。考虑使用异步加载和缓存策略,优化游戏性能和用户体验。

      5. 实现质量与性能优化:

  • 动画与资源管理
    • 优化模型的动画资源和内存管理,确保在运行时资源占用和加载时间最小化。
    • 使用 LOD(层级细节)系统和纹理压缩等技术,降低游戏在各种硬件平台上的性能需求。
  • UI 和交互设计优化
    • 测试 UI 布局和交互设计的可用性和可访问性,确保对话界面在不同设备和分辨率下的适配性。
    • 实现响应式设计和动态调整功能,以支持多种屏幕比例和用户交互模式。

3D漫游场景优化

交互场景作为热更新场景

1. 热更新场景的实现

  • 场景下载界面
    • 设计一个界面,允许玩家单独下载该场景。点击下载后,通过网络请求或资源管理系统下载该场景的相关资源。
  • 热更新管理
    • 使用异步加载技术,例如Unity的AssetBundle,来动态加载场景和相关资源,以实现热更新功能。

      2. 角色和敌人对象的设计

  • 角色控制
    • 创建一个角色对象,实现键盘控制移动和攻击功能。这可以通过Unity的Input系统和角色控制脚本实现。
  • 敌人对象
    • 设计敌人对象,使用有限状态机(FSM)来管理敌人的不同行为状态,如巡逻、追击、受击等。

      3. 场景元素和音效管理

  • 背景音乐
    • 添加背景音乐,使用音频管理系统(如Unity的AudioSource)播放循环背景音乐。
  • 受击音效
    • 当敌人被攻击时播放受击音效,可以通过对象池管理和音频管理系统实现。

      4. 子弹和碰撞效果

  • 子弹对象
    • 创建子弹对象池,通过对象池管理子弹的生成和销毁,以及复用已销毁的子弹对象。
  • 碰撞检测
    • 使用Unity的物理引擎或碰撞体检测来检测子弹和敌人对象的碰撞。碰撞后销毁子弹对象,同时播放碰撞音效。

      5. 得分UI和游戏逻辑

  • 得分UI
    • 设计一个UI界面,显示玩家的得分。使用UI管理系统,例如Canvas和Text组件来实现动态更新分数。
  • 消息系统
    • 实现消息系统来处理游戏中的事件和通信,例如击中敌人时更新分数和播放音效等。

      6.使用的设计模式和技术

  • 消息系统
    • 实现消息系统来解耦游戏中的不同模块,使其能够独立工作并进行通信,例如处理碰撞事件和更新UI。
  • 单例模式
    • 可以使用单例模式来管理全局唯一的游戏管理器(如音频管理器、对象池管理器),确保全局资源的正确管理和访问。
  • 有限状态机(FSM)
    • 为角色和敌人对象实现有限状态机,管理它们的不同行为状态,如移动、攻击、受击等,使游戏角色行为更加灵活和可控。

交互场景作为热更新场景

功能代码实现截图

用XML实现对话用XML实现对话 用XML实现对话 用XML实现对话 单例模式单例 单例运用 有限状态机状态机 状态机 人物移动人物移动 敌人移动敌人移动 发射子弹发射子弹

组员分工

罗圣

  • 项目文档与流程管理

    • 编写项目设计文档,包括技术选型、架构设计、模块划分等。
    • 负责撰写和维护详细的项目文档,包括但不限于项目概述、文件结构、项目运行流程图、工程文件结构图等。
  • 热更新功能实现

    • 主导热更新场景的开发,利用Unity的AssetBundle技术实现资源的动态加载,确保场景可以独立下载和更新。
    • 编写清晰明了的代码,确保注释完整。
    • 协调团队成员,确保热更新功能的顺利集成和测试。
    • 使用异步加载技术,动态加载场景和相关资源,实现热更新功能。

刘帅

  • 3D漫游场景优化

    • 负责在现有3D漫游场景中新增10个不同的人形模型,并确保模型与Unity引擎的兼容性。
    • 导入和配置模型动画资源,包括行走、站立、交谈等动作,使用Animator控制器或状态机实现动画的平滑过渡。
    • 实现模型的交互触发机制,确保通过鼠标点击或键盘交互能使人形模型和玩家角色同时进入对话状态。
  • 对话界面与内容管理

    • 设计并实现对话界面,包括对话框UI、头像、说话者名称和文本框等元素。
    • 使用CSV或XML文件管理对话内容,实现对话数据的动态加载和解析,确保对话内容能够根据不同条件显示不同的分支。
    • 实现场景中门的自动开关功能及可互动区域的UI提示。
  • 性能优化

    • 协助团队成员进行代码和资源的性能优化,包括优化动画资源和内存管理,使用LOD系统和纹理压缩技术降低性能需求。

曾辉

  • 交互场景功能实现
    • 负责开发玩家控制角色,实现键盘控制移动和攻击功能。
    • 设计并实现敌人对象,使用有限状态机(FSM)管理敌人的不同行为状态,如巡逻、追击、受击等。
    • 创建子弹对象池,通过对象池管理子弹的生成、销毁和复用,优化游戏性能。
  • 碰撞检测与游戏逻辑
    • 使用Unity的物理引擎实现子弹和敌人对象的碰撞检测,处理碰撞后的逻辑,包括销毁子弹对象、播放碰撞音效等。
    • 对资源进行优化,减少文件大小,提高加载速度。
    • 实现得分UI和消息系统,处理游戏中的事件和通信,如击中敌人时更新分数和播放音效等。
  • 测试与调试
    • 对整个项目进行功能测试,特别是热更新和用户界面部分。
    • 修复发现的bug,并优化用户体验。

回到顶部

关于
2.0 GB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号