unity ScriptableObject

2023-11-06

 ---ScriptableObject代替单例

        和单例一样,在内存是独一份的,是可以被不同的东西读取,需要一些工具链配合。

        结构是这样的 startEvent事件->EventListener事件监听->事件数据Event;这样可以跨scene传递信息。

1、用来代替enum

        enum的缺点:必须改代码(删改不方便,基于下标)不能存储更多数据。不支持null

2、data scriptableObject     

        对设计师友好,对git友好,可以被别处监听,打包运输方便

        1、如果要监听某个血量,so序列化一个float,随时监听数据变化

        2、配置文件,数据和美术分离。相互修改不影响。将多属性脚本集成到so文件中。

3、Event

///
[CreateAssetMenu(menuName="Events.Equipment Select Event Channel")]
public class YYYYYSelectEventChannelSO:ScriptableObject
{
    public UnityAction<xxxxItemSO> OnEquipmentSelected;
    
    public void Raise(MerchantItemSo itemSO)
    {
        OnEquipmentSelected?.Invoke(itemSo)
    }

}

//

public class UIxxxItem:MonoBehaviour
{
    ....
    [serializeField] private xxxxItemSO _itemSo;
    [serializeField] private YYYYYSelectEventChannelSO _channel;

    pulic void OnSelected(){
 
        _chanel.Raise(_itemSo);
    }
}
//点击上面的项目这个面板会响应
public class UIxxxxInspector:MonoBehaviour
{
    ....
    [serializeField] private YYYYYSelectEventChannelSO _channel;

    private void OnEnable(){
        _channel.OnEquipmentSelected+=ZZZZZZZZZZ;

    }
    private void OnDisable(){
        _channel.OnEquipmentSelected-=ZZZZZZZZZZ;

    }
    void ZZZZZZZZZZ(){

    }
}

4、可以储存方法。 onValidate();例如攻击概率     

   [serializeField] private float normalAttackRate;

        [serializeField]private float criticalRare;

        //因为普通攻击和暴击概率相加==1;所以设置一个概率即可,这里用onValidate方法控制

        onValidate(){

                criticalRare=1-normalAttackRate;

         }

5、editor扩展

在editor扩展 增加按钮

//扩展
[CustomEditor(typeof(xxxxxSo))]
public class xxxxSOEditor:Editor{

    private AudioSource _previewAudioSource;
    private xxxxSO _target//
    private void OnEnable(){                     
           _target=target as XXXXSO;//target是父类提供的          
    _previewAudioSource=EditorUtility.CreateGameObjectWithHideFlags("AudioPreview"
      ,HideFlags.HideAndDontSave,typeof(AudioSource).GetComponent<AudioSource>());
    }
    private void OnDisable(){
        DestroyImmediate(_previewAudioSource);//官方要求隐藏物体要销毁
    }
    
    public override void OnInspectorGUI(){

        base.OnInspectorGUI();
        if(GUILayout.Button("PreviewAudio")){
            _target.Play(_previewAudioSource);
        }
    }
}
public class xxxxso:ScriptableObject{

    [serilizeField]private float minVolume;
    [serilizeField]private float maxVolume;//最大音量
    [serilizeField]private float minPitch;
    [serilizeField]private float maxPitch;//最大音调

    public void Play(AudioSource source){
        
    }

}

6、RuntimeSet

        pulic List<xxx> allxxx=new list<xxx>();

        public void Add(){}

        public Remove(){}

        public void Onxxx(){xxx x,vector3 location }{Remove() foreach(){ dosometings}}

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity ScriptableObject 的相关文章

  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • unity粒子特效附上贴图后播放动画

    转自 http jingyan baidu com article f96699bbb1a0d6894f3c1b77 html 参考 http www unitymanual com thread 2993 1 1 html dsign a
  • UnityLuaMvvM Lua 带通知的Mode类

    实现数据更新UI自动刷新的核心代码 欢迎关注https gitee com xiongks UnityMVVM mode function modeType local obj obj modeType modeType obj filds
  • 【Unity Shader】屏幕后处理1.0:调整亮度/饱和度/对比度

    1 Unity中实现屏幕特效的基本步骤 什么叫屏幕后处理 Screen post processing effects 渲染完整个场景得到屏幕图像后对图像进行一系列操作 实现各种屏幕特效 这一步我们可以添加很多例如景深 Depth of F
  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • Unity中loading页加载的实现

    首先创建一个Global cs 使用单例用于存储场景的名字 便于后续脚本的调用 此脚本不必挂载在游戏物体上 using UnityEngine using System Collections public class Global Mon
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • mysql内测试连通性命令_怎么使用ping命令进行连通性测试

    关于ping命令的作用 ping 命令有助于验证网络层的连通性 一般进行网络故障排除时 可以使用ping 命令向目标计算机或IP地址发送ICMP回显请求 目标计算机会返回回显应答 如果目标计算机不能返回回显应答 说明在源计算机和目标计算机之
  • python提取txt文件中的数据

    从存储在txt文件中的30000多条数据当中提取自己需要的信息 如下图示例的数据格式 需要提取出now后的数值并存储在另外一个txt文件当中 结果示例 code path r r new data1 txt with open path r
  • C++ 项目

    C 方向 10个企业级别项目 138个工作日 1 学生信息管理系统 C 基础 2 俄罗斯方块 控制台 C 基础
  • Arcgis server在solaris和linux上,用直连的方式连接sde的时的配置

    Arcgis server在solaris和linux上 用直连的方式连接sde的时候需要做一点配置才可以连上 1 在
  • 微信小程序从入坑到放弃二十:生成海报前使用wx.downloadFile或wx.getImageInfo时潜在的坑

    摘要 上周六下午16点左右 公司研发群中扔来一张bug截图 当天21点 群里又扔来bug截图 研发团队二话不说开始查找bug如何复现 22点20分左右 我终于复现了bug 随后就是看源码 搜索 跳坑 爬坑 周日同其他研发小伙伴一样 又是奉献
  • OpenCv案例(九): 基于OpenCvSharp图像分割提取目标区域和定位

    以下原图中 物体连靠在一起 目的是将其分割开 再提取轮廓和定位 原图 最终效果 麻烦的地方是 分割开右下角部分 两个连在一起的目标物体 下图所示 基本方法 BoxFilter滤波 二值化 轮廓提取 凸包检测 图像的矩 代码如下
  • Jar包反编译后修改源码再编译

    Jar包反编译后修改源码再编译 文章目录 Jar包反编译后修改源码再编译 1 场景 2 详细步骤 2 1 查看源码 2 2 生成源文件 2 3 构建项目 2 4 编译成jar包 3 参考链接 1 场景 需要对当前的jar包功能进行修改 但是
  • angularjs系列之轻松使用$q进行异步编程

    angularjs系列之轻松使用 q进行异步编程 来源 网络 编辑 admin 第一部分关于js中的异步编程 异步编程简单的说就是你写了一段代码 但他不会按照你书写代码的顺序立即执行 而是等到程序中发生了某个事件 如用户点击了某个按钮 某个
  • 深入理解计算机系统-链接篇

    在linux系统下 很多开源C C 程序的编译规则都是以makefile文件的形式给出 我刚开始学习makefile规则是看陈浩的 跟我一起学makefile 后来看 深入理解计算机系统 这本书 对编译链接有了更加深入的了解 本文主要介绍程
  • 人机交互知识点总结

    人机交互知识点总结 考试题型及分值分布 选择题 10题 20分 填空题 10题 20分 判断题 可选 5题 10分 解答题 5 6题 30分 分析计算题 1 2题 20分 注意 答案有多条时 用1 2 3形式分别列出 考查内容 掌握人机交互
  • CTF加密解密—CRYPTO—密码学签到

    0x00 考察知识点 考虑字符串倒序的问题 0x01 题目 密文是 wohs ftc galf 0x02 Write Up 直接进行字符串倒序即可 签到题 简单点是肯定的啦
  • 操作系统文件的两种结构

    文件 文件指的是一组带标识的逻辑上有完整意义的数据项 构成文件内容的基本单元 的序列 或者是相关联记录的集合 文件存放在磁盘或磁带等存储介质上 文件的逻辑结构和物理结构 一 逻辑结构 1 无结构文件 流式文件 2 有结构文件 记录式文件 二
  • avue crud-tree介绍

    前言 最近遇到了需要使用表格树的需求 发现avue crud有tree的组件 然后在使用过程中发现诸多问题 网上对应的介绍也很少 所以在自己使用成功之后为后人提供帮助 正文 效果图 html部分
  • SOLID Principles in Unity

    什么是SOLID 假如你是一个程序员 我敢肯定你听过编程原则或类似的东西 也许松耦合的设计 SOLID不是一个编程语言或编程范式 它不是一个特定的设计模式 它不是针对某个项目的 在面向对象编程中 SOLID实际上是一个助记缩写五个 S O
  • VMware-报错:无法将Ethernet0连接到虚拟网络VMnet8

    by 小世界 http redcisco blog 163 com 版本 vmware10 0 0 物理机 win8 虚拟机 rhel6 3 问题 无法将 Ethernet0 连接到虚拟网络 VMnet8 有关更多信息 请参见 vmware
  • react-native-image-picker 4.0 集成

    github react native image picker 4 x相对于 2 x 3 x已删除 showImagePicker 4 x相对于 2 x 3 x已删除 showImagePicker 4 x相对于 2 x 3 x已删除 s
  • 【Linux下Docker安装JupterLab】

    Linux下Docker安装JupterLab 拉取docker镜像 docker pull jupyter base notebook latest https jupyter docker stacks readthedocs io e
  • cicd 02--构建通用的CD流程

    cicd 02 构建通用的CD流程 1 介绍 2 CD 构建过程 2 1 参数配置说明 2 2 pipeline 脚本 2 3 测试流程 3 注意事项 4 说明 1 介绍 笔者在 cicd 01 构建通用的CI流程 中介绍了一个通用的doc
  • 简单分析 C 语言的 qsort() 源码

    简单分析 C 语言的 qsort 源码 stdlib h 是使用 C 语言需要引入的库 在系统文件下可以搜索到这个文件夹 在里面可以看到有一个 qsort 文件用编译器或者记事本打开就能看到里面的源码了 单从文件名看 qsort 采用的是快
  • unity ScriptableObject

    ScriptableObject代替单例 和单例一样 在内存是独一份的 是可以被不同的东西读取 需要一些工具链配合 结构是这样的 startEvent事件 gt EventListener事件监听 gt 事件数据Event 这样可以跨sce