1. 技能框架
我的需求是要在 FlowScript 中写技能,然后在角色中引用这个 FlowScript,当需要释放技能的时候就启用这个 FlowScript
1.1 ScriptableAbility v1
ScriptableAbility 是用来存代表技能内容的 FlowScript 的
之后可能还会有其他功能
Assets/MeowFramework/Core/Scriptable/ScriptableAbility/ScriptableAbility.cs
// ----------------------------------------------
// 作者: 廉价喵
// 创建于: 05/04/2022 15:25
// 最后一次修改于: 11/04/2022 23:04
// 版权所有: CheapMeowStudio
// 描述:
// ----------------------------------------------
using FlowCanvas;
using Sirenix.OdinInspector;
using UnityEngine;
namespace MeowFramework.Core.Scriptable
{
/// <summary>
/// 可资产化技能
/// </summary>
[CreateAssetMenu(fileName = "New Scriptable Ability",
menuName = "MeowFramework/Scriptable Ability/Create Scriptable Ability")]
public class ScriptableAbility : SerializedScriptableObject
{
/// <summary>
/// 技能 ID
/// </summary>
[ValidateInput("IDValidate")]
[Tooltip("技能 ID")]
public int AbilityID;
/// <summary>
/// 俗名
/// </summary>
[Tooltip("俗名")]
public string FriendlyName;
/// <summary>
/// 概述
/// </summary>
[TextArea]
[Tooltip("概述")]
public string Description = "";
/// <summary>
/// 技能 FlowScript
/// </summary>
[Required]
[Tooltip("技能 FlowScript")]
public FlowScript AbilityFlowScript;
/// <summary>
/// 验证函数:是否为非负数
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private bool IDValidate(int value) => value >= 0;
}
}
1.2 AbilityEntity v1
为了让技能的 FlowScript 能够执行,需要有一个 FlowScriptController,而 FlowScriptController 又需要挂在一个物体上,因此,一个技能实体需要一个空物体,空物体上面要挂一个 FlowScriptController,这个 FlowScriptController 的 FlowScript 要赋为 ScriptableAbility 中设置好的 FlowScript
Assets/MeowFramework/Core/Entity/AbilityEntity.cs
// ----------------------------------------------
// 作者: 廉价喵
// 创建于: 11/04/2022 17:49
// 最后一次修改于: 11/04/2022 20:27
// 版权所有: CheapMeowStudio
// 描述:
// ----------------------------------------------
using FlowCanvas;
using Sirenix.OdinInspector;
namespace MeowFramework.Core.Entity
{
public class AbilityEntity : SerializedMonoBehaviour
{
/// <summary>
/// FlowScript 控制器
/// </summary>
private FlowScriptController flowScriptController;
private void OnEnable()
{
flowScriptController = GetComponent<FlowScriptController>();
}
/// <summary>
/// 启动技能
/// </summary>
public void StartAbility()
{
flowScriptController.StartBehaviour();
}
/// <summary>
/// 暂停技能
/// </summary>
public void PauseAbility()
{
flowScriptController.PauseBehaviour();
}
/// <summary>
/// 结束技能
/// </summary>
public void StopAbility()
{
flowScriptController.StopBehaviour();
}
/// <summary>
/// 重置技能
/// </summary>
public void ResetAbility()
{
flowScriptController.RestartBehaviour();
}
}
}
有一点很怪的是,private Dictionary 在监视器上的设置没办法保存下来。
点开挂有 ActorBase 的 GameObject,在监视器中选择 ActorBase,为暴露出来的 Dictionary 添加一项,然后离开监视器界面,再点开原来的 GameObject,监视器中 ActorBase 的 Dictionary 又变为初始化的空值了
但是 public Dictionary 就不会
所以就,Odin 很神奇
1.3 ActorBase v1
实际释放技能的时候就是生成一个技能实体,然后调用这个技能实体的方法
Assets/MeowFramework/Core/Entity/Actor/ActorBase.cs
// ----------------------------------------------
// 作者: 廉价喵
// 创建于: 28/03/2022 17:43
// 最后一次修改于: 11/04/2022 20:41
// 版权所有: CheapMeowStudio
// 描述:
// ----------------------------------------------
using System.Collections.Generic;
using System.ComponentModel;
using MeowFramework.Core.FrameworkComponent;
using MeowFramework.Core.Scriptable;
using NodeCanvas.Framework;
using Sirenix.OdinInspector;
using UnityEngine;
namespace MeowFramework.Core.Actor
{
public class ActorBase : SerializedMonoBehaviour
{
/// <summary>
/// 血量
/// </summary>
[BoxGroup("Attribute")]
[Tooltip("血量")]
public ActorAttribute<float> HP = new ActorAttribute<float>();
/// <summary>
/// 最大血量
/// </summary>
[BoxGroup("Attribute")]
[Tooltip("最大血量")]
public ActorAttribute<float> MaxHP = new ActorAttribute<float>();
/// <summary>
/// 可用技能字典
/// </summary>
[BoxGroup("GamePlay")]
[Tooltip("可用技能字典")]
public Dictionary<int,ScriptableAbility> availableAbilityDictionary = new Dictionary<int,ScriptableAbility>();
/// <summary>
/// 出生时附加的

本文详细介绍了在Unity中构建第三人称射击(TPS)游戏的战斗系统,包括技能框架和Buff框架的设计。技能框架涉及ScriptableAbility、AbilityEntity和ActorBase等组件的实现,用于技能的编写和执行。同时,文章探讨了Buff框架,讨论了将射击功能设计为Buff的优劣,并展示了如何创建和管理BuffEntity。整个过程结合FlowCanvas和C#进行,以提高游戏逻辑的可维护性和灵活性。
最低0.47元/天 解锁文章
2942

被折叠的 条评论
为什么被折叠?



