【Unity3d】ScriptableObject的简单用法
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的简单用法的更多相关文章
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...
- jquery.validate.js 表单验证简单用法
引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...
- NSCharacterSet 简单用法
NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...
- [转]Valgrind简单用法
[转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...
- Oracle的substr函数简单用法
substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串 subst ...
- Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...
- TransactionScope简单用法
记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...
- WPF之Treeview控件简单用法
TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...
- listActivity和ExpandableListActivity的简单用法
http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...
随机推荐
- 【[TJOI2010]电影迷】
一度自闭 这道题一看就是最小割无疑 我们假设源点\(S\)表示看这个电影,汇点\(T\)表示不看这部电影 如果一个电影的价值为正,我们就从源点点连一条容量为\(val\)的边,表示割掉这个边也就是选择 ...
- 解决Linux 安装python3 .5 解决pip 安装无法成功问题ssl安全拦截无法pip安装库问题
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not avail ...
- 使用Apache HttpClient 4.x发送Json数据
Apache HttpClient是Apache提供的一个开源组件,使用HttpClient可以很方便地进行Http请求的调用.自4.1版本开始,HttpClient的API发生了较大的改变,很多方法 ...
- App测试需要测什么
App,做为当下最热的手机安装软件,无论是产品本身的设计还是性能,易用性等都是非常受考验.一个app能在用户的手机上使用,并作为一个长期用户是非常不容易的.那么,App的测试中我们到底要测试什么呢? ...
- 信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level
四月 , :: 下午 org.apache.coyote.http11.AbstractHttp11Processor process 信息: Error parsing HTTP request h ...
- Oracle ddl 和 dml 操作
ddl 操作 窗口设置用户权限的方法 Oracle的数据类型 按住Ctrl点击表名 ,可以鼠标操作 插入的数据需要满足创建表的检查 主表clazz删除数据从表设置级联也会一同删除 有约束也 ...
- css一边固定,另一边自适应的方法
第一种: 第二种:
- 【转】:ZooKeeper真不是最终一致性的,而是顺序一致性
转:ZooKeeper真不是最终一致性的,而是顺序一致性 关键字:ZooKeeper / 分布式系统的一致性 我们可以这么理解 ZooKeeper,从整体(read 操作 +write 操作)上来说是 ...
- 什么是cookie,作用是什么? 以及session的理解
cookie: 1.定义:什么是cookie? cookie就是存储在客户端的一小段文本 2.cookie是一门客户端的技术,因为cookie是存储在客户端浏览器中的 3.cookie的作用:是为了 ...
- PhpStorm 克隆下来的项目改动,版本控制不起效果
打开的目录 —>多个 git项目—>版本控制无法监控. 打开的目录 —>一个 git项目—>版本控制可以监控.