我的统一项目中的“Resources/ScriptableObjects/Skins”下有一个文件夹。我需要获取文件夹中的所有对象,为索引生成一个随机数,然后将精灵分配给脚本附加到的现有游戏对象。我收到的当前错误是第 151 行的“NullReferenceException:对象引用未设置为对象的实例”,但我正在第 149 行创建该对象的实例。这是我的函数,用于将文件夹中随机可脚本对象中的精灵分配给脚本所绑定的游戏对象:
void AssignRandomSkin(){
// Load all skins into memory
Object[] skinObjects = Resources.LoadAll("ScriptableObjects/Skins");
// Get length of list
int amountOfSkins = skinObjects.Length;
// Get random index of skin to assign
int skinToAssignIndex = Random.Range(0, amountOfSkins);
GameObject thisSkin = Instantiate(skinObjects[skinToAssignIndex]) as GameObject;
// Assign it to game object
gameObject.GetComponent<SpriteRenderer>().sprite = thisSkin.GetComponent<Sprite>();
}
Run Code Online (Sandbox Code Playgroud)
这是可编写脚本的对象:
using UnityEngine;
[CreateAssetMenu(fileName = "Skin", menuName = "ScriptableObjects/SkinObject", order = 1)]
public class SkinObject : ScriptableObject
{
public string spriteName; // Name of sprite …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的 ScriptableObject
在 Playmode 期间我调整 CurrenHealthValue
当我存在 Playmode 时,CurrentHealthValue=80 不会返回到 40,我知道这是 ScriptableObject 的工作原理,但我想知道是否有任何方法可以在存在 Playmode 后自动返回 40 原始值,而不是手动返回在开始新的 Playmode 之前将值重写为 40。
我有 3 种类型的预制件:A、B 和 C
在设计关卡时,在播放模式下,我将它们添加并放置在关卡中。
如何创建一个 ScriptableObject 来保存对这些预制件及其转换的所有实例的引用?
具体来说,在 PlayMode 中,Scriptable 对象应该动态响应 PlayMode 中预制件的位置和旋转变化。
我无法想象如何做到这一点,尽管这似乎是脚本化对象的一个很好的用途。