文章目录

  • 一、实现效果
  • 二、实现过程
    • 1. 关于ScriptableObject
      • ① 什么是ScriptableObject?
      • ② 使用SO的好处
      • ③ 怎么使用
    • 2. 具体使用SO创建Assets
    • 3. 动态展示卡牌信息
  • 三、参考资料

素材来源:影之诗国服大百科

内容简介:本篇主要介绍使用ScriptableObject来储存卡牌信息并动态生成


一、实现效果


根据不同卡牌信息动态生成卡牌

二、实现过程

1. 关于ScriptableObject

① 什么是ScriptableObject?

用来存储数据的一个资源文件,像是JSON、XML、文本文件这样的存储文件,可以用来存储数据。

但是这里他在最开始的时候不需要再次读文件,就像是JSON在游戏开始时,我们需要加载JSON文件中的数据,我们就需要读取这个文件,然后在赋值给对象。

他就可以直接使用其中的数据。因为他是资源文件,所以他有着资源文件的特性,我们Resource.Load他就可以使用他了。

其实可以简单的理解为把你所有的数据都用变量在一个类中声明,然后我们使用的时候,直接实例化这个类就好了。

② 使用SO的好处

●他可以作为一个引用在脚本上,因为他是资源文件。

●不会被unity序列化机制影响,所以可以多场景共有。(序列化文章)

●在实例化对象时用它来做配置文件降低了内存的消耗

●有自己的回调OnEnable、OnDisable、OnDestroy。

③ 怎么使用

只需要把平时的继承自MonoBehaviour改成ScriptableObject即可

using UnityEngine;[CreateAssetMenu(menuName="MySubMenue/Create MyScriptableObject ")]
public class MyScriptableObject : ScriptableObject
{public int someVariable;
}

2. 具体使用SO创建Assets

  1. 按路径创建脚本文件
    ScriptableObjectUtility2.cs

    编写静态类

    using UnityEngine;
    using UnityEditor;public static class ScriptableObjectUtility2 {public static void CreateAsset<T>() where T : ScriptableObject {var asset = ScriptableObject.CreateInstance<T>();ProjectWindowUtil.CreateAsset(asset, "New " + typeof(T).Name + ".asset");}
    }
    
  2. 按路径创建文件夹和脚本

    CardAsset.cs

    该脚本存储卡牌所有属性

    编写代码

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;public enum TargetingOptions // 卡牌目标选项
    {NoTarget,AllCreatures, EnemyCreatures,YourCreatures, AllCharacters, EnemyCharacters,YourCharacters
    }public class CardAsset : ScriptableObject
    {[Header("General info")]public CharacterAsset characterAsset;  // 卡牌所属角色[TextArea(2,3)]public string Description; // 卡牌描述public Sprite CardImage; // 卡牌图像public int ManaCost; // 卡牌消耗[Header("Creature Info")] // 作为生物卡牌的信息public int MaxHealth; // 最大生命值public int Attack; // 攻击力public int AttacksForOneTurn = 1; // 一回合内攻击次数public bool Taunt; // 是否嘲讽public bool Charge; // 是否冲锋,即刚入场的回合是否可以立即攻击public string CreatureScriptName; // 生物脚本名public int specialCreatureAmount; // 技能数值[Header("SpellInfo")]public string SpellScriptName; // 技能脚本名public int specialSpellAmount; // 技能数值public TargetingOptions Targets; // 技能对象}
    

    CardUnityIntegration.cs

    该脚本调用ScriptableObjectUtility2.cs中的静态方法

    using UnityEngine;
    using UnityEditor;static class CardUnityIntegration
    {[MenuItem("Assets/Create/CardAsset")]public static void CreateYourScriptableObject() {ScriptableObjectUtility2.CreateAsset<CardAsset>();}}
    
  3. 这样就可以在创建菜单下找到自定义的SO ASSET

  4. 创建好后,就可以在视窗内修改属性

3. 动态展示卡牌信息

① 编写代码

using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class OneCardManager : MonoBehaviour {public CardAsset cardAsset; // 卡牌SO assetpublic OneCardManager PreviewManager; // 卡牌预览[Header("Text Component References")]public Text NameText; // 卡牌名文本public Text ManaCostText; // 卡牌费用文本public Text DescriptionText; // 卡牌描述文本public Text HealthText; // 卡牌生命值文本public Text AttackText; // 卡牌攻击文本[Header ("GameObject References")]public GameObject HealthIcon;public GameObject AttackIcon;[Header("Image References")]public Image CardGraphicImage; // 卡牌图像public Image CardFaceFrameImage; // 卡牌框图像,用于区分卡牌稀有度public Image CardFaceGlowImage; // 卡牌正面光效public Image CardBackGlowImage; // 卡牌背面光效public Image CardElementImage; // 卡牌元素图像void Awake(){if (cardAsset != null)ReadCardFromAsset();}private bool canBePlayedNow = false;public bool CanBePlayedNow{get{return canBePlayedNow;}set{canBePlayedNow = value;CardFaceGlowImage.enabled = value;}}public void ReadCardFromAsset(){// 1) 更新卡牌信息CardFaceFrameImage.sprite = cardAsset.CardRarityImage;CardElementImage.sprite = cardAsset.ElemImage;// 2) 添加卡牌名字NameText.text = cardAsset.name;// 3) 添加卡牌消耗ManaCostText.text = cardAsset.ManaCost.ToString();// 4) 添加描述DescriptionText.text = cardAsset.Description;// 5) 更换卡牌图片CardGraphicImage.sprite = cardAsset.CardImage;if (cardAsset.MaxHealth != 0){// 这是一个生物AttackText.text = cardAsset.Attack.ToString();HealthText.text = cardAsset.MaxHealth.ToString();}if (PreviewManager != null){// 这是一张卡牌而不是预览// 预览卡牌也拥有该脚本,但属性是nullPreviewManager.cardAsset = cardAsset;PreviewManager.ReadCardFromAsset();}}
}

② 将组件拖入视图窗口

三、参考资料


1.【Unity】ScriptableObject的介绍

2.【Unity】简单说说ScriptableObject

1.2 储存卡牌信息———自制卡牌游戏之旅相关推荐

  1. 1.1 卡牌对象的创建———自制卡牌游戏之旅

    文章目录 一.完整卡牌对象展示 二.创建过程(以技能卡为例) 素材来源:影之诗国服大百科 内容简介:本篇主要介绍卡牌基础对象的构成 一.完整卡牌对象展示 技能卡 随从卡 二.创建过程(以技能卡为例) ...

  2. 2.1 随从图标的创建———自制卡牌游戏之旅

    文章目录 一.实现效果 二.实现过程 1. 参考卡牌的创建 2. 还需要修改的部分 素材来源:影之诗国服大百科 内容简介:本篇主要介绍随从图标的建立 一.实现效果 当玩家将随从卡牌置入战场后,会诞生一 ...

  3. 不会玩阴阳师的我带你一键下载《阴阳师:百闻牌》所有卡牌并调用百度OCR识别文字信息

    文章目录 一.项目概述 1.项目背景 2.环境配置 二.项目实施 1.项目分析 selenium模拟滚动加载所有图片 用百度OCR定位所有文字并分类 实现多线程 2.具体实现 (1)导入所需的库和定义 ...

  4. 2.2 法力池的创建和视觉特效———自制卡牌游戏之旅

    文章目录 一.实现效果 二.实现过程 1. 想法 2. 创建对象 3. 编写脚本ManaPool.cs ① get.set访问器 ② 最大法力值 ③ 可用法力值 ④ update测试 3. ManaP ...

  5. 怎么修改artifact_《Artifact》怎么修改卡牌描述 修改卡牌描述与游戏UI文字方法分享...

    <Artifact>中有着许多的卡牌,由于<Artifact>采用了<DOTA2>的背景故事,这使得我们可以在这款卡牌游戏中看到许多熟悉的身影.下面小编带来了< ...

  6. 2.5 随从受伤溅血效果的实现———自制卡牌游戏之旅

    文章目录 一.实现效果 二.具体实现 1. 对象创建 2. 编写代码 DamageEffect.cs ① 从预制体生成 ② 渐隐效果协程 ③ 差分的特效图片 DamageEffectTest.cs 三 ...

  7. 在WebGL场景中管理多个卡牌对象的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,实现多个简单卡牌类对象的显示.选择.分组.排序,同时建立一套实用的3D场景代码框架.由于作者美工能力有限,所以示例场景视觉效果可能欠佳,本 ...

  8. 卡牌游戏源代码(原创)(控制台)

    游戏预览: 完成度90%,约3000行,过年这几天全用在这上面了 由于尚未学到QT等,因此只能在黑窗口下面制作了 未完成的部分: ①战斗代码未优化(800行,精简后应该能降到200行左右) ②关卡掉落 ...

  9. php写卡牌游戏,生成汉字卡牌的PHP小应用

    上初中时,班里曾经有人发明了一套用化学元素信息做卡牌的游戏,风靡一时.可惜现在已经完全想不起来当时的玩法了.包子上小学后,包爸就想着也效仿这种模式,让包子和小伙伴们有的玩.于是断断续续花了一个学期的时 ...

最新文章

  1. linux 3.4内核初始化,S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
  2. mysql主备模型,MySQL数据同步【双主热备】
  3. Python 输出格式符号
  4. 如何制作一个通用的多系统安装U盘七(Windows相关配置)
  5. 小程序 text decode 真机无效_【移动端测试】APP自动化测试案例2:微信小程序自动化测试...
  6. 使用 dotnet format 格式化代码
  7. cordic ip核 vivado_Xilinx Vivado CORDIC IP求解atan 反正切
  8. .net MVC Model
  9. 敏捷开发用户故事系列之六:用户故事的产生与组织结构
  10. 第三周课程总结&实验报告一
  11. nginx 四种策略
  12. C++11 decltype
  13. python 小达人_python小白入门基础(五:字符串)
  14. javax.persistence.TransactionRequiredException: No transactional EntityManager available
  15. 2018美赛 A 题
  16. excel VBA编程入门教程
  17. 这四点列出了国产手机和苹果手机屏幕之间的不同之处
  18. 创造生命奇迹的幸存者
  19. 戴尔微型计算机电源怎么拆,教你怎么拆解电源适配器
  20. linux系统处理excel,Apache POI处理Excel文档

热门文章

  1. android adc,Android配置ADC接口
  2. 微信公众号开发 - 开发环境搭建
  3. 《Spring系列》第15章 声明式事务(一) 基础使用
  4. python独立网站教程_python做网站教程_如何免费做网站的教程
  5. 睿爸信奥-【临阵磨枪】练习赛(第二场)- T2
  6. 「项目进度管理」如何编制有效的进度计划?
  7. vibe算法的另外一种实现
  8. [Python核心技术与实战学习] 18 单元测试unittest 库
  9. html如何发送验证码到手机,页面效果,给手机发送验证码
  10. 阿里程序员,过完年第一天就要被劝退!让人感觉现实是如此残酷!