当前位置: 首页 > backend >正文

学习游戏制作记录(技能系统)7.24

1.技能系统概念

首先让我们了解一下游戏的技能本质是什么,以投掷剑为例子,当玩家使用这个技能时,首先会播放玩家的动画,随后通过技能脚本创建一个剑的对象,当剑回收时会再次调用脚本,让它朝向玩家飞来并销毁自己,所以我们可以创建一个技能管理器,将我们所有的技能脚本放在这个管理器中。

2.创建玩家管理器

创建PlayerManage脚本:

    public static PlayerManage instance;//单例模式,使用单例模式可以使我们更加方便的找到玩家的组件
public Player player;//只需初始化一次,不需要我们反复用GameObject.Find来寻找玩家组件

    public void Awake()
{
if (instance != null)//确保我们只有一个实例
{
Destroy(instance.gameobject);
}
else
{
instance = this;
}
}

修改SkeletonBattleState脚本:

player =PlayerManage.instance.player.transform;//可以直接获取Player信息

在SkeletonGroundedState脚本中也做同样的修改

创建一个空对象PlayerManage并挂载PlayerManage脚本,指定Player的对象,这样我们就实现了玩家管理器

3.创建技能管理器

创建Skill脚本(所有技能的父类):

    [SerializeField] private float cooldown;
private float coolDownTime;//每个技能都有的冷却时间

    protected virtual void  Update()
{
coolDownTime -= Time.deltaTime;
}

    public virtual bool CanbeUsed()//判断是否可以使用技能
{
if(coolDownTime<0)
{
UseSkill();
coolDownTime = cooldown;
return true;
}

        else
{
Debug.Log("i am in cooldown");
return false;
}
}


    public virtual void UseSkill()//使用技能
{

    }

创建Dash_Skill脚本:

public class Dash_Skill : Skill//继承
{
public override void UseSkill()
{
base.UseSkill();

        Debug.Log("i am clone");//这里仅作调试,具体我们想实现一个冲刺后留下一个可以攻击敌人的幻影


    }
}

创建SkillManage脚本:

public static SkillManage instance;//同样单例模式

    public Dash_Skill dash {  get; private set; }//获取冲刺克隆技能


    public void Awake()
{
if(instance != null)
{
Destroy(instance);
}
else
{
instance = this;
}
}

    private void Start()
{
dash = GetComponent<Dash_Skill>();
}

    }

Player脚本:

我们可以删除这里定义的冲刺冷却时间

修改:

    public void CheckForDashInput()
{
if(isWallDetected())
{
return;
}

        if(Input.GetKeyDown(KeyCode.LeftShift)&&SkillManage.instance.dash.CanbeUsed())//这里调用CanbeUsed即可
{

            dashDir = Input.GetAxisRaw("Horizontal");

            if(dashDir==0)
{
dashDir = facingDir;
}
stateMachine.ChangeState(dashState);
}
}

演示:

http://www.xdnf.cn/news/16120.html

相关文章:

  • 二、计算机网络技术——第4章:网络层
  • 《计算机“十万个为什么”》之 [特殊字符] 深浅拷贝 引用拷贝:内存世界的复制魔法 ✨
  • 傅里叶转换(机器视觉方向)
  • MST技术加持,简化桌面多屏布局
  • 解决sparksql创建出来的数据库路径错误的问题
  • 音视频中一些常见的知识点
  • 《狼道》:生存智慧与处世哲学
  • sqlsuger 子表获取主表中的一个字段的写法
  • Python 程序设计讲义(8):Python 的基本数据类型——浮点数
  • 基于springboot的乡村旅游在线服务系统/乡村旅游网站
  • 使用Imgui和SDL2做的一个弹球小游戏-Bounze
  • 回顾 Palantir:八年之旅的反思
  • RCLAMP0502A.TCT Semtech:超低电容TVS二极管,高速接口+军工级防护!
  • lumerical——光纤布拉格光栅(Fiber Bragg gratings)
  • 2025 ACT 汽车功能安全相关PPT分享
  • Python-初学openCV——图像预处理(一)
  • 【盘古100Pro+开发板实验例程】FPGA学习 | Modelsim 的使用和 do 文件编写
  • IO补充.
  • WebGIS 中常用空间数据格式
  • UE 模型动画播放控制
  • Linux下的lcd屏幕显示操作
  • Java学习---Spring及其衍生(上)
  • S段和G段到底有什么区别
  • 算法笔记之归并排序
  • Windows 用 Python3 快速搭建 HTTP 服务器
  • linux驱动开发笔记--GPIO驱动开发
  • WPF的一些基础知识学习记录
  • 应用层自定义协议【序列化+反序列化】
  • TODAY()-WEEKDAY(TODAY(),2)+1
  • 彻底掌握双列集合——Map接口以及实现类和常用API及其底层原理