首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Unity中,我已经为音量做了一个有效的滑块,可以在场景改变时保持它的值。当游戏构建完成时,它不再保存值。

在Unity中,你可以使用PlayerPrefs来保存音量滑块的值。PlayerPrefs是Unity提供的一种简单的持久化数据存储方式,可以用来保存游戏的配置信息、用户偏好等。

首先,在滑块数值发生改变时,你需要将其保存到PlayerPrefs中。可以使用PlayerPrefs.SetFloat()方法来保存浮点数值,例如:

代码语言:txt
复制
float volume = // 获取滑块的值
PlayerPrefs.SetFloat("Volume", volume);

在游戏构建完成时,你可以在适当的时机调用PlayerPrefs.Save()方法来确保保存的值被持久化到磁盘上,例如:

代码语言:txt
复制
PlayerPrefs.Save();

当游戏重新启动时,你可以在适当的位置读取保存的音量值,并将其应用到音量滑块上,例如:

代码语言:txt
复制
float volume = PlayerPrefs.GetFloat("Volume");
// 将volume的值应用到音量滑块上

这样,即使游戏重新启动,音量滑块的值仍然可以被正确地恢复。

关于PlayerPrefs的更多信息,你可以参考腾讯云的Unity官方文档:Unity - PlayerPrefs

请注意,以上答案仅供参考,具体实现方式可能因项目需求而有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Unity基础教程系列(三)——复用对象(Object Pools)

但大部分时候,一些物体游戏中被创建,它也应该可以被销毁。现在让我们让销毁形状变为可能。 1.1 销毁物体快捷键 创建形状已经有了一个键,所以添加一个键来销毁一个形状是有意义。...既然我们DestroyShape方法是有效,那么玩家按下destroy键可以Update调用它。 ? 1.3 保持列表正确 我们现在能够创建和销毁对象。...(最大设置10) 2.4 设置创建速度 滑块已经生效了,你可以播放模式调整。但它还没有影响到任何东西。必须先给游戏添加一个创造速度,以便对一些东西进行控制和改变。...我们给它一个默认公共CreationSpeed属性。 ? 滑块检查器底部有一个改变(单个)框。表示滑块值更改后调用一列方法或属性。...为此添加一个float字段到游戏中。达到1,创建一个新形状。 ? 通过添加从最后一帧开始时间,Update增加进度,该时间可以通过time . deltatime获得。

2.7K10

Unity基础教程系列(七)——可配置形状(Variety of Randomness)

1.3 保存角速度 此时,我们还没有保存角速度。加载游戏还是会得到具有任意角速度形状,因为回收形状会保持其原有速度。因为保存角速度需要更改文件格式,所以请将保存版本增加到4。 ?...形状颜色之后写下角速度。 ? 保存版本足够高,还要加载读取角速度。保存较早游戏因为没有角速度,请使用零向量。 ? 1.4 一次性更新所有形状 添加形状旋转功能之前,我们不需要更新形状。...GameFixedUpdate方法,遍历形状列表并调用每个形状新GameUpdate。在生成新形状之前,一开始就执行此操作。这样可以使行为与我们游戏早期版本保持一致。 ? ?...这是通过调用带有给我们位置和标签EditorGUI.PrefixLabel来完成标签占用空间,该方法返回一个修改后区域,该区域我们提供了其余UI剩余空间。 ? ?...这样可以防止变成蓝色,并在你使用Tab键在编辑器逐步浏览UI控件可以将其跳过。 ? ? (现在只会高亮选中框了) 最后,完成后,我们应该将缩进级别和标签宽度恢复其原始

2.6K30

Unity基础教程-物体运动(十)——环境交互(Movement with Consequences)

一个物理步长,我们都要检查区域内碰撞器是否仍然有效。添加一个碰撞器列表循环FixedUpdate方法。如果一个碰撞器计算false,这意味着游戏对象已经被销毁。...如果不是的话,我们就需要检查游戏对象是否被禁用了,这一点我们可以通过游戏对象active属性来发现。如果碰撞器不再有效,则将其从列表删除并递减循环迭代器。如果列表空,则调用退出事件。...游戏对象没有被销毁而组件被销毁,情况也是如此,但是我们仍然什么都不做。 我们只需要在编辑器播放进行检查,就可以将代码包装在#if UNITY_EDITOR和#endif。 ?...因此,我们将创建一个专用于该AutomaticSlider组件。可配置持续时间必须正。当我们使用它为物理对象设置动画,我们将使其FixedUpdate方法增加其,并确保它不会溢出。...一旦达到1,我们就可以完成可以禁用滑块。 ? 再一次,我们将使用Unity事件使它能够附加行为到滑动条。本例,我们需要一个变化事件,我们将使用它来传递滑块的当前

3K10

Unity基础系列(二)——构建一个视图(可视化数学)

然后再把函数和时间关联起来,从而产生一个运动图像。 本教程假设您已经完成了“游戏对象和脚本”相关教程,对Unity有了基础了解,并且Unity版本至少要在2017.1。 ?...执行x=x*y形式操作可以将其缩短x*=y,这适用于对两个相同类型操作数进行操作所有操作符。 ? 更进一步,一个数字增加或减少1可以将其缩短++x或--x。 ?...(自定义数量) 通过改变这个自定义来调整视图分辨率,可以通过修改inspector面板完成。然而,并非所有整数都是有效或者有意义。至少,它们都必须是正。...(分辨率滑块) 这是否意味着这个只能以10-100限? 不是的。它所做只是Unity面板上使用滑块可以得到范围。除此之外,它不会以任何其他方式影响分辨率。...(Graph子节点) 一个父对象被设置Unity将尝试将对象保持原来世界位置、旋转和缩放。而我们现在情况并不需要。可以直接通过向SetParent提供第二个参数false来决定。

2.7K10

Unity基础教程系列(六)——更多游戏状态(Saving All That Matters)

可以用Random.value,但必须确保这些来自它们自己随机序列。为此,游戏中添加一个主随机状态字段。游戏开始,将其设置为由Unity初始化随机状态。 ?...玩家开始一个游戏,第一步就是恢复主随机状态。然后获取一个随机并使用它作为种子,InitState方法里,通过random初始化一个伪随机序列。 ?...为了跟踪主要随机序列进展,请在获取下一个后存储状态,然后再为新游戏初始化状态。 ? 现在正在加载游戏,并且你每个游戏中所做事情不再影响同一会话其他游戏随机性。...最简单方法是向GameLevel添加一系列持久对象,我们可以设计关卡场景进行填充。 ? 现在GameLevel可以保存很多这样物体,然后保存每个物体,就像Game形状列表所做那样。...(Level3) 3.4 游戏重新加载 现在,加载关卡,序列索引会恢复,但是玩家同一关卡开始新游戏目前不会重置。解决方案是在这种情况下也加载关卡,从而重置整个关卡状态。 ?

1.2K20

Unity基础教程系列(新)(二)——构建视图(Visualizing Math)

此外,可以修改游戏对象实例,从而覆盖预制。请注意,播放模式下,预制件与实例之间关系会断开。 我们将使用脚本来创建预制实例,这意味着我们不再需要当前场景预制实例。...是的,但是进入播放模式后,Unity始终将游戏窗口强制置于前台。如果游戏窗口与场景窗口共享一个面板,则该场景窗口将被隐藏。但是你仍可以播放模式下切换回场景窗口。...而且,以后为视图制作动画,我们也需要一直调整这些材质。尽管此方法有效,但效率不是很高。如果我们可以使用直接使用位置作为其颜色单一材质,那就更好了。不幸是,Unity没有这种材质。...我们可以通过将surface设置Surface来使看起来更像默认材质。平滑度我们配置函数0.5。着色器,我们不必浮点上添加f后缀。 ? 现在,该材质不再是完全无光泽。...将其命名为URP。这还将自动渲染器创建另一个资产,例子URP_Renderer。 ? ?

2.5K50

Unity Demo教程系列——Unity塔防游戏(五)情境(Waves of Enemies)

仅在引用其序列有效,因此请提供一个带有sequence参数构造方法。 ? (嵌套状态,引用自己序列) ? 每当我们要开始处理序列,就需要为其获取一个状态实例。...当我们唤醒并在更新其他游戏状态之前Update对其进行处理,我们将简单地开始该情境。 ? 从现在开始,配置场景将在游戏开始后立即运行。它会一直进行到完成为止,然后什么也不做。 ?...我们将简单记录此事实,并在进行场景之前立即开始新游戏。但是,只有开始生命有效情况下才这样做。这使我们可以使用零来启动运行状况,这样就不可能失败,这对于方案测试非常方便。 ?...4.1 循环波 向GameScenario添加一个配置滑块,以获取周期数,默认情况下设置1。将最小设置零,这将使方案无休止地重复。那将创造一个无法获胜生存场景,重点是看玩家能持续多久。...4.2 加速 如果玩家已经击败了一个周期,他们应该能够再次击败而没有问题。我们必须增加难度以保持方案挑战性。最简单方法是减少连续周期中所有冷却时间。

1.4K10

Unity基础教程系列(新)(一)——游戏对象和脚本(Creating+a+Clock)

(隐藏对象) 眼睛旁边手状图标有什么作用? 这样就无法通过场景窗口选择游戏对象,同时又保持可见。 2 构建一个简单时钟 现在我们项目已正确设置,可以开始创建时钟了。...本例将它设为纯黑色,十六进制000000。将时针X刻度减少到0.3,Y刻度增加到2.5。然后改变X位置0,Y位置0.75,所以指向第12小,但也有点相反方向。...(调整秒针Transform) 让我们通过为创建单独材质来使秒针与众不同。给它一个深红色,十六进制B30000。另外,完成时钟构建后,关闭了场景窗口中网格。 ?...这意味着Unity保存场景,应该将其包含在场景数据,这是通过将所有数据按顺序(序列化)并将其写入文件来实现。...此过程称为转换,是通过在要转换前面的圆括号内写入新类型来完成。 ? ? (模拟时钟) 现在,你已经知道了Unity创建对象和编写代码基础。下一个教程是构建视图。

4.2K20

Unity基础教程系列(新)(三)——数学表面(Sculpting with Numbers)

当然也可以显示其他数学函数。你可以更改代码,功能也会随之更改。甚至可以Unity编辑器处于播放模式执行此操作。执行将暂停,保存当前游戏状态,然后再次编译脚本,最后重新加载游戏状态并恢复播放。...每次完成一行,我们都必须将x重置零。x等于分辨率,一行就结束了,因此我们可以循环顶部使用if块来解决这一问题。然后使用x代替i来计算X坐标。 ?...若要快速选择一个摄像机位置,你可以处于播放模式场景窗口中找到一个视点,退出播放模式,然后使游戏摄像机与该视点匹配。...使用默认渲染管线,阴影已经看起来可以接受了,但是现在阴影表现为近距离查看视图,阴影投射很远。 可以通过转到Quality项目设置并选择一个预配置级别来默认渲染管线选择质量级别。...与之前一排点相比,网格包含更多点。分辨率50时候,它有2500点。分辨率100下,具有10,000点。为了获得最佳性能,最好同时只看到一个场景游戏窗口。

1.4K40

基础渲染系列(四)——光照(Unity

表面漫反射光量取决于光线照射到该物体角度。表面以0°角直击,大多数光会反射。随着该角度增加,反射将减少。90°不再有光照射到表面,因此会保持黑暗。...(点积) 2.1 Clamped 灯光 表面指向光,计算点积有效,但光背离时候,则无效。在这种情况下,表面逻辑上会处于其自身阴影,并且根本不应该接收任何光。...Unity着色器不对观测方向插吗? 会差值。Unity着色器顶点程序中计算视觉方向并对其进行插。归一化是片段程序完成,或者功能不强硬件顶点程序完成。两种方法都可以。...但是,在线性空间中渲染,单个不会被Unity自动伽玛校正。我们可以使用Gamma属性来告诉Unity,它也应该将gamma校正应用于金属滑块。 ?...你可以通过下载Unity包含文件或在Unity安装中找到文件来查看它们。他们UnityStandardBRDF。 这些函数需要大量数学运算,因此不再赘述。

2.5K20

Unity可编程渲染管线系列(十)细节层次(交叉淡化几何体)

但是,显而易见是,这可能会分散注意力,尤其是部分场景移动,因为模式视觉上保持固定。可以通过对抖动模式进行动画处理来模糊处理此事实,并及时对其进行有效加扰,从而使其成为易于忽略噪声。...我们可以尝试通过对抖动模式使用固定动画速度来缓解这种情况。为此,向MyPipelineAsset添加一个滑块选项,范围0–120,默认每秒30帧。...但是,当在编辑器而不是播放模式下工作,仅发生更改时才渲染新帧。这意味着当我们什么都不做,抖动模式保持不变,但是当我们执行一项使人分心动作突然改变。...Unity可以根据构建中包含场景中使用内容自动从构建中删除一些关键字。我们案例,受影响关键字是LIGHTMAP_ON,DYNAMICLIGHTMAP_ON和INSTANCING_ON。...这样可以将所有内容捆绑在一个对象实例,而我们可以通过一条语句来销毁。 现在,我们可以看到构建中包含多少个着色器变体。有多少取决于所包含场景

3.7K31

Unity基础教程系列(十二)——更复杂关卡(Spawn,Kill,and Life Zones)

某些东西进入到带有此组件游戏对象触发器,该方法将被调用,collider将作为一个参数。 ? 在此方法,用collider检索形状组件。如果存在,就消灭。 ?...这种内存分配只发生在Unity编辑器,因为动态地创建一个错误消息字符串,即使没有被使用。它不会在构建中发生,这就是为什么对构建进行概要分析而不是只在编辑器中进行概要分析很重要原因之一。...你可以永远保存,因为它不会妨碍任何事情。一旦你确定没有旧场景留下,就可以删除。仅仅打开一个场景并直接保存它是不够,你需要做一些修改,这样编辑器才会决定是否需要重新编写场景资产文件。...设计一个关卡,删除对象是很常见,如果对象已经被添加到数组,就会产生麻烦。丢失对象会产生空指针,这些空指针将在游戏模式下生成异常。 ?...但是,设计一个未发布关卡,我们可以按照自己意愿做。因为缺少对象我们已经显示了一条消息,所以让我们更进一步,并提供一种简单方法来消除数组所有空引用。

1.6K51

Unity基础系列(五)——每秒帧率(测试性能)

预制体是一个不存在于场景且未被激活Unity对象或对象层次结构。你可以使用它作为模板,创建克隆并将它们添加到场景。要创建一个对象,可以像往常一样在场景构造一个对象,然后将其拖到项目窗口中。...可以使用一个while循环取代if检查来加速追赶漏产生核子,但是timeSinceLastSpawn 意外被设置,这将导致无限生产循环。将生产限制一个固定时间步骤是一个理智限制。...(Unity时间设置) 为什么低时间尺度下运动不流畅time scale被设置0.1这样,时间会移动得非常慢。由于固定时间步长是恒定,这意味着物理系统更新频率会降低。...或者,可以更改刚体部件模式,以便它们物理步骤之间进行插,从而隐藏较低更新频率。 2 使用Profiler 现在已经有了一个场景,并且最终能降低任何机器帧率,现在是衡量实际性能时候了。...所以,也要将数组设置私有,并赋予SerializeField属性,以便Unity在编辑器公开并保存。 ? 继续,添一些颜色!

2.6K20

Unity通用渲染管线(URP)系列(七)——LOD和反射(Adding Details)

这样可以进一步提高性能,但会导致物体会根据其视距大小突然出现或消失。可以添加一些中间步骤,最终完全剔除一个对象之前,先切换到细节较少可视化视图。通过使用LOD组,Unity可以完成所有这些事情。...1.1 LOD组 组件 你可以通过创建一个游戏对象并将LODGroup组件添加到场景来将LOD组添加到场景。...(环境探针) 2.3 粗略反射 粗糙度使镜面反射发生散射,它不仅降低了强度,而且使图像变得模糊,就好像没有聚焦。通过将环境图模糊版本存储较低Mip级别Unity可以近似此效果。...我们将其设置等于LitPassFragment滑块属性。 ? 最后,使用它来缩放我们IndirectBRDF中使用菲涅耳强度。 ? ?...(反射探头平台结构内部) 默认情况下,探针“Type”设置“Baked”,这意味着渲染一次,并且将立方体贴图存储构建中。您也可以将其设置“Realtime”,以使地图与动态场景保持最新。

4.3K31

Unity3D Editor自定义窗口、自定义组件学习分享

,如下所示: RequireComponent RequireComponent()属性会自动帮你添加你需要组件,如果已经存在则不再重复添加,且不能移除,如下所示: 提示:经过测试,发现一个问题...() EditorGUILayout.Slider()用于绘制一个滑块,从上可知: 第一个参数是滑块名字 第二个参数是滑块改变 第三和第四个参数是滑块范围 效果如下图所示: 进度条:...那是因为进度条最大1,如果不除100的话,滑块1,进度条便填满了,因此我们想让与进度条比例同步,那就除100吧(语文不好,不知道解释得如何)。...我们代码,用了一个 if 判断语句来判断,当我们点击该按钮所触发事件(该函数返回一个 bolol 类型),代码克森也上好备注了,因此也没有什么难,直接上效果图: #####SaveBug...好了,接下来让我们回到Unity查看一下效果: 好了,大伙们可以看到,已经完美的传入了,效果并不是完美期望那样。但是我们 My Int Apha 起作用了。

1.6K22

开发游戏如何操控 游戏打击感?利用好Feel插件可快速提升游戏

3.7 概率(Chance) 每个反馈都有一个 Chance 概率滑块,让我们定义发生概率,从0(永远不会发生)到100(总是发生)。 默认情况下,该总是100。...概率25%反馈每玩4次才会出现一次。 可以简单理解给该Feedback添加一个触发概率,控制该Feedback触发行为。...Constant Intensity恒定强度 游戏,MMFeedback会使用一个可选强度来调用它子MMFeedback,这是一个让你调节反馈“强烈”程度倍增器。...如果你有一个mmfeedback,根据强度会产生不同结果,这是很有用。例如,想象一款游戏中,你角色可能会受到伤害,你希望它在受到严重伤害以红色闪烁,受到轻微伤害以黄色闪烁。...一个“被损坏”mmfeedback可以一个ShaderController反馈,只有当强度0到50之间,才会将损坏角色染成黄色,而另一个ShaderController反馈,强度50到100

1.4K20

Unity基础教程系列——对象管理(二)对象多样化(Fabricating Shapes)

为此,setter有一个名为value适当类型隐式参数。 ? 通过使用属性,可以向看似简单检索或赋值添加额外逻辑。我们示例工厂实例化形状标识符,必须每个实例精确设置一次。...在那之后再设置它将是错误。 我们可以通过验证标识符赋值是否仍然具有默认来检查赋值是否正确。如果是,则赋值有效。如果没有,则记录一个错误。 ? 但是,0其实是一个有效标识符。...它将一个简单声明为常量,而不是字段。它不能被改变,也不存在于内存。相反,只是代码一部分,显式在编译过程中被引用和替换。 保存游戏,请先编写保存版本号。加载,请先阅读存储版本。...4 随机颜色 除了材质,我们还可以改变形状颜色。通过调整每个形状实例材质颜色属性来完成。 当然可以像之前一样,定义一组有效颜色并将它们添加到形状工厂,但是本例我们将使用不受限制颜色。...这就是这样一个着色器,你可以Unity GPU实例化手册页面上找到。唯一区别是删除了注释并添加了#pragma实例化选项assumeuniformscaling指令。

1.7K10

基础渲染系列(十一)——透明度

(选择渲染模式) 现在,我们可以完全不透明和抠图渲染之间切换。但是,即使不透明模式下,alpha截止滑块保持可见。理想情况下,仅应在需要显示。标准着色器也可以做到这一点。...默认-1,表示没有设置自定义,因此应使用着色器Queue标记。 ? (自定义渲染队列) 我们并不真正在乎队列的确切将来Unity版本,它们甚至可能会更改。...与添加pass一样,我们需要将新颜色添加到已经存在颜色。但是,又不能简单地将它们加在一起。混合应该取决于我们alphaalpha1,渲染完全不透明东西。...但是alpha,我们呈现内容是完全透明。如果是这样,我们不需要改变任何事情。然后,两次pass混合模式必须Blend Zero One 。...但是,反射所有光线,其alpha有效地变为1。当我们片段程序确定反射率可以使用它来调整alpha。给定原始 a和反射率r,修改后a变为1-(1-a)(1-r)。

3.5K20

Unity入门教程(上)

2,如果Unity曾经被启动过(比如我),窗口中央将不再显示New Project按钮,取而代之是曾经载入过项目文件列表。这时右上方NEW文本标签依然会显示,可以通过来创建项目。 ?...因为如果路径包含了文字,有可能导致Unity编辑器保存和读取文件出错。 三、创建地面(创建游戏对象) 1,在窗口顶部菜单依次点击GameObject→3D Object→Plane。 ?...2,场景视图中央将出现一个平板状游戏对象,同时层级视图中也增加了一项Plane(平面)。 ? 四、创建场景保存项目 1,观察Unity标题栏,能发现在最顶端文本右侧有一个“*”符号。 ?...把检视面板Transform标签下PositionX由0改为-2。 ? ? 七、运行游戏 再次保存我们项目文件(返回步骤四)。保存完成后,让我们把游戏运行起来。...4,运行游戏(运行前记得先保存) ? 十四、小结 本次学习主要使了解了使用Unity进行游戏开发基本流程:创建好可见物体(对象)→编写脚本控制它们动作→创建材质→调整尺寸→完成

3.4K70

最新iOS设计规范六|10大交互规范(User Interaction)

尤其是列表和选择器,必需能很简单地选择一个可以考虑将字段列表按首字母排序或是其它逻辑排列,以便于加快用户浏览和选择速度。 文本字段显示提示,以帮助传达目的。...用户熟悉标准手势,并不希望总是被迫学习不同手势来完成相同操作。游戏以及其他沉浸式APP,自定义手势可以成为用户体验中有趣一部分。...音量 无论是使用设备上物理按键还是屏幕上滑块,用户都希望能够改变音量大小来控制整个系统声音,包括音乐和APP内音效。...唯一例外是铃声音量其他音频没有被播放时候,总是可以被单独调节音量。 耳机 用户私下里喜欢使用耳机去接收声音,来解放他们双手。插入耳机时,用户希望声音能够自动进行转换到耳机并不中断。...拔下耳机时,他们则希望播放立即暂停。 设计出色音频体验 必要自动调整不同层级音量水平,但不是整体音量达到更好混合音效,你APP可以单独调整不同层级音频间相对音量以实现多种音频混合。

3.9K30
领券