👨💻个人主页:@元宇宙-秩沅
👨💻 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#专题篇】—核心章题单实践练习 | 🎁 |
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、