Unity 从0开始编写一个技能编辑器_01_分析需求

news2025/4/7 9:59:02

入职以来一直很想实现一个技能编辑器,在积累了一些经验以后,决定利用ScriptableObject开发一个,在此记录
1.简单的需求分析
在游戏开发中,技能系统是一个至关重要的组成部分。技能决定了游戏角色可以执行的各种动作,例如攻击、治疗、移动等。通常,技能由多个元素组成,包括技能效果(Effect)、技能触发条件(triggerr)、技能冷却时间(Cooldown)等。为了更好地管理和调整这些技能,我们需要一个可视化的编辑器。
2.粗略的实现哪些功能
Buff 类似计时器功能 startscript endscript delaytime(开始延时时间) lasttime(buff持续时间-1为永久) TrickTime(脚本执行间隔) TrickScript(持续时间内按间隔时间刷新执行的脚本)

Trigger 一些事件触发 触发条件 判断是否执行后续脚本 触发后执行的脚本,要在特定位置埋下事件

Effect 生成bullet 执行Script (设计一个skillbyEffect 凭此释放技能可以让怪物NPC靠Buff释放技能)

Bullet 子弹 子弹形态 链接track

Skill 技能应该具有各种属性,包括伤害、冷却时间、目标、范围等。编辑器需要允许用户定义这些属性,并且能够将 Effect、Buff 和 Bullet 与技能关联。

3.ScriptableObject的意义
可以创建多个不同类型的ScriptableObject,例如Skill、Buff、Effect、Bullet等,以满足不同的需求。
ScriptableObject的数据是独立的,它们不依赖于特定的场景或游戏对象。这使得技能可以轻松地跨不同场景和游戏对象共享和重用。
脚本化操作:可以通过脚本在运行时创建、修改和管理ScriptableObject。

例如

using UnityEngine;
using UnityEngine.Events;

[CreateAssetMenu(fileName = "New Skill", menuName = "Skill System/Skill")]
public class SkillSo : ScriptableObject
{
	[SerializeField]
	public SkillType skillType;

	[SerializeField]
	public AttackType attackType;

	[SerializeField]
	public float spiritCost;

	[SerializeField]
	public float damageRatio;

	[SerializeField]
	public float skillCD;

	public float lifeTime;

	public Vector3 direction;

	public float speed;

	public float damage = 1f;
}


[CreateAssetMenu(fileName = “New Skill”, menuName = “Skill System/Skill”)] 是一个特性(Attribute),用于在Unity编辑器中创建新的技能资产(Asset)。它指定了在Unity项目中创建新技能时的默认文件名和菜单路径。这使得在Unity编辑器中可以右键点击创建新技能,并将其保存为一个ScriptableObject。
下面一系列的 public 字段是用来存储技能的各种属性和参数。这些字段包括:

skillType:技能的类型,可能是一个自定义枚举类型 SkillType。
attackType:技能的攻击类型,可能是一个自定义枚举类型 AttackType。
spiritCost:使用技能所需的精力消耗。
damageRatio:技能的伤害比率。
skillCD:技能的冷却时间。
lifeTime:技能在游戏中存在的时间。
direction:技能的方向。
speed:技能的速度。
damage:技能的伤害值,默认为1。
后续我可能会扩展它和SkillType的枚举

在编写这段代码后即可右键创建so文件
在这里插入图片描述

using System;

// 技能类型枚举
public enum SkillType
{
    MeteorSword,             // 陨剑术
    SkySword,           // 天剑
    SpeedBuff,          // 速度增益
    SwordRain,          // 剑雨
    WaterDrawSword,     // 提水剑
    None                // 无
}

一个简单的skillType枚举
在这里插入图片描述
然后设计一个skill基类去读取和利用其中的信息

public abstract class SkillBase : MonoBehaviour
{
	public SkillSo so;

	public SkillType GetSkillType()
	{
		return so.skillType;
	}


	public AttackType GetAttackType()
	{
		return so.attackType;
	}


	public float SpiritCost()
	{
		return so.spiritCost;
	}


	public float DamageRatio()
	{
		return so.damageRatio;
	}


	public float SkillCD()
	{
		return so.skillCD;
	}


	protected void Awake()
	{
		so.sr = base.GetComponentInChildren<SpriteRenderer>();
	}




	protected virtual void SkillFinish()
	{
        UnityEngine.Object.Destroy(base.gameObject);
	}


}

后续应该在skillbase写一些逻辑去处理,例如对外提供skill图标让UImanager加载,对碰撞或范围内的敌人造成伤害。

在贴一个attackType

using System;

// 攻击类型枚举
public enum AttackType
{
    Metal,    // 金
    Wood,     // 木
    Water,    // 水
    Fire,     // 火
    Earth,    // 土
    Thunder,  // 雷
    Sword,    // 剑
    None      // 无
}

然后我会设计palyerManager去读取预制体身上实例的SkillSo文件进行相应的处理

今天就先分享到这,管他能不能用,先写了再说

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/995827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深入理解Linux内核锁】八、完成量

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、完成量API2、API实现2.1 completion2.2 init_completion2.3 wait_for_com…

运行速度终于变快了!优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

经常有小伙伴后台留言&#xff0c;说优化VMD参数的程序为什么运行时间辣么长&#xff0c;有没有办法改善一下&#xff01; 今天小淘就为大家带来了改善运行时间的方法&#xff1a;采用官方自带的vmd函数 这是MATLAB官方自带的VMD函数截图&#xff0c;可以看到只有2020a版本以后…

【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业课程设计

作者主页&#xff1a;paper jie 的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

SLAM从入门到精通(ROS安装)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 ROS科研上面用的多&#xff0c;实际生产其实用的也不少。它本身还是很好的应用框架。当然&#xff0c;它对于很多初学的同学来说还是很友好的。学完…

管理类联考——数学——汇总篇——知识点突破——工程

⛲️ 工程问题是应用题中仅次于路程问题的一个常考点&#xff0c;既是重点&#xff0c;也是难点。其主要的基本关系式为&#xff1a; 工作时间 工作效率 工作量 工作时间工作效率工作量 工作时间工作效率工作量。 本专题主要学习复杂的工程问题&#xff0c;主要有以下三种方…

【动手学深度学习】--机器翻译与数据集

文章目录 机器翻译与数据集1.下载和预处理数据集2.词元化3.词表4.加载数据集5.训练模型 机器翻译与数据集 学习视频&#xff1a;机器翻译数据集【动手学深度学习v2】 官方笔记&#xff1a;机器翻译与数据集 机器翻译&#xff08;machine translation&#xff09;指的是 将序…

absolute和relative元素层级问题

布局层级问题 同一个父元素的两个子元素&#xff0c;一个是absolute布局&#xff0c;一个是relative布局&#xff0c;为啥relative元素在absolute元素的背景色之上&#xff1f; 实例&#xff1a; <div id"father">father<div id"c1">c1-absolu…

人工智能海洋中的塞壬之歌:大型语言模型LLM中的幻觉研究综述(一)

“ 大型语言模型LLM 如 ChatGPT 已经得到了广泛的应用&#xff0c;涵盖了诸多应用领域。但也存在生成内容与事实不符的幻觉问题。这种幻觉包括输入冲突、语境冲突以及与事实相冲突的情况&#xff0c;给实际需求和应用构建带来了挑战。一篇最新的论文《Sirens Song in the AI Oc…

科技革新自动驾驶:拓世AI智能助理携手跟您一起点亮未来之旅

科技改变生活&#xff0c;智能改变世界&#xff0c;近年来&#xff0c;随着科技的不断进步&#xff0c;政策和市场的赋能推动&#xff0c;自动驾驶已经成为当今社会最炙手可热的话题之一。从其中的技术发展趋势来看&#xff0c;我国自动驾驶模式正由单车智能向车路协同时代演进…

王道数据结构编程题 栈和队列

判断合法序列 题目描述 假设 I 和 O 分别表示入栈和出栈操作&#xff0c;栈的初态和终态均为空&#xff0c;入栈和出栈的操作序列可表示为仅由 I 和 O 组成的序列&#xff0c;可以操作的序列称为合法序列&#xff0c;否则称为非法序列。编写一个算法&#xff0c;判定所给的序…

《向量数据库》——都有哪些向量数据库,都有什么特点?

随着大数据和机器学习应用的崛起,对于存储和查询高维度向量数据的需求也逐渐增加。在这个背景下,向量数据库和传统的关系型数据库开始在不同的数据世界中崭露头角,它们分别以各自独特的方式解决了不同类型数据的存储和查询需求。本文将探讨向量数据库和关系型数据库之间的区…

第5章_瑞萨MCU零基础入门系列教程之GPIO输入输出

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

计算机网络原理 运输层

一&#xff0c;运输层协议概述 1&#xff0c;进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最底层。当网络边缘部分的两台主机使用网络核心部分的功能进行…

水表电表集中远程抄表系统分析

电表水表远程抄表系统石家庄光大远通电气有限公司主要经营自动抄表,远程抄表,集中抄表,新供应信息&#xff0c;是石家庄光大远通电气有限公司自动远程抄表系统集信号采集、网络通信于一体的高性能抄表装置&#xff0c;该系统以485通讯方式读取水表电表的数据,以MBUS通讯方式读取…

SwiftUI 内功加持:“曳光弹“实现自定义样式进度条(ProgressView)

概览 虽然 SwiftUI 已为我们内置了很多常用视图&#xff0c;不过有时我们还是需要根据实际来进一步美化显示或增加功能。 如上图所示&#xff0c;在本篇博文中我们将结合敏捷哲学中一个超级实用的开发技巧&#xff1a;曳光弹&#xff0c;来一步一个脚印循序渐进的实现 Progres…

应急响应-Windows挖矿实战

0x00 主机表现 windows主机cpu拉满&#xff0c;主机卡顿&#xff0c;初步判断为中了挖矿病毒 0x00 处置 通过cpu拉满状态&#xff0c;定位初步的进程文件&#xff0c; 通过进程得到的文件上传沙箱&#xff0c;结果显示为恶意文件&#xff0c; 定位到文件夹&#xff0c; 存…

力扣:92. 反转链表 II(Python3)

题目&#xff1a; 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#…

秋招实习 算法刷题网站推荐

Home - CodeFun2000 优点&#xff1a; 收录了各大互联网公司最新最全的笔试题。平台贴合真实笔试环境&#xff0c;都是Acm模式&#xff0c;有利于准备秋招。网站的每题都有coder提供的题解&#xff0c;也有专门的博客对每种类型的题目进行分类&#xff0c;大大提高学习的效率。…

Nginx 配置错误导致漏洞

文章目录 Nginx 配置错误导致漏洞1. 环境启动2. CRLF注入漏洞2.1 漏洞描述2.2 漏洞原理2.3 漏洞利用2.4 修复建议 3. 目录穿越漏洞3.1 漏洞描述3.2 漏洞原理3.3 漏洞利用3.4 修复建议 4. add_header被覆盖4.1 漏洞描述4.2 漏洞原理4.3 漏洞利用4.4 修复建议 Nginx 配置错误导致…