Unity如何设计一个技能系统
一、技能系统的设计思路
技能系统是游戏中非常重要的一部分,因此在设计技能系统时需要考虑以下几个方面:
对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。
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方法用于设置技能项的属性。
相关文章:
Unity如何设计一个技能系统
一、技能系统的设计思路 技能系统是游戏中非常重要的一部分,因此在设计技能系统时需要考虑以下几个方面: 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬࿰…...

测试流程体系
目录: 软件测试基本概念软件测试模型软件测试工作流程测试左移和测试右移 1.软件测试基本概念 通过手工或者工具对"被测对象"进行测试验证实际结果与预期结果之间是否存在差异 软件测试作用 通过测试工作可以发现并修复软件当中存在的缺陷ÿ…...
Linux下CentOS KVM 虚拟化
介绍: KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它是基于Linux内核的虚拟化解决方案。KVM可以将一台物理服务器分割成多个虚拟机,每个虚拟机都可以运行不同的操作系统和应用程序,从而实现…...

< vue + ElementUi 组件封装:实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 >
实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 👉 前言👉 一、效果演示👉 二、实现思路👉 三、实现案例👍 卷王必胜!往期内容 💨 👉 前言 在 Vue elementUi 开…...

MATLAB 之 低层绘图操作和光照及材质处理
这里写目录标题 一、低层绘图操作1. 曲线对象2. 曲面对象3. 文本对象4. 其他核心对象4.1 区域块对象4.2 方框对象 二、光照和材质处理1. 光照处理2. 材质处理2.1 图形对象的反射特性2.2 material 函数 一、低层绘图操作 MATLAB 将曲线、曲面、文本等图形均视为对象,…...

LLM-Client一个轻量级的LLM集成工具
大型语言模型(llm)已经彻底改变了我们与文本交互的方式,OpenAI、Google、AI21、HuggingfaceHub、Anthropic和众多开源模型提供了不同的功能和优势。但是每个模型都有其独特的体系结构、api和兼容性需求,集成这些模型是一项耗时且具有挑战性的任务。 所以…...
leetcode动态数组vector实现杨辉三角
链接: leetcode动态数组vector实现杨辉三角 由题意可易得,从第三行开始,除了开始和末尾的位置上的元素,其余位置上的元素都是由上方的元素以及上方左侧的元素相加得到的,此时就很容易的到从第三行开始状态转移方程为vv[i][j] vv[…...

第二十三章_Redis高性能设计之epoll和IO多路复用深度解析
before 多路复用要解决的问题 并发多客户端连接,在多路复用之前最简单和典型的方案:同步阻塞网络IO模型 这种模式的特点就是用一个进程来处理一个网络连接(一个用户请求),比如一段典型的示例代码如下。 直接调用 recv 函数从一个 socket 上读…...

基于OpenCV-车辆检测项目(简易版)
车辆检测 1.项目介绍2. 读取一段视频3.通过形态学处理识别车辆4.描画轮廓5. 车辆计数并显示 本项目使用的视频地址链接 1.项目介绍 对一个视频进行车辆数量的检测,用到的知识有视频的读取,滤波器,形态学,添加直线、文本ÿ…...
用python获取海康摄像机视频
要调用海康摄像机视频,需要使用海康SDK提供的API。以下是一个简单的示例代码,可以连接到海康摄像机并获取视频流: python import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtGui import QPixmap from PyQ…...

【Linux】遇事不决,可先点灯,LED驱动的进化之路---2
【Linux】遇事不决,可先点灯,LED驱动的进化之路---2 前言: 一、Pinctrl子系统重要概念 1.1 重要概念 1.1.1 pin controller 1.1.2 client device 1.1.3 补充概念 二、GPIO子系统重要概念 2.1 在设备树指定GPIO引脚 2.2 在驱动代码中…...

【计算机网络】数据链路层--点对点协议PPP
1.概念 2.构成 3.封装成帧 - 帧格式 4.透明传输 4.1字节填充法(面向字节的异步链路) 4.2.比特填充法(面向比特的同步链路) 5.差错检测 6.工作状态 7.小结...

【⑦MySQL】· 一文了解四大子查询
前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL标量/单行子查询、列子/表子查询的讲解✨ 目录 前言一、子查询概念二、标量/单行子查询、列子/表子查询三、总结 一、子查询概念 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从My…...

ValSuite报告可以帮助改善您的验证过程的6种方式
热验证工艺是一项复杂而微妙的工作,但它是确保制药和生物技术产品的安全性和有效性的重要组成部分。同时,管理整个验证过程中产生的数据可能很费时,而且容易出错——这就是ValSuite的意义。 这款直观的验证软件简化了数据分析和报告…...

【机器学习】机器故障的二元分类模型-Kaggle竞赛
竞赛介绍 数据集描述 本次竞赛的数据集(训练和测试)是从根据机器故障预测训练的深度学习模型生成的。特征分布与原始分布接近,但不完全相同。随意使用原始数据集作为本次竞赛的一部分,既可以探索差异,也可以了解在训…...

ADB usage
查看手机设备的信息 获取设备的Android版本号 adb shell getprop ro.build.version.release 获取设备的API版本号 adb shell getprop ro.build.version.sdkAdb 获得 sdk版本 adb shell getprop ro.build.version.sdk27 Adb 获得Android版本 adb shell getprop ro.build.vers…...
利用有限元法(FEM)模拟并通过机器学习进行预测以揭示增材制造过程中热场变化:基于ABAQUS和Python的研究实践
1. 引言 增材制造(Additive Manufacturing,AM)近年来引起了大量的研究关注,这主要是因为它可以提供定制化、复杂结构的零件制造解决方案。在AM过程中,热场的分布和变化直接影响了零件的质量和性能。对此,采…...
Kafka与Flume的对比分析
Kafka与Flume的对比分析 一、Kafka和Flume1. Kafka架构2. Flume架构3. Kafka和Flume异同点 二、Kafka和Flume的性能对比1. 数据处理性能对比2. 大规模数据流处理的性能对比 三、性和稳定性对比1. 高可用集群的搭建KafkaFlume 2. 数据丢失和重复消费的问题处理KafkaFlume 四、适…...
docker启动redis哨兵报错(sentinel.conf is not writable: Permission denied)
Sentinel config file /usr/local/sentinel/sentinel.conf is not writable: Permission denied. Exiting… 用这个命令不报错:docker run --net host -p 6666:6666–name redis-sentinel -v /usr/mcc/redis/conf:/usr/local/sentinel/ -v /usr/mcc/redis/data/sent…...
如何编写优秀代码
最近在阅读别人写的代码,进行相应功能的修改。发现很多不规范或者比较绕的地方,总有那么几句看着多此一举,阅读别人的代码就是这样,有时候真的不懂写代码的人当时怎么想的。 例如有这么一段: 用户输入一个名字&#…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...