【问题标题】:How to set a game object from hierarchy to a prefab. unity如何将游戏对象从层次结构设置为预制件。统一
【发布时间】:2022-07-17 22:42:31
【问题描述】:

我有一个名为 audiomananger 的脚本,它是一个可编写脚本的对象,我需要在其上放置一个滑块,因此当我更改滑块值时,音量也会如此,但我无法将滑块从层次结构拖动到预制件,任何帮助表示赞赏. 谢谢。

【问题讨论】:

  • 您可以将滑块设置为音频管理器的子级。
  • 我不确定它会起作用我会尝试
  • 我不能,因为我的预制件不是游戏对象,而是可编写脚本的对象

标签: c# unity3d


【解决方案1】:

您不能在脚本对象内的场景中引用游戏对象,因为它是非理性的并且忽略了类独立性。例如,当您将Scribtable Object 资产文件从项目复制/粘贴到外部时,无法找到它的引用,因此它们不用作 Asset Bundle。 Scribtable Object 的用途是存储日期,它们本身用作参考而不是参考接收器。为此,您必须使用 Prefab 中的 MonoBehavior 类。

MonoBehavior:特殊的统一类,支持运行时事件,可以存储为实例,该类的实例可以在场景或项目中检索数据但是类体中数据的存储是有限的.

Prefab:可以将资产数据和 MonoBehaviour 存储在它们的体内,Perfab 不属于特定的游戏对象或单一行为,只要它们是它们的一部分,就可以从其他游戏对象中引用他们自己,父母或孩子的。

Scribtable Object:该类用于在项目过程中存储和处理数据,可以克隆和防止数据被复制。它是可分割的,但数据在所有引用中均等存储,因此最好将其用于存储设置或配置文件等公共信息。如上所述,对场景的引用不是类的条件。

纯 C# 类:这些类也在 C# 中,可以是数据的一部分。虽然它不能在代码之外进行配置,但对于总结编程阶段非常有用。

【讨论】:

    【解决方案2】:

    只需在 MusicSlider 和 SoundSlider 变量上方放置一个 Range() 属性。 https://docs.unity3d.com/ScriptReference/RangeAttribute.html.

    Unity 会将这些显示为滑块,然后在 ScriptableObject 定义文件中显示。想想 Scriptables,而不是类或实例。如果您在运行时(通过代码或在编辑器中)更改文件,则新值可用。

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多