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

在这里插入图片描述


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

👨‍💻 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#专题篇】—核心章题单实践练习🎁

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


在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NASA——quarius(水瓶座) L3 网格化 1 度年土壤湿度,第 5 版

Aquarius L3 Gridded 1-Degree Annual Soil Moisture V005 水瓶座 L3 网格化 1 度年土壤湿度&#xff0c;第 5 版 简介 该数据集包含美国国家航空航天局&#xff08;NASA&#xff09;科学应用卫星&#xff08;SAC-D&#xff09;上的宝瓶座被动微波辐射计得出的第 3 级网格化…

前端面试题5(前端常见的加密方式)

前端常见的加密方式 在前端进行数据加密主要是为了保护用户的隐私和提升数据传输的安全性。前端数据加密可以采用多种方法&#xff0c;以下是一些常见的加密技术和方法&#xff1a; 1. HTTPS 虽然不是直接的前端加密技术&#xff0c;但HTTPS是保障前端与后端数据传输安全的基…

【BUUCTF-PWN】12-get_started_3dsctf_2016

32位&#xff0c;开启了NX保护 执行效果&#xff1a; main函数&#xff1a; 其中gets()函数存在栈溢出&#xff0c;溢出距离为0x38&#xff0c;这里是使用的esp寻址&#xff0c;属于外平栈&#xff0c;不需要覆盖ebp的四个字节。而之前做的题一般都是ebp寻址&#xff0c;…

Golang | Leetcode Golang题解之第216题组合总和III

题目&#xff1a; 题解&#xff1a; func combinationSum3(k int, n int) (ans [][]int) {var temp []intvar dfs func(cur, rest int)dfs func(cur, rest int) {// 找到一个答案if len(temp) k && rest 0 {ans append(ans, append([]int(nil), temp...))return}/…

【Python机器学习】模型评估与改进——二分类指标

目录 1、错误类型 2、不平衡数据集 3、混淆矩阵 与精度的关系。 准确率、召回率与f-分数 分类报告 4、考虑不确定性 5、准确率-召回率曲线 6、受试者工作特征&#xff08;ROC&#xff09;与AUC 二分类可能是实践中最常见的机器学习应用&#xff0c;也是概念最简单的应…

3.Charles抓包工具学习

目录 1.使用Charles抓取https2.将抓包导入到postman3.抓包导入到JMeter4.抓小程序的包-只能电脑4.断点设置-前置断点-修改请求数据5.断点设置-后置断点-修改服务器响应6.Mock设置7.模拟弱网8.如何抓取移动端APP9.简单的压力测试 1.使用Charles抓取https 2.将抓包导入到postman …

开始尝试从0写一个项目--后端(一)

创建文件的目录结构 利用这个界面创建 序号 名称 说明 1 SEMS maven父工程&#xff0c;统一管理依赖版本&#xff0c;聚合其他子模块 2 sems-common 子模块&#xff0c;存放公共类&#xff0c;例如&#xff1a;工具类、常量类、异常类等 3 sems-pojo 子模块&#x…

硅纪元视角 | AI纳米机器人突破癌症治疗,精准打击肿瘤细胞

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

打卡第2天----数组双指针,滑动窗口

今天是参与训练营第二天&#xff0c;这几道题我都看懂了&#xff0c;自己也能写出来了&#xff0c;实现思路很重要&#xff0c;万事开头难&#xff0c;希望我可以坚持下去。希望最后的结果是量变带来质变。 一、理解双指针思想 leetcode编号&#xff1a;977 不止是在卡尔这里…

深入探讨JavaScript中的队列,结合leetcode全面解读

前言 队列作为一种基本的数据结构&#xff0c;为解决许多实际问题提供了有效的组织和处理方式&#xff0c;对于提高系统的稳定性、可靠性和效率具有重要作用&#xff0c;所以理解队列是很重要的。 本文深入探讨JavaScript中的队列这种数据结构,结合leetcode题目讲解 题目直达…

接口测试工具Postman

Postman Postman介绍 开发API后&#xff0c;用于API测试的工具。在我们平时开发中&#xff0c;特别是需要与接口打交道时&#xff0c;无论是写接口还是用接口&#xff0c;拿到接口后肯定都得提前测试一下。在开发APP接口的过程中&#xff0c;一般接口写完之后&#xff0c;后端…

78110A雷达信号模拟软件

78110A雷达信号模拟软件 78110A雷达信号模拟软件(简称雷达信号模拟软件)主要用于模拟产生雷达发射信号和目标回波信号&#xff0c;软件将编译生成的雷达信号任意波数据下载到信号发生器中&#xff0c;主要是1466-V矢量信号发生器&#xff0c;可实现雷达信号模拟产生。软件可模…

TensorRT-Int8量化详解

int8量化是利用int8乘法替换float32乘法实现性能加速的一种方法 对于常规模型有&#xff1a;y kx b&#xff0c;此时x、k、b都是float32, 对于kx的计算使用float32的乘法 对于int8模型有&#xff1a;y tofp32(toint8(k) * toint8(x)) b&#xff0c;其中int8 * int8结果为in…

SpringBoot的热部署和日志体系

SpringBoot的热部署 每次修改完代码&#xff0c;想看效果的话&#xff0c;不用每次都重新启动代码&#xff0c;等待项目重启 这样就可以了 JDK官方提出的日志框架&#xff1a;Jul log4j的使用方式&#xff1a; &#xff08;1&#xff09;引入maven依赖 &#xff08;2&#x…

头歌资源库(20)最大最小数

一、 问题描述 二、算法思想 使用分治法&#xff0c;可以将数组递归地分割成两部分&#xff0c;直到数组长度为1或2。然后比较这两部分的最大、次大、次小、最小数&#xff0c;最终得到整个数组中的最大两个数和最小两个数。 算法步骤如下&#xff1a; 定义一个函数 findMinM…

uniapp/Android App上架三星市场需要下载所需要的SDK

只需添加以下一个权限在AndroidManifest.xml <uses-permission android:name"com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY"/>uniapp开发的&#xff0c;需要在App权限配置中加入以上的额外权限&#xff1a;

Generative Modeling by Estimating Gradients of the Data Distribution

Generative Modeling by Estimating Gradients of the Data Distribution 本文介绍宋飏提出的带噪声扰动的基于得分的生成模型。首先介绍基本的基于得分的生成模型的训练方法&#xff08;得分匹配&#xff09;和采样方法&#xff08;朗之万动力学&#xff09;。然后基于流形假…

2024 年 亚太赛 APMCM (B题)中文赛道国际大学生数学建模挑战赛 |洪水灾害数据分析 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; 完整内容可以在文章末尾领取&#xff01; 该段文字…

HTML内容爬取:使用Objective-C进行网页数据提取

网页爬取简介 网页爬取&#xff0c;通常被称为网络爬虫或爬虫&#xff0c;是一种自动浏览网页并提取所需数据的技术。这些数据可以是文本、图片、链接或任何网页上的元素。爬虫通常遵循一定的规则&#xff0c;访问网页&#xff0c;解析页面内容&#xff0c;并存储所需信息。 …

自动化立体仓库出入库能力及堆垛机节拍

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载 自动化立体仓库的出入库能力、堆垛机节拍以…