合集-王国之梦

摘要:目标 实现如下图所示的随机地图 地图会随机连线,并且最后会连到 Boss 的房间,并且确保 Boss 房间前面一定是一个休息的房间 额外需要做的事情 因为点击房间之后涉及场景的切换,根据勇士传说的经验,我们需要使用 Addressable 来切换场景,因此我们需要通过 Package Manager 阅读全文
posted @ 2024-03-01 21:42 hellozjf 阅读(528) 评论(3) 推荐(0)
摘要:更新 Hierarchy 从 Hierarchy 中删除了 RoomPrefab,然后增加了 Map Generator,并在 Map Generator 上面挂载了 MapGenerator 脚本 MapGenerator 脚本 这个脚本的作用是配置地图上的房间信息(每一列有 min ~ max 阅读全文
posted @ 2024-03-01 21:42 hellozjf 阅读(276) 评论(0) 推荐(0)
摘要:最终目标 每一列上面的关卡之间有间距,并且 x 坐标有左右偏移,最后一个房间的位置是固定的 实现方法 我们现在已经知道屏幕的宽度screenWidth,也知道了屏幕的高度screenHeight,同时还知道一共有多少列mapConfig.roomBlueprints.Count 那么可以算出 每一列 阅读全文
posted @ 2024-03-01 22:51 hellozjf 阅读(217) 评论(0) 推荐(0)
摘要:事件监听和发布 我们要实现这样一个功能,当玩家在 Map 场景中点击一个图标的时候,需要发送事件给场景管理器,场景管理器监听事件,然后执行切换场景的操作 在勇士传说中,我们使用 ScriptableObject.UnityAction 发布事件,以及监听事件,那时候每种类型都有一个 Scriptab 阅读全文
posted @ 2024-03-02 23:19 hellozjf 阅读(260) 评论(0) 推荐(1)
摘要:awaitable 关键字 本节涉及到场景的加载和卸载,在勇士传说中,我们使用协程的方式来加载和卸载场景,在本节使用了 unity2023.3 最新的特性 awaitable awaitable 具体是啥,我也不太清楚,见下图 加载场景 在上一节中,我们监听了 LoadRoomEvent 事件,成功 阅读全文
posted @ 2024-03-02 23:19 hellozjf 阅读(172) 评论(0) 推荐(0)
摘要:本节目的 将 Map 上的房间和连线都保存下来,以便从战斗场景回来的时候能够恢复这些数据 实现方法 定义存储结构 定义一个名叫MapLayoutSO的 ScriptableObject,它里面记录了所有的房间和连线信息,如下图所示 房间的信息中不单单有房间的图标、房间的类型、引用的场景,还有房间的状 阅读全文
posted @ 2024-03-02 23:20 hellozjf 阅读(131) 评论(0) 推荐(0)
摘要:目标 当我进入房间,然后出去之后,当前房间设置为已访问,同一列的其它房间设置为不可访问,当前房间相连的房间设置为可访问 实现 点击房间广播 因为 RoomPrefab 上面有碰撞体,所以鼠标或手指点击它的时候会触发OnMouseDown方法,然后就会触发LoadRoomEvent广播事件 监听点击房 阅读全文
posted @ 2024-03-02 23:20 hellozjf 阅读(126) 评论(0) 推荐(0)
摘要:制作 Card 使用 Art / Card 制作卡牌,制作完毕之后需要给 Card 绑定 BoxCollider2D,并放在 Front 这层 让该 Card 可以被选择 给 Main Camera 添加 Physics 2D Raycaster,把它的 Event Mask 改为 Card, Ch 阅读全文
posted @ 2024-03-03 13:48 hellozjf 阅读(153) 评论(0) 推荐(0)
摘要:创建数据类 上一节,我们添加了卡牌的形状,这一节,我们来添加卡牌的数据,使用 ScriptableObject 来添加卡牌的数据 如上图所示,我们在 Scripts/Card/ScriptableObject 下面创建了 CardDataSO 文件,它里面有卡牌名字、卡牌图片、卡牌费用、卡牌类型、描 阅读全文
posted @ 2024-03-04 13:59 hellozjf 阅读(188) 评论(0) 推荐(0)
摘要:创建对象池 我们后面会创建出很多的卡牌,如果每张卡牌都需要 Instantiate 和 Destroy 的话,就会非常消耗性能。因此我们使用对象池来管理这些对象,使它们的分配和开销减少 具体代码如下 using System.Diagnostics.Tracing; using UnityEngin 阅读全文
posted @ 2024-03-04 14:41 hellozjf 阅读(146) 评论(0) 推荐(0)
摘要:卡牌库 添加卡牌库对象,以及卡牌库代码 using System.Collections.Generic; using UnityEngine; public class CardDeck : MonoBehaviour { public CardManager cardManager; // 抽牌 阅读全文
posted @ 2024-03-05 11:14 hellozjf 阅读(230) 评论(0) 推荐(0)
摘要:在项目中添加 CardLayoutManager 代码如下 using System.Collections.Generic; using UnityEngine; public class CardLayoutManager : MonoBehaviour { public bool isHori 阅读全文
posted @ 2024-03-05 12:33 hellozjf 阅读(242) 评论(0) 推荐(0)
摘要:使用 DoTween 实现抽卡动画 卡牌起始位置和大小 首先卡牌被抽出来的时候,需要从某个位置开始,并且它的大小要为0 让牌一张张进入玩家手里 这段代码,就会在 delay 的时间内,完成所有卡牌缩放和移动的动画 在 SetCardLayout 外面,再使用一个 for 循环设置延迟时间 项目相关代 阅读全文
posted @ 2024-03-05 13:09 hellozjf 阅读(263) 评论(0) 推荐(0)
摘要:解决上节课卡牌可能遮挡的问题 通过角度和半径算出卡牌位置 相关代码 最终效果 项目相关代码 代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git 标签:20240305_1323 阅读全文
posted @ 2024-03-05 14:09 hellozjf 阅读(173) 评论(0) 推荐(0)
摘要:要实现的功能 当鼠标移动到卡牌上面的时候,卡牌可以显示在最上面 修改代码 这里有个 isAnimating 判断,当卡牌在移动的时候,isAnimating 就为 true,此时不能对其进行操作 项目相关代码 代码仓库:https://gitee.com/nbda1121440/DreamOfThe 阅读全文
posted @ 2024-03-05 14:33 hellozjf 阅读(91) 评论(0) 推荐(0)
摘要:给 Card 添加 CardDragHandler 代码如下 using UnityEngine; using UnityEngine.EventSystems; public class CardDragHandler : MonoBehaviour, IBeginDragHandler, IDr 阅读全文
posted @ 2024-03-05 15:39 hellozjf 阅读(166) 评论(0) 推荐(0)
摘要:制作攻击指针 首先创建一个 ArrowLine 的对象,然后给它添加 LineRenderer,将线宽改为 1.5,Materials 改为 RedArrow RedArrow 就长这个样子 鼠标点击攻击牌的时候出现指针 二次贝塞尔曲线理论和实现方式 相关代码 public void SetArro 阅读全文
posted @ 2024-03-05 15:39 hellozjf 阅读(156) 评论(0) 推荐(0)
摘要:洗牌方法 洗牌的时候,会把弃牌堆清除,牌堆中的每张牌都会和随机的牌进行交换 一共有两个地方会进行洗牌操作,第一个是初始化牌堆的时候 第二个是抽牌堆为空的时候 项目相关代码 代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git 标签:2024 阅读全文
posted @ 2024-03-05 19:11 hellozjf 阅读(101) 评论(0) 推荐(0)
摘要:添加 Spine 组件 访问spine-unity官网,下载spine-unity 4.1,然后双击运行导入spine Spine相关素材下载和导入 迅雷网盘 将下载好的压缩包解压,将Character和Effects文件夹拷贝到Art目录下 老师这边使用的素材好像是伽马空间的,因此我们需要调整颜色 阅读全文
posted @ 2024-03-05 20:35 hellozjf 阅读(199) 评论(0) 推荐(0)
摘要:介绍一下 VSCode 快捷键 删除文件内容,然后输入 ScriptableObject 就能快速添加一个 ScriptableObject 模板 删除文件内容,然后输入 Editor 就能快速添加一个 Editor 模板 开始写代码 数据 ScriptableObject 如上图所示,首先是在 S 阅读全文
posted @ 2024-03-05 20:35 hellozjf 阅读(108) 评论(0) 推荐(0)
摘要:目标 当我打出一张攻击牌并指向敌人的时候,敌人会扣血 代码 攻击牌指向敌人 当我在拖动牌指向敌人的时候,鼠标指向的地方会判断是否有东西,并且东西的标签是否是 Enemy,是的话就标记为可执行,以及目标角色 因为只有指向 Tag 为 Enemy 的对象才有效果,所以要给敌人添加名为 Enemy 的 T 阅读全文
posted @ 2024-03-05 21:48 hellozjf 阅读(91) 评论(0) 推荐(0)
摘要:UI Toolkit 本项目使用 UI Toolkit 进行 HealthBar 通过 Create -> UI Toolkit -> UI Document 创建一个 HealthBar 在 HealthBar 里面,我们可以添加一个 Progress Bar 用于表示血条,然后将 Progres 阅读全文
posted @ 2024-03-05 23:33 hellozjf 阅读(148) 评论(0) 推荐(0)
摘要:查看 HealthBar 如果我们想根据当前的血量和最大血量,修改血条的值以及是否显示,那么我们可以修改上图中画红框的部分 代码实现 Awake 的时候调用InitHealthBar方法,在InitHealthBar的方法中修改highValue值 然后在Update方法中不停修改healthBar 阅读全文
posted @ 2024-03-06 11:08 hellozjf 阅读(70) 评论(0) 推荐(0)
摘要:创建 HealthBarUSS 内容如下所示 这个 CSS 选择器是什么意思呢? .unity-progress-bar__container、.unity-progress-bar__background、.unity-progress-bar__progress分别会修改上面三张图里面的样式 在 阅读全文
posted @ 2024-03-06 12:01 hellozjf 阅读(89) 评论(0) 推荐(0)
摘要:本节目标 实现以下 UI 功能实现 创建 GameplayPanel 在 UI 目录下创建一个 GameplayPanel,编辑 GameplayPanel,增加 Visual Element、Label、Button 注意,需要将它们的 Attributes -> Picking Mode 都修改 阅读全文
posted @ 2024-03-06 14:33 hellozjf 阅读(69) 评论(0) 推荐(0)
摘要:本节目标 当玩家抽卡、弃卡的时候,抽牌堆和弃牌堆的数量要与实际的保持一致 实现方法 添加抽牌堆数量和弃牌堆数量变更事件 抽牌弃牌的时候发布事件 绑定广播事件 GameplayPanel 接收事件 首先 GameplayPanel 需要在OnEnable的时候,绑定相关的 UI 元素 当事件到来的时候 阅读全文
posted @ 2024-03-06 15:30 hellozjf 阅读(75) 评论(0) 推荐(0)
摘要:本节目标 当我点击右下角回合切换按钮的时候,会从我的回合切换到敌人回合,然后敌人回合经过几秒后回到我的回合 代码实现 TurnBaseManager 广播 playerTurnBegin 事件 首先我们需要一个TurnBaseManager类,用于管理当前是哪个回合 using UnityEngin 阅读全文
posted @ 2024-03-06 20:47 hellozjf 阅读(94) 评论(0) 推荐(0)
摘要:本节目标 当玩家出牌的时候会扣除能量,当能量不够的时候不能出牌。每个玩家回合开始的时候恢复能量。 代码实现 玩家身上的能量 首先创建一个IntVariable来表示玩家当前的能量,其中该值发生变化的时候会产生PlayerManaChangedEvent事件 然后再写代码,使用这个IntVariabl 阅读全文
posted @ 2024-03-07 09:50 hellozjf 阅读(119) 评论(0) 推荐(0)
摘要:本节目标 当玩家打出防御牌之后,会产生一个护盾,用于抵消伤害。在一个回合内护盾是可以叠加的。当新回合开始的时候护盾消失。 代码实现 护盾变量 首先要在CharacterBase中添加一个护盾值 增加护盾的时候会提高它的数值 回合开始的时候会清空护盾值 角色受伤时,首先扣除护盾再减去血量 需要在 Va 阅读全文
posted @ 2024-03-07 10:54 hellozjf 阅读(101) 评论(0) 推荐(0)
摘要:本节目标 玩家使用苹果牌之后会回血,并播放回血特效 代码实现 回血效果 需要给 CharacterBase 添加一个回血方法 实例化回血效果 苹果牌 在初始卡组中添加三张苹果牌 回血特效 给玩家和敌人身上挂上 VFX 脚本 需要在 VFX 下面添加两个特效,特效来自 Art/Effects/Buff 阅读全文
posted @ 2024-03-07 13:14 hellozjf 阅读(70) 评论(0) 推荐(0)
摘要:本节目标 实现一张力量牌,使用了它之后玩家两个回合的输出增加50% 代码实现 增加 StrengthEffect 力量效果如果是对自己使用的话,就会提高攻击。如果是对敌人使用的话,就会降低攻击 增加 EnemyStrengthRound 增加 BuffStrengthEffect 力量拳套使用 Bu 阅读全文
posted @ 2024-03-07 18:32 hellozjf 阅读(54) 评论(0) 推荐(0)
摘要:实现做梦牌(减敌攻击) 复用原来的 StrengthEffect,实现 DeBuffStrengthEffect 注意要对敌人产生效果 创建做梦牌 实现翻书牌(抽牌) 创建 DrawCardEffect using UnityEngine; [CreateAssetMenu(fileName = " 阅读全文
posted @ 2024-03-07 19:35 hellozjf 阅读(70) 评论(0) 推荐(0)
摘要:人物动画状态机 设置变量 isParry 是否在防御 isSleep 是否正在睡觉 isDead 是否已经死亡 attack 攻击 hit 受伤 skill 技能 状态 stand 站立 parry_stand 防御 hurt 受伤 attack_pillow 攻击 sleep 睡眠 wake 醒来 阅读全文
posted @ 2024-03-09 14:11 hellozjf 阅读(108) 评论(0) 推荐(0)
摘要:本节目标 在玩家回合,需要显示敌人的意图,然后在敌人回合执行意图 代码实现 拼 UI 在 HealthBar 上面添加意图的图片和文字 然后在 HealthBarController 上面添加意图图片和意图文字 添加敌人意图 敌人意图 ScriptableObject 敌人意图实例 Effect 把 阅读全文
posted @ 2024-03-11 09:24 hellozjf 阅读(102) 评论(0) 推荐(0)
摘要:本节目标 上节只是把逻辑写好了,为了让游戏看起来更好看,我们需要将敌人的动画也加上去 实现 动画状态机 敌人的状态比较简单,只有站立、加Buff、攻击、受伤、死亡这五种状态 各状态之间的转换关系如下 站立 -> 加 Buff 通过 skill 触发,立刻执行 因为是从 Any State 出来的,所 阅读全文
posted @ 2024-03-11 13:28 hellozjf 阅读(98) 评论(0) 推荐(0)
摘要:本节目标 让用户从地图场景进入对战场景,然后对战胜利或失败之后收起卡牌 实现过程 让用户从地图场景进入对战场景 Persistent 场景隐藏 Player 和 Gameplay Panel Hierarchy 窗口中移除对战场景,添加map场景 清除 MapLayoutSO 中的数据 然后启动游戏 阅读全文
posted @ 2024-03-12 09:34 hellozjf 阅读(102) 评论(0) 推荐(0)
摘要:本节目标 绘制出游戏胜利的面板,以及抽卡面板。当游戏胜利的时候弹出游戏胜利面板,然后游戏胜利面板上面有个抽卡按钮,点击抽卡按钮之后进入抽卡面板 实现 绘制面板 首先在 UI 文件夹下面添加两个 UI Document 文件 第一个是 GameWinPanel,注意需要给按钮添加样式,以便它有放大的效 阅读全文
posted @ 2024-03-12 13:30 hellozjf 阅读(219) 评论(0) 推荐(0)
摘要:本节目标 打开抽卡面板之后,显示三张可以抽取的卡牌,点击选择卡牌之后将卡牌添加到牌堆中,然后游戏胜利面板隐藏抽卡按钮 实现方法 添加卡牌的 UI Document 需要给 Card 也添加turnbutton样式,这样鼠标移动过去的时候会有放大的效果 抽卡面板调试布局 调试的时候,我们可以把 Pro 阅读全文
posted @ 2024-03-12 21:19 hellozjf 阅读(111) 评论(0) 推荐(0)
摘要:本节目标 实现 GameOver 面板,并且在点击返回菜单之后进入 Menu 场景,点击 Menu 场景中的 New Game 进入游戏 开始实现 GameOver 面板 记得给 BackToStartButton 添加 turnbutton 样式 添加 GameOver 对象 当点击 醒来 按钮的 阅读全文
posted @ 2024-03-13 09:58 hellozjf 阅读(96) 评论(0) 推荐(0)
摘要:本节目标 实现休息房间可以回一次血,实现宝箱房间可以获得卡牌 实现办法 休息房间回血 添加一个 RestRoomPanel,给它挂上 UI 和 脚本 代码实现如下 using System; using UnityEngine; using UnityEngine.UIElements; publi 阅读全文
posted @ 2024-03-13 13:06 hellozjf 阅读(68) 评论(0) 推荐(0)
摘要:本节目标 给精英敌人场景添加精英,给Boss场景添加Boss 实现方法 精英敌人场景添加精英 将普通敌人拷贝一份复制到精英场景,把 Spine 动画拖过去,拖过去记得选 SkeletonMecaim,还要修改一下图层,让它来到 default 层 然后编辑 EliteEnemy_Controller 阅读全文
posted @ 2024-03-13 15:01 hellozjf 阅读(145) 评论(0) 推荐(0)
摘要:本节目标 实现场景切换时的淡入淡出效果,实现开场动画,实现打包 实现 实现淡入淡出效果 首先在 Persistent 场景下面添加一个 FadePanel 对象,然后给它添加 UI 和脚本 UI 非常简单,就是一张全黑的图片,注意需要把 Picking Mode 改为 Ignore,否则其它UI组件 阅读全文
posted @ 2024-03-13 20:22 hellozjf 阅读(174) 评论(0) 推荐(0)