首页 > 其他分享 >23. 人物基类代码

23. 人物基类代码

时间:2024-03-05 20:46:40浏览次数:14  
标签:ScriptableObject 23 int 代码 public 基类 hp CurrentHP

介绍一下 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 来进行存储。

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240305_2022

标签:ScriptableObject,23,int,代码,public,基类,hp,CurrentHP
From: https://www.cnblogs.com/hellozjf/p/18054891

相关文章

  • A-10.30.0.23-接入-主
    SHDXYQB4-108-C-04_C-05-ASW-RGS6250-M1-01U37#showrun Buildingconfiguration...Currentconfiguration:15621bytesversion11.0(5)B9P120hostnameSHDXYQB4-108-C-04_C-05-ASW-RGS6250-M1-01U37privilegeexecalllevel1showrunning-configprivilegeexeclevel......
  • 网页浏览器Chrome开发者调试工具-Source(源代码)
    前言全局说明网页浏览器Chrome开发者调试工具-Source(源代码)一、网页浏览器Chrome开发者调试工具-Source(源代码)源码标签页,是用来查看整个网站打开过程中,都下载了那些文件。可以对文件进行断点调试,也可以对所有下载的文件进行搜索。二、关闭标签页在标签页上右键,可以......
  • C++ 职工信息管理系统项目的二次开发 2252423 ywx
    来源:同学大二下的期末大作业:网上购书系统项目。运行环境:VisualStudio2022①项目结构:②运行结果截图:主菜单界面:功能选择界面:工资总额输出界面:平均工资输出界面:显示输出界面:增加正式员工界面:增加临时员工界面:修改数据界面:③主要问题:查询功能未完善,有时会出现......
  • 代码随想录算法训练营第三十六天| ● 738.单调递增的数字 ● 968.监控二叉树 ● 总
    单调递增的数字 题目链接:738.单调递增的数字-力扣(LeetCode)思路:从左向右验证是否按位单调递增,如果出现递减的区间,则从该位开始验证该位减1后是否比左边的相邻位大,如果不符合就接着向左寻找这样的位,如果找到了,则将该位前面的位复制到结果中,该位减1加入结果,该位之后的位全部改......
  • day56 动态规划part13 代码随想录算法训练营 718. 最长重复子数组
    题目:718.最长重复子数组我的感悟:有难度,不好想。理解难点:二维DP,记住那个图:===============听课笔记:我的代码:classSolution:deffindLength(self,nums1:List[int],nums2:List[int])->int:#初始化#假设内层是nums1,n,j,外层是nums2,m,......
  • (23)lazarus memdataset的filter问题
    参考https://www.cnblogs.com/qiufeng2014/p/17388138.html链接:https://pan.baidu.com/s/1ayzgDbXjgXBnw-jM1FR4gA提取码:ogqzunitUnit1;{$modeobjfpc}{$H+}interfaceusesClasses,SysUtils,memds,db,Forms,Controls,Graphics,Dialogs,DBGrids;type{TForm1......
  • day56 动态规划part13 代码随想录算法训练营 674. 最长连续递增序列
    题目:674.最长连续递增序列我的感悟:网速快是不一样!!这个题别看简单,写不出递推公式也白搭理解难点:递推公式,是只跟昨天的比,如果没有,就重新计算!听课笔记:我的代码:classSolution:deffindLengthOfLCIS(self,nums:List[int])->int:dp=[1]*len(nums)......
  • 动手学强化学习(七.1):DQN 算法代码
    一、代码如下:importrandomimportgymimportnumpyasnpimportcollectionsfromtqdmimporttqdmimporttorchimporttorch.nn.functionalasFimportmatplotlib.pyplotaspltimportrl_utilsclassReplayBuffer:'''经验回放池'''......
  • 代码随想录算法训练营第三十六天 | 56. 合并区间,763.划分字母区间,435. 无重叠区间
    435.无重叠区间 已解答中等 相关标签相关企业 给定一个区间的集合 intervals ,其中 intervals[i]=[starti,endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例1:输入:intervals=[[1,2],[2,3],[3,4],[1,3]]输出:1解......
  • day56 动态规划part13 代码随想录算法训练营 300. 最长递增子序列
    题目:300.最长递增子序列我的感悟:之前做过,都忘记了,这次好好记思路理解难点:dp[i]是由昨天的历史遍历后,得到今天的值 听课笔记:我的代码:classSolution:deflengthOfLIS(self,nums:List[int])->int:#难点是dp的推导公式,#dp[i]是截止到n......