问题标签 [scriptable-object]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
48 浏览

unity3d - Unity 可编写脚本的对象仅序列化统一对象

我正在尝试制作一个拼写系统。我的系统基类如下所示:

然后我有另一个从 MagicBook 扩展的类,我在其中覆盖了 OnActivate 函数。我现在的问题是在检查器中只有变量 bookSprite 显示,所有其他值都不存在。我尝试在变量前面添加一个 [SerializeField] 并在扩展类中将它们定义为新的。但他们仍然没有表现出来。有谁知道他们为什么不显示或我该如何解决这个问题?

感谢您的帮助和时间。

0 投票
1 回答
504 浏览

unity3d - Unity(自定义编辑器)退出 Unity 时保存数据

我创建了一个简单的自定义编辑器,显示我在 Unity 上花费了多少时间。当按下它上面的按钮时,它会在 Scriptable Object 中记录开始时间(它很脏)。再次按下按钮时,记录结束时间。如果在按下按钮之前窗口已关闭,我使用 OnDestroy() 方法完成录制。它有效(我也使用“ExecuteInEditMode”)。问题是:如果我在不按下按钮的情况下关闭 Unity,则 OnDestroy() 方法这次不起作用。有没有什么办法解决这一问题?

0 投票
1 回答
263 浏览

unity3d - 带有继承的 ScriptableObject 构建错误,但在 Unity 编辑器中运行良好

这是我收到的错误: 在此处输入图像描述

错误在这一行。:

我应该注意,该错误仅在我构建游戏时发生。当我在编辑器中运行游戏时,它不会发生。

我相信错误来自试图在他们的库存中为玩家提供武器。

因为这运行良好:

这不会:

唯一的区别是苹果是一件物品,而 Sword2 是一件武器……我有理由相信构建期望加载的是物品而不是武器。(Weapon 是 item 的子项。item 继承 ScriptableObject)。

这是武器和物品的代码(对不起大文件):

0 投票
1 回答
2691 浏览

c# - 如何在文件夹中找到所有可编写脚本的对象,然后从其中加载一个变量?

我的统一项目中有一个文件夹,位于“Resources/ScriptableObjects/Skins”下。我需要获取文件夹中的所有对象,为索引生成一个随机数,然后将精灵分配给脚本附加到的现有游戏对象。我得到的当前错误是第 151 行的“NullReferenceException:对象引用未设置为对象的实例”,但我正在第 149 行创建对象的实例。什么给出了?这是我将文件夹中随机脚本对象中的精灵分配给脚本所绑定的游戏对象的函数:

这是可编写脚本的对象:

0 投票
1 回答
644 浏览

unity3d - ScriptableObject,添加了一个字段,资产不更新,怎么办?

ScriptableObject 类中新添加的字段未放入其类型的资产中。这与 Scriptable Objects 的工作方式有关吗?有没有办法在不丢失已填充字段中的现有信息的情况下更新可编写脚本的对象资产?

我的 ScriptableObject 类有一堆动画字符串:

我通过这个类创建了一个 ScriptableObject 资产,并将名称添加到字符串中,并将其用作另一个对象类型中的数据,该对象类型使用这些字符串。

刚才,在 ScriptableObject 类中添加了第四个字符串,所以现在看起来像这样:

但它没有在 ScriptableObject 资产中看到/更新,并且没有明显的方法来更新此资产。

这是 ScriptableObjects 的限制,还是有其他问题?

0 投票
1 回答
551 浏览

unity3d - 重命名时可编写脚本的对象重新排序父/子

我是如何到达这里的:我一直在研究一种工具,该工具使用具有子可编写脚本对象的可编写脚本对象。该系统运行良好,但是当我重命名 SO 时,Unity 中的父/子关系中断。

我现在已经设法将其归结为一个非常简单的案例研究。

使用下面的代码,您可以创建一个 Container SO 资产。然后使用 MyMenu 创建容器的子数据。所有这些都按预期工作,项目中的关系是:

容器 -> 数据

但是,一旦将 Container SO 重命名为其他名称,Unity 就会重新排序 Parent Child,以便 Data 现在是 Parent 而 Container 是 Child:

数据 -> 容器

以下是应该重复此问题的代码(Unity 2020.1.17f1 - 在 2020.1.8 上也有相同的结果)

容器.cs

数据.cs

自定义编辑器.cs

笔记

  • 起初我认为这是名称空间的问题,但事实并非如此
  • 认为这可能是一个装配问题,但现在基本类的情况并非如此
  • 关闭/打开项目结果相同
  • 重命名后资产文件相同

如果您遇到过这种情况,我很想知道我在这里做错了什么,我的工具几乎完成了,这阻止了我推出它。谢谢!

0 投票
0 回答
469 浏览

c# - 为什么我在 ScriptableObject 中设置的布尔值没有在另一个脚本中更新?

我的布尔值有一个我不明白的问题。我有一个源自 MonoBehavior 的动作脚本。在该脚本中,我有一个布尔变量“IsCompleted”,它将指示攻击是否完成。在 Awake 中,我将此 bool 设置为 true,表示没有攻击正在运行。在另一个从 ScriptableObject 派生的脚本 - ScriptableAttack 中,我有一个函数,它是攻击的主要部分。在那里我编辑这个值并将其设置为 false。然后,如果条件好,我想在 bool 再次设置为 false 之后运行一个计时器。现在,由于我不能在 ScriptableObject 上使用典型的 Update 方法,我想在我拥有的第三个脚本中检查这个值是否为 false - CharacterSettings - 它派生自 MonoBehavior。现在的问题是,当我在 CharacterSettings 脚本中的 Update 上检查该值时,它总是返回 true,而我发现它在 ScriptableAttack 中确实为 false。我还检查了我是否在某处覆盖了这个值但找不到任何东西。我在这里写下的用法是我的应用程序中唯一的用法。也许有人可以帮助或至少向我解释这种行为。

这是 ScriptableObjects 函数的基础:

进一步说明:Actions 是一个脚本,它基本上包含 SO 和 IsCompleted 布尔值。它看起来像这样:

CharacterSettings 脚本是每个战斗机(其中有两个)附加的脚本。在那里我想做这样的事情:

其中 timer 是 0 的浮点值,attackExecutionTimer 是 SO 中设置的浮点参数。

来自 SO 的 Attack() 在 Input.GetKeyDown 上调用。

0 投票
1 回答
87 浏览

c# - 为什么布局组上实例化的最后一个元素显示为第一个且错误?

我正在统一编写纸牌游戏,并且需要将绘制的纸牌显示在由水平布局组绑定的 UI 区域上,这些纸牌是预先编写并在绘制时显示的可编写脚本的对象,但由于某种原因是牌组的最后一张纸牌我创建和洗牌显示为随机不同的卡片,并作为该区域的第一个孩子移动。

我尝试检查所有涉及的功能的逻辑,我发现删除洗牌解决了问题,但是在调试洗牌功能时,我发现一切都按预期工作,所以我断定这一定只是一个图形问题。我也尝试过添加布局元素和内容大小调整器,但没有用。我将在下面留下 DrawCards、CreateDeck 和 Shuffle 函数,以供参考。更新:用静态手和牌组重写 DrawCards 函数也不能修复它。

0 投票
1 回答
546 浏览

unity3d - 可编写脚本的对象是否会导致 Unity 编辑器滞后?

所以为了简单起见,我在我的项目中使用 ScriptableObject ,突然间我试图再添加一个,编辑器变得如此滞后,以至于我无法继续处理该项目,这太烦人了......

我在我的 Unity 项目中手动创建了很多 ScriptableObject。我的程序很简单,我只是从我的 Assets 文件夹中加载我的 ScriptableObject,然后对它们进行处理。

我主要有 3 种 ScriptableObject 类型:

  • 提取(包含字符串、纹理和音频)
  • 主题(包含一个枚举值和一个提取列表)
  • Oeuvre(包含一个字符串和一个主题列表)

ScriptableObject 上链接的数据位于 Assets 的另一个文件夹中。

我尝试从 Unity 2019.4.14f1 升级到 2020.3.4f1 并且......没有任何改变,太多的延迟无法正确执行任何操作,每次单击文件夹时就像几秒钟编辑器在冻结时开始显示一条消息(而不是根本不显示任何东西,只是不响应)它说ProjectBrowser.OnGUI.repaint带有进度条。

在这一点上,我开始观察到只有在我浏览项目中的一些 ScriptableObject 时才会出现延迟,当我想在场景中编辑一些 c# 脚本或游戏对象时,消息永远不会出现,并且编辑器像以前一样流畅。

在这一点上,当编辑器开始滞后时,我现在有大约 200 个 ScriptableObject。

也许我做错了什么?问题是否来自 ScriptableObject 相互引用?如果有人能给我一个提示会很棒:)

我正在使用 project2D,如果它可以帮助...

提前致谢。

0 投票
1 回答
221 浏览

c# - 用随机变量实例化 scriptableobject

我刚开始使用 scriptableobject,我正在尝试实例化/创建一个非常基本的 scriptableobject 的实例,它有 4 行数组。

我正在尝试实例化我创建的一个脚本对象,每次创建他都会随机化他的变量

我在检查器中为一个可脚本对象所做的更改,每次创建新对象时,他的内部变量都会发生变化。有没有可能实现?