Unity Asset 序列化

本文介绍如何在Unity中使用ScriptableObject创建可编辑的Asset,包括创建自定义类、通过菜单创建Asset实例及读取Asset数据的方法。通过示例代码展示了如何在编辑器中创建和读取包含整型ID、字符串名称和整型列表的Asset。

首先需要创建一个类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "testAsset",menuName = "createAsset",order = 100)]//菜单按钮  第二个参数是菜单的名字 第三个是菜单上的顺序
public class assetSerialize : ScriptableObject {//这个类需要继承ScriptableObject

    public int ID;
    public string name;
    public List<int> list;
 
   }

这个类写完之后呢 会出现
在这里插入图片描述

点击之后就可以创建Asset
在这里插入图片描述
如何读取呢

void readAsset()
{
assetSerialize assets = UnityEditor.AssetDatabase.LoadAssetAtPath(“Assets/testAsset.asset”);//读取所创建的路径
Debug.Log(assets.ID);
Debug.Log(assets.name);
foreach (var item in assets.list)
{
Debug.Log(item);
}
}
在这里插入图片描述

Unity中动态生成脚本通常不是直接通过代码完成的,因为Unity本身不支持程序内部动态创建新的C#脚本文件。但是,你可以利用Unity Package Manager (UPM) 或者在运行时通过反射API来间接实现类似的功能,比如从文本资源或其他外部数据源加载预定义的脚本。 如果你有一个预先存在的脚本模板,可以这样操作: 1. **使用Unity Package Manager(UPM)**[^1]: - 创建一个包含脚本模板的Asset(如`.txt`或`.cs`文件)。 - 使用脚本生成工具(如描述的Unity软著脚本生成工具),将这些脚本转换成Unity Package内的资源。 - 在游戏中,通过读取这个资源并解析其内容来生成新的脚本实例。 ```csharp // 示例代码(假设你有读取脚本文件的方法) string scriptContent = ReadScriptFromResource("MyScriptTemplate.txt"); // 创建新的脚本实例 byte[] bytes = Encoding.UTF8.GetBytes(scriptContent); UnityEngine.Object newScript = Resources.LoadGameObjectAtPathAsBytes("MyNewScriptPath", bytes); ``` 2. **使用Reflection API**: - 在游戏启动时或特定条件下,从字符串或者其他数据结构构建一个新的脚本字符串。 - 创建一个新的`MonoBehaviour`实例,并设置它的`klass`属性为新脚本的内容。 - 将新脚本附加到场景中的某个物体上。 ```csharp string scriptClassDefinition = "public class MyDynamicScript : MonoBehaviour"; // ... 进行编译和创建脚本实例 Type newScriptType = Type.CreateType(scriptClassDefinition); GameObject newObj = new GameObject(); newObj.AddComponent(newScriptType); ``` 请注意,以上示例仅适用于简单的脚本创建,对于复杂的逻辑可能需要额外处理和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值