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

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

主要步骤

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

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

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

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

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

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

创建多个城堡:

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

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

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

实现击中目标时的反馈以及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.xdnf.cn/news/15226.html

相关文章:

  • 8. JVM类装载的执行过程
  • 【读书笔记】《C++ Software Design》第二章:The Art of Building Abstractions
  • c++反射实现
  • Python ExcelWriter详解:从基础到高级的完整指南
  • 网络安全初级--搭建
  • python的婚纱影楼管理系统
  • Redis Geospatial 功能详解及多边形包含判断实现
  • SpringAI实现聊天记录保存到MySQL
  • 「日拱一码」025 机器学习——评价指标
  • Spring 框架中的设计模式:从实现到思想的深度解析
  • C++类模板继承部分知识及测试代码
  • 在 Android 库模块(AAR)中,BuildConfig 默认不会自动生成 VERSION_CODE 和 VERSION_NAME 字段
  • Linux之Zabbix分布式监控篇(一)
  • 云原生技术与应用-生产环境构建高可用Harbor私有镜像仓库
  • 网络通信模型对比:OSI与TCP/IP参考模型解析
  • BGP 路由优选属性(7)【MED】官方考试综合实验题【bgp】【acl】【ip-prefix】【route-policy】【icmp 环路】精讲
  • Frida绕过SSL Pinning (证书绑定)抓包;Frida注入;app无法抓包问题解决。
  • 哔哩哔哩第三方TV-BBLL最新版
  • Pyqt5 FlexRay
  • Redis事件机制
  • 特辑:Ubuntu,前世今生
  • Claude code在Windows上的配置流程
  • 基于Opencv的缺陷检测实战
  • cuDNN 的 IMPLICIT_GEMM 算法
  • 深入理解设计模式:建造者模式详解
  • Spring Boot 2.4+中bootstrap.yml加载顺序的源码深度解析
  • NLP:RNN文本生成案例分享
  • 常用控件QWidget
  • 第10讲——一元函数积分学的几何应用
  • 关于解决win 11安装mathtype报错的问题(toolbar.eql)