深大计算机游戏开发 实验二
主要步骤
地面、摄像机、平行光设置以及创建弹弓和弹丸预设:
完成基础场景的搭建,确保游戏环境的光照和视角合理。创建弹弓和弹丸的预设,为后续的发射机制做准备。
弹丸的实例化以及实现摄像机自动跟踪弹丸:
实现弹丸的动态生成。设置摄像机自动跟踪弹丸,增强游戏体验。
单朵云以及多朵云的生成:
实现多朵云的生成以及移动,丰富游戏背景。
创建多个城堡:
创建多个城堡,为游戏目标提供多样化的场景。
实现弹丸的多次发射以及轨迹生成:
实现弹丸的多次发射机制。记录弹丸的运动轨迹,为玩家提供参考。
实现击中目标时的反馈以及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 方法),而橡皮筋会复位到初始状态。
实验结论或心得体会
在游戏运行时我发现历史轨迹的颜色一直与当前的轨迹颜色一样,最后发现是材质设置需要改动,不然就会默认和当前的轨迹材质一样。