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

深大计算机游戏开发 实验二

主要步骤

地面、摄像机、平行光设置以及创建弹弓和弹丸预设:

完成基础场景的搭建,确保游戏环境的光照和视角合理。创建弹弓和弹丸的预设,为后续的发射机制做准备。

弹丸的实例化以及实现摄像机自动跟踪弹丸:

  实现弹丸的动态生成。设置摄像机自动跟踪弹丸,增强游戏体验。

单朵云以及多朵云的生成:

  实现多朵云的生成以及移动,丰富游戏背景。

创建多个城堡:

  创建多个城堡,为游戏目标提供多样化的场景。

实现弹丸的多次发射以及轨迹生成:

  实现弹丸的多次发射机制。记录弹丸的运动轨迹,为玩家提供参考。

实现击中目标时的反馈以及UI界面:

  实现击中目标时的反馈机制,增强游戏的趣味性。设计并实现游戏的用户界面,提供清晰的操作指引和信息展示。

不同难度的实现(后续根据具体难度进行了顺序的调整)

三个视角之间的来回切换(球体停止后会有强制返回弹弓视角的操作):

  实现三个视角之间的来回切换,提升游戏的可玩性。

后续

游戏开始界面、游戏背景添加山丘以及橡皮筋和云朵的视差滚动的实现

最佳分数的存储以及按p显示历史轨迹(黄色部分) (在游戏界面按下esc能够返回开始界面)

实现城堡部件不同材质以及不同质量

添加内容详解

场景转换:通过SceneLoader()函数实现了在游戏启动界面按下“Game Start”转换至游戏关卡界面并启动游戏与在游戏界面按下ESC后跳转至游戏启动界面的功能。

  保存最佳分数:通过PlayerPref实现保存每关的最佳分数。

背景音乐添加:通过Audio Source实现了两个场景的音乐的循环播放。

历史轨迹实现:

1. 数据存储

trajectoryHistory:这是一个 List<List<Vector3>> 类型的变量,用于存储弹丸的历史轨迹。它能容纳最多 5 条历史轨迹,每条轨迹以 List<Vector3> 形式存储,其中的每个 Vector3 代表轨迹上的一个点。

historyLines:这是一个 LineRenderer 数组,大小为 5,用来渲染历史轨迹。每个 LineRenderer 对应一条历史轨迹。

2. 轨迹记录

SaveTrajectory 方法:当弹丸的刚体进入休眠状态时,会调用此方法保存当前轨迹。若 trajectoryHistory 中的轨迹数量达到 5 条,会移除最旧的一条轨迹。把当前的 points 列表复制一份添加到 trajectoryHistory 中。清空 points 列表和 LineRenderer 的点数。

3. 轨迹显示与隐藏

ToggleHistoryTrajectories 方法:按 P 键时会调用该方法,用于切换历史轨迹的显示状态。若 showHistory 为 true,则调用 ShowHistoryTrajectories 方法显示历史轨迹。若 showHistory 为 false,则调用 HideHistoryTrajectories 方法隐藏历史轨迹。

ShowHistoryTrajectories 方法:遍历 trajectoryHistory 中的每条轨迹。若对应的 LineRenderer 为空,就创建一个新的 GameObject 并添加 LineRenderer 组件。为 LineRenderer 设置材质和线宽。设置 LineRenderer 的点数和位置,最后启用它。

HideHistoryTrajectories 方法:遍历 historyLines 数组,将每个 LineRenderer 的 enabled 属性设为 false,从而隐藏所有历史轨迹。

4. 轨迹清空

ClearHistory 方法:该方法用于清空所有历史轨迹。

橡皮筋实现:

1.LineRenderer 组件:

使用 Unity 的 LineRenderer 组件动态绘制线条,通过设置其 positionCount 和 SetPositions 方法更新线条路径。

2.橡皮筋初始化:

通过 InitializeSlingshotBands 方法初始化左右橡皮筋的 LineRenderer。

设置橡皮筋的起点(固定在弹弓两侧)和终点(初始位置为发射点 launchPos)。

3.动态更新:

弹弓的橡皮筋终点会跟随玩家的拖拽动态更新(虽然这部分逻辑未在此脚本中直接体现,但通常由其他脚本如 Slingshot 控制)。

当发射后,ProjectileLine 会开始记录弹丸的轨迹(通过 AddPoint 方法),而橡皮筋会复位到初始状态。

实验结论或心得体会

在游戏运行时我发现历史轨迹的颜色一直与当前的轨迹颜色一样,最后发现是材质设置需要改动,不然就会默认和当前的轨迹材质一样。

http://www.dtcms.com/a/276654.html

相关文章:

  • Linux操作系统之进程间通信:共享内存
  • 商编轮巡作为一种策略,旨在帮助商户规避支付平台(如VX. ZFB) 的风控措施。这种策略通过轮换使用不同的商户编号(商编)来减少单一商户因频繁交
  • c++-base
  • ActionPeice-ICML2025-谷歌deepmind-生成式推荐中上下文感知分词技术
  • 深入浅出:RS232、RS485、UART、Modbus与差分信号、共模信号的那些事儿
  • 力扣刷题(第八十五天)
  • dubbo源码学习3-dubbo反射调用服务源码分析
  • Unity开发中常用的洗牌算法
  • 数据结构——散列表
  • 数据结构栈的实现(C语言)
  • C语言--原码、反码、补码转换
  • 知识宇宙-思考篇:AI大模型如何重塑软件开发流程?
  • Sentinel+nacos实现push模式规则持久化
  • Java生产带文字、带边框的二维码
  • matplotlib:饼图、环形图、爆炸式饼图
  • 五、深度学习——CNN
  • Raft 代码分析
  • 基于STM32F412+RT-Thread的智能汽车CAN通信仪表盘
  • 深度学习-卷积化
  • Kerberos5 安装
  • 2025XYD Summer Camp 7.11 模考
  • scrapy项目开发流程
  • jQuery 头像裁剪实现
  • 若依前后端分离Vue3版本接入阿里云OSS
  • GoC之汉诺塔绘制
  • JavaSE重点知识
  • 【文献阅读】DEPTH PRO: SHARP MONOCULAR METRIC DEPTH IN LESS THAN A SECOND
  • 【王树森推荐系统】行为序列02:DIN模型(注意力机制)
  • 第10讲——一元函数积分学的几何应用
  • 第八讲~~数据库技术