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

学习游戏制作记录(技能系统)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.lryc.cn/news/598690.html

相关文章:

  • Oracle国产化替代:一线DBA的技术决策突围战
  • 【ROS1】09-ROS通信机制——参数服务器
  • ubuntu25.04+4070+cuda+docker安装
  • prometheus监控k8s的metric详解-01-apiserver部分-05-其他
  • k8s把某个secret挂在某命名空间下
  • 【数据结构】二叉树进阶算法题
  • MongoDB常用场景
  • AI总结视频以及谷歌浏览器插件安装步骤
  • 对examples/train_lora/llama3_lora_eval.yaml模型评估配置文件的理解。
  • Vue2文件上传相关
  • 零知识证明
  • vs2019 创建MFC ActiveX的详细步骤
  • Qt WebEngine Widgets的使用
  • 爬虫基础概念
  • 在Ubuntu上使用QEMU学习RISC-V程序(1)起步第一个程序
  • linux C -glib库的基本使用
  • Windows环境下 Go项目迁移至Ubuntu(WSL) 以部署filebeat为例
  • 如何在 Ubuntu 24.04 服务器或桌面版上安装和使用 gedit
  • 深度分析Java内存回收机制
  • 跨境支付入门~国际支付结算(电商篇)
  • unordered_map和unordered_set特性以及解决哈希冲突
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-19,(知识点:PCB布局布线的设计要点)
  • DevOps 完整实现指南:从理论到实践
  • LeetCode 23:合并 K 个升序链表
  • 【已解决】YOLO11模型转wts时报错:PytorchStreamReader failed reading zip archive
  • 医疗AI轻量化部署方案的深度梳理与优化路径判研
  • 基于Qt的仿QQ聊天系统设计
  • Ethereum: 区块链浏览器,我们的“天眼”
  • 力扣 hot100 Day54
  • 【开源】WpfMap:一个基于WPF(Windows Presentation Foundation)技术构建的数据可视化大屏展示页面