【Unity配置数据文件】ScriptableObject核心应用

news2025/1/12 11:58:33

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 专栏交流🧧
🟥Unity100个实战基础✨🎁
🟦 Unity100个精华一记✨🎁
🟩 Unity50个demo案例教程✨🎁
🟨 Unity100个精华细节BUG✨🎁

在这里插入图片描述

在这里插入图片描述


文章目录

    • 前言
    • 🎶一、ScriptableObject配置数据
        • 1.脚本继承和构建
        • 2.生成配置文件
        • 3.在Inspector窗口修改
        • 4.和其他脚本进行关联即可
    • 🎶二、ScriptableObject复用数据
    • 🎶三、ScriptableObject多态行为
    • 🎶四、ScriptableObject单例管理器
    • 🅰️系统路线学习点击跳转


前言


🎶一、ScriptableObject配置数据


  • 比起那些XML,Json等数据持久化方法来说,配置文件更加方便

  • 也非常适合来做技能编辑器、关卡编辑器

  • 应用场景:在选角色面板的时候,法师,战士,射手这些需要不同数据进行配置,如果用数据 持久化的方法,我们即要用序列化和反序列化来存取,但是用ScriptableObject来配置文件就特别的方便,直接在Inspector窗口中进行修改

1.脚本继承和构建

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------
//-------功能: 游戏中角色信息的配置
//-------创建者:         -------
//------------------------------
[CreateAssetMenu(fileName = "roleinfo", menuName = "ScriptableObject/对象数据", order = 0)]
public class roleData : ScriptableObject
{
    [System.Serializable]
    public class  roleInfo
    {
        public string name;
        public int attack = 30;    //敌人的攻击力
        public int defence;              //防御力
        public float hp = 300f;     //血量
        public bool isDied = false;     //死亡判断
    }
    public List<roleInfo> data = new List<roleInfo>();
}
  
  
2.生成配置文件

在这里插入图片描述

3.在Inspector窗口修改

在这里插入图片描述

在这里插入图片描述

4.和其他脚本进行关联即可

在这里插入图片描述


🎶二、ScriptableObject复用数据


  • 使多个对象共用一个内存空间,节约性能消耗
  • 应用场景:当你需要实例化多个子弹对象时,由于每个子弹里面都有其对应的数据(如速度等),那么在他们被创建出来的时候,这些相同的数据也被创建了多次,此时只要用ScriptableObject配置文件去装载一份数据,就可以达到复用数据,减少内存消耗的目的了
    在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能: 子弹的复用数据配置信息
//-------创建者:         -------
//------------------------------

[CreateAssetMenu(fileName = "bulletinfo", menuName = "子弹数据", order = 0)]

public class bulletData : ScriptableObject
{
   
    public int attack = 20; //技能命中攻击力为20
    public EnemyController enemyController;
    public BossController bossController;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


🎶三、ScriptableObject多态行为


  • 利用里氏替换原则和依赖倒转原则,进行更加便捷的数据配置,来便捷功能的实现(更为直观和便捷)

如:实现道具使用,道具类为抽象基类,各种效果道具为子类,利用ScriptableObject可进行道具效果的配置

  • 1.首先构建抽象父类继承ScriptableObject

(那么为什么要用到抽象父类呢,一般用到抽象父类的原则是,不实例化和改变父类,只改变子类中的规则)

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

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

//-------------------------------
//-------功能:   道具基类
//-------创建者:         -------
//------------------------------
public abstract class BaseEffect : ScriptableObject
{
    public ParticleSystem particleSystem; //使用道具时播放的特效
    public abstract void UseEffect(GameObject obj);
}


  • 2.子类继承抽象父类,更改相应的规则即可
    (可以是单个效果道具,也可是随机效果道具)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能: 加血的道具
//-------创建者:         -------
//------------------------------
[CreateAssetMenu] //需在面板中创建数据文件
public class AddHPEffect : BaseEffect
{
    public int addBlood = 50;
    public ParticleSystem particleSystem; //使用道具时播放的特效
    public override void UseEffect(GameObject obj)
    {
       ///使用加血的效果
    }
}

  • 3.关联时直接拖拽子类的数据配置文件进行关联即可

🎶四、ScriptableObject单例管理器


  • 适用于数据的管理。 数据是只用不变的时候
  • 前提

1.所有的 数据资源文件都放在 Resources文件夹下的ScriptableObject文件夹中(也可以自定义)
2.配置资源文件名 和类名是一样的

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

public class SingleScriptableObject<T> :ScriptableObject where T:ScriptableObject
{
    private static T instance;

    public static T Instance
    {
        get
        {
            if (instance == null)
            {              
                instance = Resources.Load<T>("ScriptableObject/" + typeof(T).Name);
            }
            if(instance==null)
            {
                instance = CreateInstance<T>();
            }
            //可添加数据持久化的功能
            return instance;
        }
    }
}

🅰️系统路线学习点击跳转


👨‍💻 Unity程序基础学习路线🧧
⭐【Unityc#专题篇】之c#进阶篇】🎁
⭐【Unityc#专题篇】之c#核心篇】🎁
⭐【Unityc#专题篇】之c#基础篇】🎁
⭐【Unity-c#专题篇】之c#入门篇】🎁
【Unityc#专题篇】—进阶章题单实践练习🎁
⭐【Unityc#专题篇】—基础章题单实践练习🎁
【Unityc#专题篇】—核心章题单实践练习🎁

你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1896044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国标GB28181视频汇聚平台LntonCVS视频监控安防平台与国标协议对接解决方案

应急管理部门以“以信息化推动应急管理能力现代化”为总体目标&#xff0c;加快现代信息技术与应急管理业务深度融合&#xff0c;全面支持现代应急管理体系建设&#xff0c;这不仅是国家加强和改进应急管理工作的关键举措&#xff0c;也是应对日益严峻的应急管理形势和满足公众…

c语言函数递归与迭代详解(含青蛙跳台阶问题详解)

文章目录 前言1. 递归是什么递归的思想递归的限制条件 2. 两个例子举例2&#xff1a;求n的阶乘分析&#xff1a;实现进一步分析 举例2&#xff1a;顺序打印一个整数的每一位分析代码实现 3. 递归与迭代举例3&#xff1a;求第n个斐波那契数 4. 拓展问题&#xff1a;青蛙跳台阶 前…

GPT-5的飞跃:从高中生到博士生,人工智能将如何重塑我们的未来?

文章目录 每日一句正能量前言GPT-5技术突破预测算法进步理解力提升推动行业发展社会影响结论 智能系统人类协作智能系统与人类协作的未来&#xff1a;GPT-5的角色与展望辅助决策增强创造力复杂任务处理人机协同的未来图景结论 迎接AI技术变革策略教育策略职业发展策略政策制定策…

探索视频合成新境界:加快加长视频生成,PAB加速与ExVideo延展技术介绍

一、摘要 随着人工智能技术的不断进步&#xff0c;视频合成领域正迎来前所未有的发展机遇。本文介绍近期两项视频生成方向的创新技术&#xff1a;PAB&#xff08;Pyramid Attention Broadcast&#xff09;和ExVideo。这两篇文章合在一起主要介绍如何提升视频生成的速度与长度&a…

无人直播系统源码开发使用流程-支持抖音,快手,视频号,小红书,美团

AI自动直播系统&#xff1a;该系统集成了丰富的可个性化文案库&#xff0c;具备独特而吸引人的内容。它能够自主进行语音讲解&#xff0c;并在直播过程中与观众进行有效的互动。此外&#xff0c;系统还支持团购商品的自动上架和下架&#xff0c;以及与之配套的推广话.集星云推是…

【C#】函数方法、属性分文件编写

1.思想 分文件编写是面向对象编程的重要思想&#xff0c;没有实际项目作为支撑很难理解该思想的精髓&#xff0c;换言之&#xff0c;一两个函数代码量因为太少无法体现分文件编写减少大量重复代码的优势。 2.项目结构介绍 整项目的名称叫AutoMetadata&#xff0c;是一个基于W…

(论文版)深度学习 | 基于 VGG16-UNet 语义分割模型的猫狗图像提取研究

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本实验本项目基于 VGG16-UNet 架构&#xff0c;利用 Labelme 标注数据和迁移学习&#xff0c;构建高效准确的猫狗图像分割模型。通过编码器-解码器结构&#xff08;特征提取-上采样&#xff09;提升分割精度&#xff0c;适应不同…

vue+openlayers之几何图形交互绘制基础与实践

文章目录 1.实现效果2.实现步骤3.示例页面代码3.基本几何图形绘制的关键代码 1.实现效果 绘制点、线、多边形、圆、正方形、长方形 2.实现步骤 引用openlayers开发库。加载天地图wmts瓦片地图。在页面上添加几何图形绘制的功能按钮&#xff0c;使用下拉列表&#xff08;sel…

SLAM 精度评估

SLAM 精度的评估有两个最重要的指标&#xff0c;即绝对轨迹误差&#xff08;ATE&#xff09;和相对位姿误差&#xff08;RPE&#xff09;的 均方根误差&#xff08;RMSE&#xff09;: 绝对轨迹误差:直接计算相机位姿的真实值与 SLAM 系统的估计值之间的差值&#xff0c;首先将…

Modbus通信协议学习——调试软件

Modbus通信协议是一种广泛应用于工业自动化领域的串行通信协议&#xff0c;由Modicon公司&#xff08;现为施耐德电气Schneider Electric&#xff09;于1979年开发。该协议已成为工业电子设备之间通信的通用标准&#xff0c;支持多种设备和系统之间的数据交换。以下是对Modbus通…

【内网渗透】从0到1的内网渗透基础概念笔记

目录 域 域的介绍 单域 父域和子域 域树 域森林 域名服务器 活动目录 活动目录介绍 域内权限 组 域本地组 全局组 通用组 总结 示例 A-G-DL-P策略 重要的域本地组 重要的全局组、通用组 安全域划分 域 域的介绍 Windows域是计算机网络的一种形式&#xf…

零基础学习MySQL---库的相关操作

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、创建数据库 1.语法 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] .…

vscode(七):设置不同括号有不同颜色

一、打开vscode 的setting界面 输入 bracket pair &#xff0c;将Editor › Guides: Bracket Pairs这一项设置为true 二、效果 不同括号对具有不同的颜色

系统提示我未定义与 ‘double‘ 类型的输入参数相对应的函数 ‘finverse‘,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【Linux】多线程(互斥 同步)

我们在上一节多线程提到没有任何保护措施的抢票是会造成数据不一致的问题的。 那我们怎么办&#xff1f; 答案就是进行加锁。 目录 加锁&#xff1a;认识锁和接口&#xff1a;初始化&#xff1a;加锁 && 解锁&#xff1a;全局的方式&#xff1a;局部的方式&#xff1a…

rtpengine_mr12.0 基础建设容器运行

目录 Dockerfile rtpengine.conf 容器内编译安装 RTPEngine 正常提供功能 1. 启动RTPEngine服务 2. 删除 RTPEngine服务 3. 加载内核模块 检查所有进程是否正在运行 上传到仓库 博主wx&#xff1a;yuanlai45_csdn 博主qq&#xff1a;2777137742 后期会创建粉丝群&…

地埋RF射频电子标识器探测仪ED8000(V400版)使用操作说明之1测量准备工作

地埋RF射频电子标识器探测仪ED8000&#xff08;V400版&#xff09;是一台集成了多频率、多种ID标识器调制模式、高低灵敏度调节、可读写标识器等全功能、高性能电子标识器探测仪。它有着极高的灵敏度,同时具备良好的噪声抑制能力&#xff0c;不仅适合专业测绘人员&#xff0c;普…

监控平台—Zabbix对接grafana

目录 一、安装grafana并启动 二.浏览器访问 三、导入zabbix数据&#xff0c;对接grafana 四.如何导入模版 一、安装grafana并启动 添加一台服务器192.168.80.102 初始化操作 systemctl disable --now firewalld setenforce 0 vim /etc/selinux/config SELINUXdisabled cd /…

东哥教你如何用Orange Ai pro为家里做一个垃圾分类检测机器

前言 最近入手了一块香橙派&#xff08;Orange Ai Pro&#xff09;的板子&#xff0c;他们的口号是&#xff1a;为AI而生&#xff0c;这让一个算法工程师按捺不住了&#xff0c; 之前主要是在RKNN和ESP32等设备上部署AI模型&#xff0c;看到官方介绍的强大AI算力&#xff0c;很…

入门PHP就来我这(纯干货)08

~~~~ 有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 1 PHP对象的高级应用 1.1 final关键字 final 最终的、最后的。被final修饰过的类…