创建
方法一:在编辑器面板创建
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName ="MyScriptableObject/GameInfo")]
public class GameInfo : ScriptableObject
{
public string PlayerName;
public int Score;
public int Level;
public override string ToString()
{
return string.Format("name:{0} score:{1} level:{2}", PlayerName, Score, Level);
}
}
点击之后会创建一个以
.asset
为后缀的资源,Inspector 面板是这样的:方法二:在代码中创建
ScriptableObject.CreateInstance(typeof(GameInfo)) as GameInfo;
这样会返回一个临时对象,结束运行之后就没了
使用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScriptableObjectTest : MonoBehaviour
{
[SerializeField]
private GameInfo _gameInfo;
[SerializeField]
private GameInfo _gameInfo2;
private GameInfo _gameInfo3;
[SerializeField] Material _material;
void Start()
{
// 材质等资源,在代码中被修改的话,结束运行也是被修改之后的结果
_material.SetColor("_Color", Color.black);
Debug.Log(_gameInfo.ToString()); // name:烂烂 score:10 level:2 ,这里的烂烂是在编辑器中赋的值
_gameInfo.PlayerName = "喵喵"; // 结束运行之后在 _gameInfo 的编辑器中查看,已经变成了 "喵喵"
Debug.Log(_gameInfo2.ToString()); // name:花花 score:5 level:1
_gameInfo3 = ScriptableObject.CreateInstance(typeof(GameInfo)) as GameInfo; // 临时量,除非保存到了本地
}
}
总之,将其理解为是一种数据资源就可以了,在游戏中被更改的话,那么就会被更改,就像上面的材质球一样,运行过一遍之后,它就是黑的了。
网友评论