23. 人物基类代码
1.02. 创建房间的 Prefab2.03. 设计地图配置表3.04. 生成地图上的房间4.07. 泛型事件框架5.08. 场景加载6.09. 保存地图场景7.10. 房间进出逻辑8.11. 制作卡牌 Prefab9.12. 创建卡牌数据类10.13. 对象池11.14. 制作卡牌库实现抽卡12.15. 创建卡牌布局13.16. 抽卡动画14.17. 实现卡牌扇形布局15.18. 实现鼠标事件16.19. 卡牌拖拽17.20. 攻击牌的拖拽指针18.21. 实现洗牌逻辑19.22. 导入Spine人物素材
20.23. 人物基类代码
21.24. 执行卡牌效果22.25. 制作血条的 UI Document23.26. 绑定血条数据24.27. 创建USS血条样式25.28. 制作 Gameplay Panel26.29. 绑定 Gameplay Panel 数据27.30. 回合转换28.31. 出牌能量判断29.32. 防御牌及 UI30.33. 回血的苹果牌及特效31.34. 增加力量牌及 UI32.35. 更多卡牌33.36. 人物动画34.37. 敌人意图 AI 逻辑35.38. 敌人的动画执行逻辑36.39. 对战胜负逻辑37.40. 制作胜利和抽卡面板38.41. 抽卡面板的实际逻辑39.42. GameOver 及 Menu 面板40.43. 实现休息房间的逻辑41.44. Boss 制作和整体流程42.45. 淡入淡出及打包游戏介绍一下 VSCode 快捷键
删除文件内容,然后输入 ScriptableObject 就能快速添加一个 ScriptableObject 模板
删除文件内容,然后输入 Editor 就能快速添加一个 Editor 模板
开始写代码
数据 ScriptableObject
如上图所示,首先是在 Scripts/Variable 下面创建一个 IntVariable 对象,它里面存储了 maxValue、currentValue,它还包含一个 ValueChangeEvent,当当前值发生变化的时候,就会发送 ValueChangeEvent 事件
消息 ScriptableObject
这个类继承了 BaseEventSO,当事件产生的时候就会发送一个 int
消息监听者
当 IntEvent 产生的时候,可以通过 IntEventListener 来监听
创建 CharacterBase
using UnityEngine;
public class CharacterBase : MonoBehaviour
{
public int maxHp;
public IntVariable hp;
public int CurrentHP {get => hp.currentValue; set => hp.SetValue(value);}
public int MaxHp {get => hp.maxValue; }
protected Animator animator;
private bool isDead;
protected virtual void Awake()
{
animator = GetComponentInChildren<Animator>();
}
protected virtual void Start() {
hp.maxValue = maxHp;
CurrentHP = MaxHp;
}
public virtual void TakeDamage(int damage)
{
if (CurrentHP > damage)
{
CurrentHP -= damage;
Debug.Log($"CurrentHP: {CurrentHP}");
}
else
{
CurrentHP = 0;
// 当前人物死亡
isDead = true;
}
}
}
人物基类代码,里面有最大HP,当前HP,动画状态机,是否死亡
在 Awake 的时候,将动画状态机赋初值
在 Start 的时候,将最大HP赋值
在 TakeDamage 的时候,就用当前血量减去伤害,如果不够减就设置人物血量为0并标记为死亡
最终结果
可以看到我们给角色添加了 CharacterBase 和 Box Collider 2D 这两个组件。人物的血量使用 IntVariable 来进行存储。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?