Unity使用代码生成ScriptableObject数据并赋值之后,重启数据就没有啦!

2024年8月14日早,因数据持续化存储,重启电脑后数据会丢失,而我找不到原因被领导质疑了,故写一片博客记录这个错误。

省流

使用在编辑器的play模式中为ScriptableObject赋值之后,需要使用

#if UNITY_EDITOR
       UnityEditor.EditorUtility.SetDirty(_ScriptableObject);
       //_ScriptableObject是需要保存的ScriptableObject 对象
#endif

保存,否则会在重启电脑之后清空数据。但是自己赋值,复制的数据不会消失。

Unity数据保存使用ScriptableObject

例子:
创建一个ScriptableObject,如果继承自ScriptableObject的对象中包括另外一个对象,那么那个对象应被标记为:[System.Serializable]。
否则是看不到的。对象都应该被标记为[System.Serializable],除了继承自ScriptableObject的对象。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "ScriptTestSetData", menuName = "ScriptableObjects/ScriptTestSetData")]
public class ScriptTestSetData : ScriptableObject
{
    public List<SriptDateItem> sriptDateItems = new List<SriptDateItem>();
}

[System.Serializable]
public class SriptDateItem
{
    public string Name = "";

    public string Description = "";

    public List<Student> students = new List<Student>();
}

[System.Serializable]
public class Student
{
    public string Tall;
    public string Sex;

}


写入数据

using System.Collections.Generic;
using UnityEngine;

public class TestScriptableObj : MonoBehaviour
{

    public ScriptTestSetData scriptTestSetData;
 

    private void Start()
    {

        List<SriptDateItem> aaa = new List<SriptDateItem>(); ;

        for (int j = 0; j < 5; j++)
        {
            SriptDateItem sriptDateItem = new SriptDateItem();
            sriptDateItem.Name = "名称" + j.ToString();
            sriptDateItem.Description = "";
            sriptDateItem.students = new List<Student>();
            for (int i = 0; i < 3; i++)
            {
                Student student = new Student();
                student.Tall = "11" + i.ToString();
                student.Sex = "iiii" + i;
                sriptDateItem.students.Add(student);
            }
            aaa.Add(sriptDateItem);
        }
        scriptTestSetData.sriptDateItems = aaa;
    }
}

右键创建一个对象
在这里插入图片描述

创建一个空物体并挂载脚本,将上面的创建的对象拖拽并赋值,然后运行,ScriptableObject就会被赋值。
在这里插入图片描述

但是重启电脑之后就没有啦:

在这里插入图片描述

当您在Unity中点击运行后,模型消失的问题可能有多种原因。以下是一些常见的可能原因和解决方法: 1. 场景设置问题:请确保场景中的相机位置和视野范围正确设置,并且模型没有超出相机的视野范围。您可以尝试将相机重置为默认位置,并查看模型是否可见。 2. 材质或着色器问题:检查模型使用的材质和着色器是否正确设置。请确保材质和着色器与模型兼容,并且没有任何错误或警告。 3. 碰撞器设置问题:如果模型使用了碰撞器组件,请确保碰撞器正确设置,并且不会导致模型在运行时被隐藏或移除。 4. 脚本问题:如果您使用了脚本来控制模型的可见性,检查脚本是否正确编写并附加到正确的游戏对象上。确保脚本中的逻辑没有导致模型在运行时被隐藏。 5. 资源丢失丢失链接:检查模型所需的资源是否正确导入,并且没有丢失链接。如果资源丢失或链接错误,Unity可能无法正确显示模型。 6. 其他设置问题:检查项目设置、渲染设置、图层设置等是否与模型的可见性相关。确保这些设置正确配置,以便模型在运行时可见。 如果您尝试了以上方法仍然无法解决问题,建议您检查Unity的控制台窗口,看是否有任何错误或警告信息提供更多线索。您还可以尝试在Unity社区或论坛上寻求帮助,以便其他开发者能够提供更具体的解决方案。 希望这些信息对您有所帮助!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值