首页 > 其他分享 >Unity如何设计一个技能系统

Unity如何设计一个技能系统

时间:2024-01-23 09:33:38浏览次数:27  
标签:触发 name Unity Skill 设计 skill public 技能

一、技能系统的设计思路

技能系统是游戏中非常重要的一部分,因此在设计技能系统时需要考虑以下几个方面:

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

1.技能类型

不同的游戏有不同的技能类型,例如魔法、武器、药水等。在设计技能系统时需要考虑游戏的类型和玩家的需求,选择适合的技能类型。

2.技能效果

技能的效果是技能系统中最重要的部分。技能效果可以影响游戏中的各种元素,例如玩家的属性、敌人的状态、游戏环境等。在设计技能效果时需要考虑技能的作用范围、持续时间、伤害值等因素。

3.技能触发条件

技能触发条件是指玩家在何时何地可以使用技能。在设计技能系统时需要考虑技能触发条件的灵活性和可配置性,以便满足不同玩家的需求。

4.技能升级和解锁

技能系统应该具有升级和解锁的功能,让玩家可以通过完成任务或者获得经验值来获得更高级别的技能。在设计技能系统时需要考虑技能升级和解锁的方式和条件。

二、技能系统的实现步骤

1.创建技能类

在Unity中创建技能类,用于定义技能的属性和效果。技能类应该包含以下属性:

名称:技能的名称

类型:技能的类型,例如魔法、武器、药水等

消耗:使用技能时需要消耗的资源,例如魔法值、能量等

冷却时间:使用技能后需要等待的时间,才能再次使用

效果:技能的效果,例如增加属性、伤害敌人等

2.创建技能触发器

技能触发器是用于触发技能的脚本。在Unity中创建一个空对象,然后添加一个脚本组件,命名为SkillTrigger。在SkillTrigger脚本中添加以下代码:

public class SkillTrigger : MonoBehaviour

{

public Skill skill; //技能对象

public float range; //技能触发范围

public float delay; //技能触发延迟时间

private float lastTriggerTime; //上次触发时间

void OnTriggerEnter(Collider other)

{

    if (other.tag == "Player" && Time.time > lastTriggerTime + delay)

    {

        lastTriggerTime = Time.time;

        //触发技能

        skill.Activate();

    }

}

}

在SkillTrigger脚本中,定义了技能对象、触发范围、触发延迟时间和上次触发时间等属性。当玩家进入技能触发范围内,并且上次触发时间与延迟时间的和小于当前时间时,就会触发技能。

3.创建技能管理器

技能管理器是用于管理技能的脚本。在Unity中创建一个空对象,然后添加一个脚本组件,命名为SkillManager。在SkillManager脚本中添加以下代码:

public class SkillManager : MonoBehaviour

{

public List<Skill> skills; //技能列表

public static SkillManager instance; //单例对象

void Awake()

{

    instance = this;

}

public Skill GetSkillByName(string name)

{

    foreach (Skill skill in skills)

    {

        if (skill.name == name)

        {

            return skill;

        }

    }

    return null;

}

}

在SkillManager脚本中,定义了技能列表和单例对象。在Awake方法中,将当前对象设置为单例对象。GetSkillByName方法用于根据技能名称获取技能对象。

4.创建技能界面

技能界面是用于展示玩家拥有的技能和技能的等级。在Unity中创建一个UI面板,然后添加一个脚本组件,命名为SkillUI。在SkillUI脚本中添加以下代码:

public class SkillUI : MonoBehaviour

{

public GameObject skillItemPrefab; //技能项预制体

public Transform skillItemList; //技能项列表

void Start()

{

    foreach (Skill skill in SkillManager.instance.skills)

    {

        //创建技能项

        GameObject skillItem = Instantiate(skillItemPrefab, skillItemList);

        skillItem.GetComponent<SkillItem>().SetSkill(skill);

    }

}

}

在SkillUI脚本中,定义了技能项预制体和技能项列表。在Start方法中,遍历技能列表,创建技能项,并设置技能项的属性。

5.创建技能项

技能项是用于展示技能的UI元素。在Unity中创建一个UI面板,然后添加一个脚本组件,命名为SkillItem。在SkillItem脚本中添加以下代码:

public class SkillItem : MonoBehaviour

{

public Text nameText; //技能名称文本

public Text levelText; //技能等级文本

public Image iconImage; //技能图标

private Skill skill; //技能对象

public void SetSkill(Skill skill)

{

    this.skill = skill;

    nameText.text = skill.name;

    levelText.text = "等级:" + skill.level;

    iconImage.sprite = skill.icon;

}

}

在SkillItem脚本中,定义了技能名称文本、技能等级文本和技能图标等属性。SetSkill方法用于设置技能项的属性。

三、技能系统的关键代码实现

1.技能类的实现

技能类的实现如下:

public class Skill

{

public string name; //技能名称

public string type; //技能类型

public int consume; //技能消耗

public float cooldown; //技能冷却时间

public int level; //技能等级

public Sprite icon; //技能图标

public SkillEffect effect; //技能效果

public void Activate()

{

    if (Time.time > effect.lastActivateTime + cooldown)

    {

        effect.Activate();

    }

}

}

在技能类中,定义了技能的名称、类型、消耗、冷却时间、等级、图标和效果等属性。Activate方法用于激活技能效果。

2.技能效果类的实现

技能效果类的实现如下:

public class SkillEffect

{

public float lastActivateTime; //上次激活时间

public virtual void Activate()

{

    lastActivateTime = Time.time;

}

}

在技能效果类中,定义了上次激活时间和Activate方法。Activate方法用于激活技能效果。

3.技能触发器的实现

技能触发器的实现如下:

public class SkillTrigger : MonoBehaviour

{

public Skill skill; //技能对象

public float range; //技能触发范围

public float delay; //技能触发延迟时间

private float lastTriggerTime; //上次触发时间

void OnTriggerEnter(Collider other)

{

    if (other.tag == "Player" && Time.time > lastTriggerTime + delay)

    {

        lastTriggerTime = Time.time;

        //触发技能

        skill.Activate();

    }

}

}

在技能触发器中,定义了技能对象、触发范围、触发延迟时间和上次触发时间等属性。当玩家进入技能触发范围内,并且上次触发时间与延迟时间的和小于当前时间时,就会触发技能。

4.技能管理器的实现

技能管理器的实现如下:

public class SkillManager : MonoBehaviour

{

public List<Skill> skills; //技能列表

public static SkillManager instance; //单例对象

void Awake()

{

    instance = this;

}

public Skill GetSkillByName(string name)

{

    foreach (Skill skill in skills)

    {

        if (skill.name == name)

        {

            return skill;

        }

    }

    return null;

}

}

在技能管理器中,定义了技能列表和单例对象。GetSkillByName方法用于根据技能名称获取技能对象。

5.技能项的实现

技能项的实现如下:

public class SkillItem : MonoBehaviour

{

public Text nameText; //技能名称文本

public Text levelText; //技能等级文本

public Image iconImage; //技能图标

private Skill skill; //技能对象

public void SetSkill(Skill skill)

{

    this.skill = skill;

    nameText.text = skill.name;

    levelText.text = "等级:" + skill.level;

    iconImage.sprite = skill.icon;

}

}

在技能项中,定义了技能名称文本、技能等级文本和技能图标等属性。SetSkill方法用于设置技能项的属性。

标签:触发,name,Unity,Skill,设计,skill,public,技能
From: https://www.cnblogs.com/bycw/p/17981646

相关文章

  • 一种行之有效的防错策略:在支付系统中实施防呆设计的实践
    聊个支付人都会碰到的问题:资损防控。做支付如果还没有碰到过资损,那就是做得时间还不够久。资损防控是一个很大的话题,需要开几篇文章才能讲完,今天只从一件小事入手聊一个简单而又行之有效的防错策略:防呆设计的实践。1.一个线上事故曾经处理过一个资损事件,很典型,值得说道说道。一个......
  • Appium PO模式UI自动化测试框架——设计与实践
    AppiumPO模式UI自动化测试框架——设计与实践1.目的  相信做过测试的同学都听说过自动化测试,而UI自动化无论何时对测试来说都是比较吸引人的存在。相较于接口自动化来说它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟,那么存在即合理,自动化UI测试自然也是广......
  • 设计模式:行为型模式(套路:甩锅大法)
    文章目录行为型模式(BehavioralPattern)1.职责链模式(ChainofResponsibility)1.1.定义1.2.结构1.3.代码实现1.4.优缺点1.5.使用场景1.6.总结2.命令模式(Command)2.1.定义2.2.结构2.3.时序图2.4.代码实现2.5.优缺点2.6.使用场景2.7.总结3.解释器模式(Inter......
  • 设计模式之策略模式
    1.定义定义一系列算法,并将每个算法封装成一个独立的类,使它们可以相互替换2.口语化表述策略模式通常适用于需要根据不同情况选择不同算法的场景,例如排序算法、计算税费等现在说说排序算法,常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等,每种排序算法......
  • 设计模式——组合模式
    定义组合(CompositePattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。节点组合模式结构为一颗二叉树,存在三种节点Component:组合模式......
  • Unity3D 协程的优缺点详解
    前言Unity3D是一款强大的游戏开发引擎,它提供了许多功能和工具,以帮助开发者创建高质量的游戏。其中一个非常重要的功能就是协程(Coroutine)。协程是一种特殊的函数,它可以在执行过程中暂停并在稍后的时间点继续执行。在本文中,我们将详细探讨Unity3D协程的优缺点,并提供一些技术详解和......
  • 【Python进阶】Python设计模式
    设计模式介绍什么是设计模式设计模式是面对各种问题进行提炼和抽象而形成的解决方案。这些设计方案是前人不断试验,考虑了封装性、复用性、效率、可修改、可移植等各种因素的高度总结。它不限于一种特定的语言,它是一种解决问题的思想和方法为什么要用设计模式按照设计模式编写......
  • 设计模式(二十二)模板方法
    一、定义定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义该算法的特定步骤。模板方法是一种类行为型模式二、描述模板方法模式结构比较简单,其核心是抽象类和其中的模板方法的设计,包含以下两个角色:1、AbstractClass(抽......
  • Unity:Couldn't open include file 'Packages/com.unity.render-pipelines.universal/S
    初学Shader,Unity报错↑,总之是找不到ulsl的Core文件,网上找的其他解决方案例如删除文件夹再生成或者改变shader的某些属性,但是根本找不到。最终找到原因是项目类型不同,要把传统3D升级成URP项目。解决办法:安装UniversalRP拓展1.在unity中打开需要升级的场景,SaveAs一份并打开该场......
  • 设计模式
    八大原则:依开单替,接优封针依:依赖倒置原则高层次的代码不应该依赖低层次的代码,应该依赖抽象、抽象的代码不应该依赖具体的代码开:开闭原则对扩展开放,对修改关闭单:单一职责一个类应该仅有一个变化的原因,该变化隐含了它的职责,职责太多会造成混乱替:替换原则子类必须能够替换他......