unity配置.asset⽂件
转载:
创建ScriptableObject类⽂件,它不属于编辑器脚本,运⾏时也可以⽤,相当于配置⽂件:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Setting : ScriptableObject
{
public string serverIp = "127.0.0.1";
public string serverPort = "5566";
public bool isDebug = true;
}
创建asset配置⽂件,注意:⽣成asset⽂件的路径需要使⽤相对路径,绝对路径⽆效,从Assets路径开始的相对路径,CreateAssetFile类要放在Editor⽂件下,属于编辑器脚本:
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
public class CreateAssetFile : UnityEditor.Editor {
const string assetsFolderName = "AssetFiles";
[MenuItem("Editor/CreateSetingAsset")]
static void CreateAsset()
{
// 实例化类
Setting asset = ScriptableObject.CreateInstance<Setting>();
// 如果实例化 Bullet 类为空,返回
if (!asset)
{
Debug.LogWarning("Bullet not found");
return;
样板房设计装修}
// ⾃定义资源保存路径
string path = Application.dataPath + "/"+ assetsFolderName +"/";
// 如果项⽬总不包含该路径,创建⼀个
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
//将类名 Setting 转换为字符串
//拼接保存⾃定义资源(.asset)路径
path = string.Format("Assets/"+assetsFolderName+"/{0}.asset", (typeof(Setting).ToString()));
// ⽣成⾃定义资源到指定路径
AssetDatabase.CreateAsset(asset, path);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
读取asset配置⽂件:
//第⼀种:通过AssetDatabase.LoadAssetAtPath加载
Setting assetFromEditor = AssetDatabase.LoadAssetAtPath<Setting>("Assets/AssetFiles/Setting.asset"); Debug.Log(assetFromEditor.serverIp);
//第⼆种:通过Resources.Load加载
Setting assetFromResources = Resources.Load<Setting>("Setting");
Debug.Log(assetFromResources.serverPort);
在游戏开发中,经常会⽤到⼀些配置⽂件保存⼀些数据,然后项⽬运⾏中读取这些配置⽂件中的数据在游戏中使⽤。
如:配置⾎条:根据⾓⾊类型(⼈物、动物、怪物等)配置不同的⾎条,包括⾎条⼤⼩,⾎条名或⾎
条预设,⾎条颜⾊等⼀些简单数据。如:配置⼦弹:⼦弹类型(真⼦弹、假⼦弹、追踪⼦弹等),⼦弹速度,伤害数值,⼦弹关联的特效等。
诸如此类的配置很多种,可创建⼀个可序列化的类存储数据,或者创建 XML 、JSON ⽂件保存数据,创建 Excel ⽂件,创建 TXT ⽂件,皆可完成需求,灵活使⽤这些⽅法保存配置数据。
在此介绍⼀下使⽤可序列化类保存配置,并且将可序列化类保存成Unity的⾃定义⽂件(.asset),然后配置⾃定义⽂件(.asset)。
优点:
可以保存数据类型多样(int、string、Vector3、GameObject、Transform、Texture等)如关联预设,关联图⽚等资源数据,⽽XML、TXT等只能保存(int、string、Vector3 等基本数据类型)。
缺点:
如果配置数据中保存了(GameObject、Texture)等资源数据,当关联的资源被删除时,配置数据将丢失,需要重新将新的资源再次关联到配置数据上。
⽣成asset⽂件:
[Serializable]
public class Bullet : ScriptableObject { // Bullet 类直接继承⾃ ScriptableObject
}
public class CreateAsset : Editor {
// 在菜单栏创建功能项
[MenuItem("CreateAsset/Asset")]
static void Create()
{
// 实例化类 Bullet
ScriptableObject bullet = ScriptableObject.CreateInstance<Bullet>();
// 如果实例化 Bullet 类为空,返回
去泰国旅游要带什么
if (!bullet)
{
Debug.LogWarning("Bullet not found");
return;
}
// ⾃定义资源保存路径
string path = Application.dataPath + "/BulletAeeet";
// 如果项⽬总不包含该路径,创建⼀个
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
//将类名 Bullet 转换为字符串
//拼接保存⾃定义资源(.asset)路径
辣椒用什么肥料path = string.Format("Assets/BulletAeeet/{0}.asset", (typeof(Bullet).ToString()));
// ⽣成⾃定义资源到指定路径
AssetDatabase.CreateAsset(bullet, path);
}
露得清毛孔细致化妆水}
简介
在游戏开发中,我们经常要对⼀些数据预先配置,⽐如不同⾓⾊的属性,武器的各项数值等等,⼀般可通过XML配置. 此外还可以⽤Unity⾃带的.Asset资源配置⽂件配置数据,下⾯介绍⼀下如何灵活快速的创建.Asset⽂件并使⽤.
转载请注明出处
相⽐XML配置⽂件, Asset⽂件更加直观⽽且⽀持直接配置如 GameObject、Sprite、AudioClip等更加⾼级的对象,基本上除了接⼝、事件都可以通过Asset⽂件配置 , 所以说灵活性上⽐XML要更强⼀点.
插件演⽰
⾸先创建⼀个继承于ScriptableObject 类的对象
[System.Serializable]
public class DemoConfig : ScriptableObject {
public string userName;
public int userID;
public GameObject userObject;
public Sprite sprite;
public AudioClip audioClip;
public void print() {
打印机安装程序Debug.Log(string.Format("name: {0} id: {1}" , userName , userID));
}
}
使⽤UConfig创建对应的Asset⽂件
配置各项属性
创建Asset⽂件
创建Asset⽂件的核⼼代码只有⼀句, 那就是通过ScriptableObject.CreateInstance()⽅法, 这个⽅法允许传⼊⼀个类名并创建对应的资源配置⽂件,以下代码如下.
static void CreateAsset()
{
//class_Name表⽰类名 , config_Name表⽰要创建的配置⽂件名称 , file_floder表⽰创建路径
if (class_Name.Length == 0 || config_Name.Length == 0 || file_floder.Length == 0)
{
Debug.LogError(string.Format("[UConfig]: 创建失败 , 信息不完整!"));
return;
}
ScriptableObject config = ScriptableObject.CreateInstance(class_Name);
if (config == null)
二舅是哪里人{
Debug.LogError(string.Format("[UConfig]: 创建失败 , 类名⽆法识别! --> {0}", class_Name));
return;
}
/
/ ⾃定义资源保存路径
string path = file_floder;
//如果项⽬总不包含该路径,创建⼀个
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
config_Name = config_Name.Replace(".asset", "");
path = string.Format("{0}/{1}.asset", file_floder, config_Name);
string defFilePath = "Assets/" + config_Name + ".asset";
// ⽣成⾃定义资源到指定路径
AssetDatabase.CreateAsset(config, defFilePath);
File.Move(Application.dataPath + string.Format("/{0}.asset" , config_Name), path);
AssetDatabase.Refresh();
Debug.Log(string.Format("<color=yellow>[UConfig]: 创建成功 ! --> {0}</color>", path));
configWindow.Close();
}
读取配置好的Asset⽂件
通过以上⽅式创建的配置⽂件可以作为⼀个与Prefab资源对待, 并且可以随其他prefab资源⼀样被打成AssetBundle包动态加载 , 理所当然的可以实现所谓的热更配置表.
加载的代码就⽤ Resources.Load(“fileName”); 就可以了,也可以预先挂着到某⼀个代码的属性中,然后直接通过as强转.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论