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

入职以来一直很想实现一个技能编辑器,在积累了一些经验以后,决定利用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文件进行相应的处理

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以提供一些关于使用Unity来开发MMO的建议:1. 设计一个灵活的游戏系统,以满足不同玩家的需求;2. 为MMO游戏创建一个可定制的地图,以及一个动态的动态世界;3. 提供强大的服务器系统,以处理大量的玩家;4. 使用Unity的多人网络功能来实现游戏通信;5. 为玩家提供良好的游戏体验,包括可靠的游戏服务器和高质量的用户界面。 ### 回答2: 使用Unity编写一个MMO(大型多人在线)游戏可以通过以下步骤进行: 1. 游戏设计:首先,我们需要设计游戏的整体概念和主题。确定游戏的类型(科幻、幻想等)、游戏世界的设置和规模、角色和职业的特点,以及游戏的核心玩法。 2. 场景和地图设计:设计游戏的场景和地图,包括各种不同的地形、城镇、副本和野外区域。利用Unity的场景编辑器创建和布置这些场景,并添加必要的元素和互动。 3. 角色和敌对NPC设计:创建和设计玩家角色以及敌对NPC角色。使用Unity的角色建模工具创建角色模型,给他们添加动画、装备和技能。为每个角色分配属性和能力,以确保游戏的平衡性。 4. 多人功能实现:使用Unity的网络功能实现多人在线功能。使用Unity的多人联机功能,可以让玩家在游戏中与其他玩家进行互动、组队和战斗。 5. 游戏系统和任务设计:设计并实现各种游戏系统,例如任务系统、经济系统、技能系统和装备系统等。创建任务并编写相应的脚本,使任务能够被接受、完成和奖励。 6. 用户界面和控制设计:设计游戏的用户界面,包括主菜单、UI元素、跟踪系统和交互系统等。实现角色的控制机制,使玩家能够通过键盘、鼠标或手柄操控角色移动和执行动作。 7. 游戏优化和测试:使用Unity的性能优化工具和调试工具,对游戏进行测试和优化,以确保游戏在各个平台上的流畅运行和良好的性能。 8. 发布和维护:将游戏发布到各个平台,并进行后续的维护和更新,包括修复错误、添加新功能和内容、优化性能等。 总之,使用Unity编写一个MMO游戏是一个复杂的过程,需要深入了解游戏开发的方方面面。通过以上步骤和不断的迭代和完善,可以创建一个令玩家沉浸其中的大型多人在线游戏。 ### 回答3: Unity是一种强大的跨平台游戏引擎,可用于开发各种类型的游戏,包括大型多人在线(MMO)游戏。要用Unity一个MMO,需要以下步骤: 首先,我们需要设计一个合适的游戏世界。这可能涉及创建虚拟地形、城市、洞穴和其他可交互的环境。我们可以利用Unity的内置工具或第三方插件来帮助我们创建这些环境。 接下来,我们需要设计游戏中的角色和怪物。我们可以使用Unity的模型编辑器或导入第三方3D模型来创建游戏中的角色和怪物。我们还可以使用Unity的动画编辑器来添加角色和怪物的动画。 然后,我们需要实现游戏的网络功能。MMO游戏需要能够连接和同步成千上万个玩家的功能。Unity提供了网络功能,可以轻松实现玩家之间的通信和数据同步。 接下来,我们可以添加战斗和技能系统。我们可以使用Unity的脚本编程来实现玩家之间的战斗,并创建各种技能和装备系统。 在游戏的开发过程中,我们需要关注性能优化。由于MMO游戏需要同时处理大量玩家和物品,因此我们需要确保游戏在各种设备上都能流畅运行。我们可以使用Unity的性能分析工具来检查和解决性能瓶颈。 最后,我们可以添加一些额外的功能来增强游戏的体验,比如任务系统、公会系统、商城等。 总之,使用Unity可以很方便地创建一个MMO游戏。通过设计游戏世界、角色和怪物,实现网络功能,添加战斗和技能系统,并关注性能优化,我们可以开发出一个富有创意和有吸引力的MMO游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值