【unity】学习制作2D横板冒险游戏-10-

实现游戏的屏幕触控

在画布中创建一个新的物体,用来装载移动端的摇杆和按键

修建图片素材

创建一个左手操作杆图片

选择对应的图片

修改Mobile Touch 的合适的大小和位置

操控杆应该在左侧

添加unity功能组件

进行设置

进入游戏,鼠标拖动操作杆,人物移动正常
设置一下透明度防止遮盖

创建右手按键子物体

调整大小和位置

创建图片最终效果如图

添加功能组件

从上到下分别对应北南西东

成功,但是不希望他在电脑上也会显示出来
在UIManager代码中进行修改

先获得组件

实例化、

在一开始启动时就进行检测

#if UNITY_STANDALONE 是一个预处理指令,它检查当前Unity项目的目标平台是否为独立平台(即非移动平台,如Windows、Mac OS X、Linux等)。
#endif 标记了预处理指令的结束。

运行测试,成功关闭了

切换平台

在unity hub 中下载移动平台

各个平台可供选择

下载完成后,在unity进行安装

选择平台并切换

运行后即可显示UI

暂停面板

创建一个新的面板

删掉图片改为黑色

创建一个slider用来控制音量

在slider中控制滑动条的时value值

控制音量的逻辑就是用Value值传递给混音工具

混音工具变量默认是无法访问的
将变量修改为可以访问

在此处有提示

并可以修改变量名称

进入AudioManager脚本获得变量

实例化

写一个传递value值即float值的SO事件

创建脚本

编写代码

创建事件

在slider中添加事件广播

在AudioManager中监听

注册注销方法代码如下
要注意string的名称要和刚才改的一样

但是音量是从-80db 到 20db 而进度条是从0 到 1 所以需要换算一下

拖动音量条成功调整音量

打开暂停面板

添加一个新的IMAGE,给他设置齿轮图片

给图片添加一个按钮

在UIManager中调用Button类型

实例化

但是button并没有显示出来
修改命名空间删掉using UnityEngine.UIElements;

实例化

可以在代码中进行点击的监听
settingButton.onClick.AddListener 是 Unity 中用于给按钮添加点击事件监听器的代码。在 Unity 的 UI 系统中,onClick 是一个 UnityEvent,可以通过 AddListener 方法来注册一个监听函数(委托)。当按钮被点击时,已注册的监听函数就会被调用。

点击后执行的是TogglePausePanel函数方法
GameObject.activeInHierarchy 是 Unity 中用于判断一个 GameObject(如 Panel)是否在场景中处于激活状态,并且是否在层次结构中的激活状态的属性。

暂停窗口开启时,时间流速是0,关闭时是1

经测试,功能运行成功,但是发现进度条和音量没有匹配
因此在暂停时,UI应广播现在进行了暂停,然后音量应进行广播当前的音量,并由音量进度条接收

创建一个Float事件

创建一个Void事件

在UIManager中进行广播,现在暂停了

在暂停的函数方法中执行

在AudioManager中进行监听

在AudioManager进行广播当前音量

注册注销函数方法如下

声明一个浮点类型的变量 value:用于存储获取到的音量数值。使用 mixer.GetFloat 方法获取主音量 ("MasterVolume") 的当前值,并存储到 value 中。触发一个事件 syncVolumeEvent,并将音量值 value 作为参数传递

由UI监听所传递的Float事件

注册注销对应方法如下

在方法中我们要获得进度条组件,然后将音量的值同步给他

具体方法如下

实例化,要全部实例化不要有遗漏

运行测试,现在成功可以同步音量了

修改一下小bug

人物在桥或者树枝这种较细碰撞体的模型上时,会出现腾空的状态

出现原因是因为人物的地面检测算法代码生成距离有些偏差,因此导致检测没有检测到碰撞体较细的树枝和桥

修改代码

成功解决

打包游戏

关于打包的工具,是选择的build setting

在build setting中我们需要选择一个基础场景

但是我们的场景都存放在Addressables Groups中,因此会出现错误

在场景中添加一个新的场景,用来打包的基础初始化场景

双击打开

删掉摄像机,创建一个该场景加载的物体做初始的加载

创建初始加载的脚本

编辑脚本如下
AssetReference 是 Unity Addressables 系统中用于引用可寻址资产(如场景、预制件、材质等)的一个类。
persistentScene 是一个公共字段,这意味着可以在 Unity 编辑器中为其赋值。通常,你会将一个场景资产拖到这个字段中。
Addressables.LoadSceneAsync(persistentScene) 是异步加载场景的方法。
LoadSceneAsync 方法属于Addressables类,用于异步加载一个场景。
persistentScene 是要加载的场景的引用。
这个方法调用后,场景会开始异步加载,这意味着加载过程不会阻塞主线程,游戏可以继续运行。

实例化

将该场景添加到BuildSettings

并将默认的场景右键移除

在Addressa中选择打包模式

Asset Database这个选项通常用于开发和调试阶段。它直接从Unity的Asset Database中加载资产,而不是从构建的文件中加载。
Simulate Groups这个选项通常用于测试Asset Bundles或Addressables的分组加载策略。通过模拟不同的组,您可以测试在不同的加载顺序和条件下应用的表现。
Use Existing Build这个选项用于从已经构建好的Asset Bundles或Addressables包中加载资产。这些构建文件通常是在项目发布前通过Unity的构建工具生成的。

将游戏资产打包

打包游戏素材

Sprite Atlas可以将多个精灵(Sprite)合并为一个单一的纹理(Texture),(将多张游戏素材合并为一张图片),从而减少绘制调用(Draw Calls)的数量,提高游戏的渲染性能

将素材添加进列表

调整压缩模式

打包

进行最后的打包设置

Player Default Icon(播放器默认图标)是指应用程序在目标平台上显示的图标

Player Default Cursor(播放器默认光标)是指应用程序在运行时默认使用的鼠标指针样式。

Fullscreen Mode(全屏模式)是一个重要的设置,它决定了应用程序在运行时是以全屏模式、窗口模式还是其他模式显示。

Virtual Reality Splash Image(虚拟现实启动画面)是Unity中用于在设备启动时显示的自定义图像。默认为unity logo

自定义添加属于自己的logo

设置完成后build打包游戏

posted @ 2025-03-29 15:39  plusu  阅读(154)  评论(0)    收藏  举报