【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; //技能命中攻击力为20public 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.rhkb.cn/news/368894.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux进程通信】共享内存

目录 共享内存函数 头文件 shmget ftok函数​ shmat shmdt shmctl 共享内存区是最快的IPC 形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到操作系统内核&#xff0c;换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据…

探索如何赋予对象迭代魔法,轻松实现非传统解构赋值的艺术

前言 今天下午在网上冲浪过程中看到这样一个问题 面试题&#xff1a;如何让 var [a, b] {a: 1, b: 2} 解构赋值成功&#xff1f; 据说是某大厂面试题&#xff0c;于是我学习了一下这个问题&#xff0c;写下这篇文章记录一下。 学习过程 要想解决这个问题首先要知道什么是解…

Qt:7.QWidget属性介绍(cursor属性-光标形状、font属性-控件文本样式、tooltip属性-控件提示信息)

目录 一、cursor属性-光标形状&#xff1a; 1.1cursor属性介绍&#xff1a; 1.2获取当前光标形状——cursor()&#xff1a; 1.3 设置光标的形状——setCursor()&#xff1a; 1.4 设置自定义图片为光标&#xff1a; 二、font属性-控件文本样式&#xff1a; 2.1font属性介绍…

excel PivotTable 透视表

开发数据导出excel功能&#xff0c;设置导出透视表 数据源&#xff1a; 透视表&#xff1a; 使用插件EPPlus 数据源&#xff1a; IF OBJECT_ID(tempdb..#temptable) IS NOT NULLDROP TABLE #temptable; CREATE TABLE #temptable ( [PROJECT] varchar(50), [PRODUCT_CODE] var…

VSCode 自动调整格式失效了 ESLint

ESLint【最新注意2.4.4版本有问题&#xff0c;需退回2.4.2版本就恢复正常了】 参考&#xff1a;vscode自动格式化失效_vscode保存自动格式化失效-CSDN博客

AI PC(智能电脑)技术分析

一文看懂AI PC&#xff08;智能电脑&#xff09; 2024年&#xff0c;英特尔、英伟达等芯片巨头革新CPU技术&#xff0c;融入AI算力&#xff0c;为传统PC带来质的飞跃&#xff0c;引领智能计算新时代。 2024年&#xff0c;因此被叫作人工智能电脑&#xff08;AI PC&#xff09;…

一文带你初探FreeRTOS信号量

本文记录我初步学习FreeRTOS的信号量的知识&#xff0c;在此记录分享&#xff0c;希望我的分享对你有所帮助&#xff01; 什么是信号量 在FreeRTOS中&#xff0c;信号量&#xff08;Semaphore&#xff09;是一种用于任务间同步和资源共享的机制。信号量主要用于管理对共享资源的…

汽车电子行业知识:什么是电子后视镜

文章目录 1.什么是电子后视镜2.有哪些汽车用到了电子后视镜3.电子后视镜的原理及算法4.电子后视镜的优点5.电子后视镜的未来市场将继续增长 1.什么是电子后视镜 电子后视镜是一种集成了电子元件和显示屏的汽车后视镜&#xff0c;用于替代传统的机械后视镜。它通过内置的摄像头捕…

九浅一深Jemalloc5.3.0 -- ⑨浅*gc

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同&#xff0c;本着“与时俱进”、“由浅入深”的宗旨&#xff0c;我将逐步分析Jemalloc5.3.0的实现。 另外&#xff0c;单讲实现代码是极其枯燥的&#xff0c;…

使用React复刻ThreeJS官网示例——keyframes动画

最近在看three.js相关的东西&#xff0c;想着学习一下threejs给的examples。源码是用html结合js写的&#xff0c;恰好最近也在学习react&#xff0c;就用react框架学习一下。 本文参考的是threeJs给的第一个示例 three.js examples (threejs.org) 一、下载threeJS源码 通常我们…

go开源webssh终端源码main.go分析

1.地址: https://github.com/Jrohy/webssh.git 2.添加中文注释地址: https://github.com/tonyimax/webssh_cn.git main.go分析 主包名&#xff1a;main package main //主包名 依赖包加载 //导入依赖包 import ("embed" //可执行文件…

申请SSL证书 SSL是如何保护网站安全的

随着互联网的不断发展&#xff0c;网络安全问题日益凸显&#xff0c;特别是在数据传输和存储方面。为了保护网站和用户的数据安全&#xff0c;SSL&#xff08;安全套接层&#xff09;技术应运而生&#xff0c;成为了保护网站安全的重要工具。本文将详细介绍SSL如何保护网站安全…

星光云720全景VR系统源码

星光云720全景VR系统源码 系统体验地址项目介绍JDK版本后端主要依赖前端框架前端node 版本用户端框架介绍技术选型依赖全景内容简介系统图片部分功能截图系统体验地址 系统体验地址 VR全景系统体验地址 账号&#xff1a;18175760278 密码&#xff1a;12345678 项目介绍 JDK版…

C语言_指针初阶(进阶还在更新中)

指针是什么 指针是内存中一个最小单元的编号&#xff0c;也就是地址平时口语中说的指针&#xff0c;通常指的是指针变量&#xff0c;是用来存放内存地址的变量指针就是地址&#xff0c;口语中说的指针通常指的是指针变量。我们可以通过&&#xff08;取地址操作符&#xff…

WSL——忘记root密码(Ubuntu)

1、问题描述 Windows下的WSL&#xff08;Ubuntu&#xff09;忘记了root密码&#xff0c;无法使用管理员权限。 2、解决方法 关闭 Ubuntu 窗口。打开 Windows 的 Powershell 或 cmd&#xff0c; 以 root 默认登陆 WSL。 wsl -u root 修改对应用户密码。 # xxx为要修改密码的用…

2024年第十四届APMCM亚太地区大学生数学建模竞赛

C 题 基于量子计算的物流配送问题 随着电子商务的迅猛发展&#xff0c;电商平台对物流配送的需求日益增长。为了确保货物能够按时、高效地送达消费者手中&#xff0c;电商平台与第三方物流公司建立了紧密的合作关系。然而&#xff0c;面对大量的货物和多样的目的地&#xff0c…

女性经济崛起,天润融通用客户感知挖掘市场潜力

每逢一年一度的国际妇女节&#xff0c;“女性”话题都会被郑重地讨论。 从消费市场上来说&#xff0c;最近几年女性群体正在拥有越来越大的影响力&#xff0c;甚至出现了“她经济”这样的专属词汇在最近几年被市场反复讨论。 毫无疑问&#xff0c;女性消费群体的崛起已经成为…

EXTI寄存器,AFIO的简洁,EXTI配置的流程

一&#xff0c;AFIO简介 AFIO是Alternate Function Input/Output 的缩写&#xff0c;表示复用功能IO&#xff0c;主要用于实现IO端口的复用功能以及外部中断的控制 STM32外设有很多I/O以及内置外设&#xff08;如12C&#xff0c;ADC,ISP,USART等&#xff09;。为节省引出管脚的…

科普文:Linux服务器性能调优概叙

概叙 Java web应用性能分析之服务端慢和优化概叙_cpu飙高java-CSDN博客 Java web应用性能分析之【CPU飙升分析概述】_web页面性能分析cpu占满是因为死循环,还是循环过多-CSDN博客 在我们的软件服务中&#xff0c;软件部署的服务器&#xff0c;一般都是linux服务器&#xff0c…