问题标签 [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.
function - Unity:向 Scriptable Object 添加自定义函数
我想添加到我的项目 CardSO - 一个可编写脚本的对象。我想给它起一个名字、点数和一些卡片的特殊行为。如何向 SO 字段添加功能?对于大多数卡片,它可以是空的(或者只是返回 0),我希望我可以编写一个函数来获取 List 并返回 int。有什么想法吗?
我当前的代码布局:
谢谢你!
c# - 已解决:ScriptableObject 将 PropertyDrawer 数组重置为零长度
由于我完全没有想法,我想我会在这里发布,以防有人知道为什么会这样。
我有一个名为 Behavior 的简单类,它保存一个字符串和一个字符串数组。它看起来像这样:
正如您可能已经预料到的,这个类是为了保存一个方法,以便可以将方法插入统一检查器。Methodname 是插入的方法的名称,而 Parameters 是以静态实用程序类可以读取的方式格式化的该方法的所有参数(这些字符串被转换为对象,然后用作参数。所以一个字符串“i25 " 将转换为 25 的整数参数。该数组是一个字符串,因为 object[] 无法序列化,因此无法保存。
我将剔除所有不必要的逻辑并专注于出了什么问题。让我们假设我们想要将一个整数保存到参数数组的第一个索引中。行为的 PropertyDrawer 将如下所示:
DataConverter 简单地将对象转换为字符串,反之亦然(因此 int n = 9 将变为“i9”或“i255”将变为对象 x = 255)。所有这些逻辑都有效。
再次澄清:这是PropertyDrawer的Behavior。行为是ScriptableObject中的私有 [SerializedProperty] 。
如果数组为空,则 if == null 触发并将数组参数设置为长度为 1。后面的逻辑一切正常,我们可以从 EditorGUILayout 为 int 字段赋值,并且那里的值正确保存到数组中。所有这些逻辑都有效。
但是:有些东西正在改变行为的参数数组。我相信这个东西是ScriptableObject。下一帧,Parameters 不再为空(显然),我们尝试访问索引位置 0。这导致索引超出范围异常,因为某些内容将 Parameters 更改为新字符串 [0]。他们没有将其设置为 null,而是将其长度设置为 0。
为什么?什么可能触发这个逻辑?如果我将参数设置为属性并在设置方法中设置断点,除了上面我自己的代码之外没有其他人调用它,但数组的长度仍然为 0。有什么想法吗?
下面的答案是正确的:代码没有被正确应用,因此被序列化过程覆盖。必须添加 BeginProperty() 和 EndProperty()。
对于将来发现此问题的任何人,最终代码如下所示:
unity3d - 使用每个脚本 Unity 的值复制 ScritableObjects
我正在使用 MLAPI 制作多人游戏。问题是,我有一个能力系统,所以每个能力都通过一个 ScritableObject 执行。问题是,如果我在场景中有例如五个玩家,所有玩家都被引用到同一个 ScritableObject。所以当有人执行一项能力时。其他玩家也在这样做。所以我的问题是我是否可以复制我的默认能力 ScritableObject,以便每个玩家都有自己的能力 ScritableObject,但具有与默认能力 ScritableObject 相同的值。我必须通过脚本做到这一点。我知道我可以创建一个新的 ScritableObject,然后创建一个粘贴我的值的方法。但也许有人有更好的主意?????????
c# - Unity 我可以从可编写脚本的对象中实例化游戏对象吗?
我希望每把弓都射出我在创建时在 SO 中设置的不同箭头。我需要每个弓来射击 SO 中指定的箭头预制件。
WeaponConfig 有[SerializeField] public GameObject projectile;
我希望能够换出不同箭头的字段,因此每种新武器都可以发射不同的箭头,我将在检查器中设置这些箭头。
拍摄脚本:
在我的实例化中,我arrowPrefab
将其设置为脚本顶部的游戏对象。
我将其更改为什么,以实例化预期的射弹?
如果我将其更改为下面的代码,则表示它没有对象引用。
我在检查器中的 Projectile 插槽中填充了我想要射击的预期箭头。每个都选择了不同的预制件。如何在 SO 中实例化分配的箭头?