# 王国之梦 **Repository Path**: soft2005168/kingdom-dream ## Basic Information - **Project Name**: 王国之梦 - **Description**: 王国之梦,回合制卡牌,Unity - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2024-06-04 - **Last Updated**: 2024-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 王国之梦 ## 开发日志(倒叙) ### 2024.03.09//laptop - 43-实现休息房间的逻辑 - 休息房间对应的Panel - 休息按钮的功能绑定以及使用后失效 - 其他房间逻辑 - 44-Boss制作和整体逻辑 - Boss的特殊动画处理 - 游戏胜利逻辑 - 整体逻辑测试 - 45-淡入淡出及打包游戏 - 淡入淡出面板制作 - 打包游戏注意点 ### 2024.03.08//laptop - 40-制作胜利和抽卡面板 - Game Win Panel 、 Game Over Panel 、Pick Card Panel - 对应的界面切换逻辑 - 41-抽卡面板的实际逻辑 - Card Template - 点击卡牌添加到卡牌库 - 42-Game Over及Menu面板 - Menu 面板制作 - 重新尝试游戏流程测试bug ### 2024.03.07//laptop - 33-回血的苹果牌及特效 - 添加回血效果牌 - 对应的VFX动画启动和关闭 - 34-增加力量牌及UI - 血条UI添加力量效果显示 - 根据力量值正负替换对应的图片 - 添加力量增益减益效果牌 - 35-更多卡牌 - 减益效果牌 - 抽牌效果牌,打出时调用抽牌事件 - 36-人物动画 - Animator编辑好动画转换条件 - 在对应事件和函数中设置动画参数 - 37-敌人意图AI逻辑 - 玩家回合开始时更新敌人意图 - 敌人意图读取SO文件,并随机下标获取意图 - 敌人回合执行意图,然后意图UI关闭 - 38-敌人的动画执行逻辑 - 添加角色受伤和死亡的Trigger - 利用协程,让敌人攻击动画播放到对应进度在执行对应事件 - 39-对战胜负逻辑 - 对应的胜利和失败事件 - 加载敌人房间时执行对应的游戏开始逻辑 - Game Manager控制主要对战逻辑 ### 2024.03.06//desktop - 32-防御牌及UI - Character Base 添加防御 - 防御牌效果 Defense Effect : Card Effect - 血条UI增加防御值显示效果 ### 2024.03.06//laptop - 27-创建USS血条样式 - 编写对应的USS代码 - 28-制作Game Play Panel - 可视化界面调整Panel布局以及元素 - 更改Attribute中的Picking Mode为Ignore,避免遮挡射线 - .turnbutton:hove .turnbutton:active - 29-绑定Game Play Panel数据 - 代码获取对应的VisualElement - 添加对应的牌堆数字更改事件,在数量变化时通知 - 30-回合转换 - Player和Enemy对应的TurnBegin和TurnEnd - 对应的事件管理 - 回合开始抽牌,回合结束回收卡牌 - 31-出牌能量判断 - 结束回合按钮在不同回合的不同状态设置 - 在Player中添加能量对应的属性和方法 - SetLayout中调用,依据卡牌能量更改显示样式 - 卡牌执行效果函数中减去对应能量 - 能量不足的时候将Drag函数返回 ### 2024.03.05//laptop - 22-导入Spine人物素材 - Spine插件的使用 - 23-人物基类代码 - 创建CharacterBase基类 - IntVariable - ```c# public int maxValue; public int currentValue; public IntEventSO ValueChangedEvent; [TextArea] [SerializeField] private string description; public void SetValue(int value) { currentValue = value; ValueChangedEvent.RaiseEvent(value, this); } ``` - 创建hp对应的SO文件 - 24-执行卡牌效果 - 添加对应的枚举类型 - CardData添加卡牌效果List CardEffect(基类) - 注意修改Player和Enemy的Tag和Layer - 洗牌函数呼叫对应事件 - 25-制作血条UI Document - UI Toolkit创建Panel Setting和UI Document - Progress Bar制作血条 - 角色创建对应的Transform子物体 ``` Rect rect = RuntimePanelUtils.CameraTransformWorldToPanelRect (element.panel, worldPosition, size, Camera.main); element.transform.position = rect.position; ``` - 26-绑定血条数据 - 更改element.style.display控制是否显示 - 代码修改healthBar的tile、value、highValue ### 2024.03.04//laptop - 16-抽卡动画 - DOTWEEN实现transform的动画效果 - 17-实现卡牌扇形布局 - 数学方法计算角度 - 18-实现鼠标事件 - IPointerEnterHandler, IPointerExitHandler - 添加布尔值isAnimating,抽卡动画期间不检测鼠标 - 记录原本位置和显示层级 - 每次鼠标进入的时候更改位置、角度、层级,离开时恢复 - 19-卡牌拖拽 - IBeginDragHandler, IDragHandler, IEndDragHandler - 鼠标的 Vector3 (Input.mousePosition.x, Input.mousePosition.y, 10f); - 开始拖拽时禁用设置 isAnimating = true, 结束后恢复 - 20-攻击牌的拖拽指针 - LineRender制作箭头指针 - 贝塞尔曲线点计算 - 开始拖拽生成箭头,过程中更改位置,结束时销毁 - 21-实现洗牌逻辑 - 首先清空弃牌堆 - ShuffleCard(); ```c# for (int i = 0; i < drawDeck.Count; i++) { CardDataSO temp = drawDeck[i]; int randomIndex = Random.Range(i, drawDeck.Count); drawDeck[i] = drawDeck[randomIndex]; drawDeck[randomIndex] = temp; } ``` - 初始化时洗牌,抽牌堆空时将弃牌堆放到抽牌堆并洗牌 ### 2024.03.03//laptop - 12-创建卡牌数据类 - 在游戏开始时用Addressable加载所有卡牌 - 卡牌Addressable标记label(key) - 13-对象池 - 对象池工具类 PoolTool - 在游戏初始化时, 依次使用Get和Release来生成对象池 - 14-制作卡牌库实现抽牌 - 初始卡牌库,当前手牌库(数据) - 抽牌堆,弃牌堆,手牌 - 从初始卡牌库获取卡牌到抽牌堆 - 每次从抽牌堆列表中获取卡牌并调用对象池 - 15-创建卡牌布局 - 数学方法计算卡牌间距、位置 - 每次抽牌之后重新计算布局 ### 2024.03.02//laptop - 09-保存地图场景 - 工具类 SerializeVector3 将 Vector3 序列化进行保存 - MapLayoutSO 存储布局数据,包括房间和连线 - 10-房间进出逻辑 - GameManager 管理统合数据 - 进入房间后,更新布局数据 - 事件 AfterRoomLoaded Event ,点击房间广播加载对应场景 - 11-制作卡牌Prefab - 按层级摆放卡牌素材 - TextMeshPro显示文字 - Camera添加Physics 2D raycaster组件,检测指定Layer的碰撞体 ### 2024.03.01//laptop - 07-泛型事件框架 - BaseEventSO保存所有的事件 - ```c# [TextArea] public string description; public UnityAction OnEventRaised; public string lastSender; public void RaiseEvent(T value, object sender) { OnEventRaised?.Invoke(value); lastSender = sender.ToString(); // 记录最后一个发送者 } ``` - ObjectEventListener 监听事件 - 08-场景加载 - Awaitable - 异步加载场景 ### 2024.02.29//laptop - 03-设计地图配置表 - MapConfigSO - 枚举类型使用[Flags]实现多选效果 - 获取屏幕宽度高度 - ```c# screenHeight = Camera.main.orthographicSize * 2; screenWidth = screenHeight * Camera.main.aspect; columnWidth = screenWidth / mapConfig.roomBlueprints.Count; ``` - 04-生成地图上的房间 - 逐列逐行生成房间(两层for) - Boss房间固定位置 - 05-生成房间之间连线 - 生成LineRenderer预制体作为连线 - 运用HashSet,使得所有房间都有被连线 - 更改Material纹理的Offset实现动画效果 - 06-实现随机地图 - 将多选的RoomType转化成string[], 随机下标再转化成RoomType - RoomDataDict ### 2024.02.28//laptop - 01-创建项目,导入素材、插件 - 课程素材 - Universal Bronze Icon Pack - DOTWEEN - 编辑器视图美化插件 - 02-创建房间的Prefab - 生成房间样例,添加碰撞体以及点击处理逻辑 - 创建Room Data的SO文件 - Setup Room 函数,基于Room Data设置房间物体