ScriptableObject非常适合小数量的游戏数值。

使用ScriptableObject的时候需要注意,生成ScriptableObject数据文件需要自己写Editor代码实现。

大概的工作流程是:写一个ScriptableObject(继承ScriptableObject的类,相当于数据模板) → 使用自己写的Editor代码生成一个实现该模板的数据文件 → Inspector面板中编辑数据。

给出我的Editor代码:

using UnityEngine;
using System.IO;
using System.Collections;
using UnityEditor; public class Scriptablity : MonoBehaviour { public static T Create<T> ( string _path, string _name) where T : ScriptableObject { if ( new DirectoryInfo(_path).Exists == false ) {
Debug.LogError ( "can't create asset, path not found" );
return null;
}
if ( string.IsNullOrEmpty(_name) ) {
Debug.LogError ( "can't create asset, the name is empty" );
return null;
}
string assetPath = Path.Combine( _path, _name + ".asset" ); T newT = ScriptableObject.CreateInstance<T>();
AssetDatabase.CreateAsset(newT, assetPath);
Selection.activeObject = newT;
return newT;
} public static void Create<T>() where T : ScriptableObject { string assetName = "New " + typeof(T).Name;
string assetPath = "Assets";
if(Selection.activeObject) {
assetPath = AssetDatabase.GetAssetPath(Selection.activeObject);
if (Path.GetExtension(assetPath) != "")
{
assetPath = Path.GetDirectoryName(assetPath);
}
} bool doCreate = true;
string path = Path.Combine( assetPath, assetName + ".asset" );
FileInfo fileInfo = new FileInfo(path);
if ( fileInfo.Exists ) {
doCreate = EditorUtility.DisplayDialog( assetName + " already exists.",
"Do you want to overwrite the old one?",
"Yes", "No" );
}
if ( doCreate ) {
T T_info = Create<T> ( assetPath, assetName );
Selection.activeObject = T_info;
}
} public static void Create() { Debug.LogError("You should call 'Create' method like this : Create<ExampleData>();");
}
}

使用方法:

1.写个ScriptableObject。

public class Example : ScriptableObject {
public int id;
public string name;
}

2.写个MonoBehavior调用Create方法生成Example格式的数据。

public class ExampleItem: MonoBehaviour {

        [MenuItem("Example/Create/Example Data")]
static void CreatExample() { Scriptablity.Create<Example>();
} }

3.在Inspector面板编辑数据。

4.使用该数据

public class ExampleUsage : MonoBehavior {
public Example exampleInfo; void Start()
{
Debug.Log(exampleInfo.name);
} }

【Unity3d】ScriptableObject的简单用法的更多相关文章

  1. CATransition(os开发之画面切换) 的简单用法

    CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...

  2. jquery.validate.js 表单验证简单用法

    引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...

  3. NSCharacterSet 简单用法

    NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...

  4. [转]Valgrind简单用法

    [转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...

  5. Oracle的substr函数简单用法

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  6. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  7. TransactionScope简单用法

    记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...

  8. WPF之Treeview控件简单用法

    TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...

  9. listActivity和ExpandableListActivity的简单用法

    http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...

随机推荐

  1. 【[POI2010]ANT-Antisymmetry】

    开始复习字符串了 第一步肯定得是\(hash\) 首先理性分析一波不可能出现长度为奇数的反回文串,对称轴位置取反之后肯定和原来不相等了 我们可以枚举所有回文串的对称中心,之后我们发现这个样子是具有单调 ...

  2. programming-languages学习笔记--第5部分

    programming-languages学习笔记–第5部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} program ...

  3. Kali-linux破解操作系统用户密码

    当忘记操作系统的密码或者攻击某台主机时,需要知道该系统中某个用户的用户名和密码.本节将分别介绍破解Windows和Linux用户密码. 8.6.1 破解Windows用户密码 Windows系统的用户 ...

  4. ethersjs运行时出现的问题

    1.在运行部署在ganache1.1.0上的合约中的某个函数时,出现了这样的问题,之前部署在geth上时并没有这样的问题 userdeMacBook-Pro:test-ethers user$ nod ...

  5. Go并发与.Net TAP

    Go package main import "fmt" func sum(arrays []int, ch chan int) { fmt.Println(arrays) sum ...

  6. Mybatis Plus简介

    集成 MP Mybatis-Plus 的集成非常简单,对于 Spring,我们仅仅需要把 Mybatis 自带的MybatisSqlSessionFactoryBean替换为 MP 自带的即可. &l ...

  7. [LuoguP1363]幻想迷宫

    [LuoguP1363]幻想迷宫(Link) 现在有一个迷宫,从迷宫边界的任意一点可以走到对面,即:若都是路面,则可以从\((1, i)\)走到\((N, i)\).其余情况依旧.问是否可以从指定的起 ...

  8. UESTC - 1987 童心未泯的帆宝和乐爷 (第k短路 A*算法+SPFA算法 模板)

    传送门: http://www.qscoj.cn/#/problem/show/1987 童心未泯的帆宝和乐爷 Edit Time Limit: 10000 MS     Memory Limit: ...

  9. Xcode缓存数据清除

    1. 移除 APP 打包的ipa历史版本(Archives) 不可恢复,就是你打的包,如果需要dysm文件,及时备份 路径:~/Library/Developer/Xcode/Archives 2. ...

  10. Oracle 执行计划的查看方式

    访问数据的方法:一.访问表的方法:1.全表扫描,2.ROWID扫描                                二.访问索引的方法:1.索引唯一性扫描,2.索引范围扫描,3.索引全扫 ...