[Unity] 战斗系统学习 1:FlowCanvas 中的 Events

FlowCanvas 很容易自定义节点
可以看官方文档 从 6.1. Creating Simplex Nodes 开始
http://www.paradoxnotion.com/files/flowcanvas/FlowCanvas%20Documentation.pdf

我之前说错了,FlowCanvas 中有 Delegate 的 += 和 -=,只是没有以运算符的形式给出来
FlowCanvas 中 += 为 Combine -= 为 Remove

Bilibili 上面倒是有一个简短的教程很实用,是一个大佬对自己的魔改版的教学视频,比如支持在 FlowScript 中使用 ToLua 啥的
https://www.bilibili.com/video/BV1Tt411X7mx
https://note.youdao.com/ynoteshare/index.html?id=6c6748dd043f124049a5b53ae281b950&type=note&_time=1649039338969
虽然我暂时还不会去想着魔改 FlowCanvas,但是看看别人的基础操作就好

1. FlowCanvas 中的 Delegate

1.1 += -=

测试代码

// ----------------------------------------------
// 作者: 廉价喵
// 创建于: 28/03/2022 17:43
// 最后一次修改于: 04/04/2022 9:08
// 版权所有: CheapMeowStudio
// 描述:
// ----------------------------------------------

using System;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.Events;

namespace MeowFramework.Core
{
   
    public class ActorBase : SerializedMonoBehaviour
    {
   
        /// <summary>
        /// 血量
        /// </summary>
        [Tooltip("血量")] 
        public ActorAttribute<float> HP = new ActorAttribute<float>();
        
        /// <summary>
        /// 最大血量
        /// </summary>
        [Tooltip("最大血量")] 
        public ActorAttribute<float> MaxHP = new ActorAttribute<float>();
  
        public Action TestAction1;
        
        public Action TestAction2;
        
        public void Awake()
        {
   
            TestAction1 += () => {
    Debug.Log("Actor TestAction1!"); };
            TestAction2 += () => {
    Debug.Log("Actor TestAction2!"); };
        }
    }
}

测试 FlowScript

在这里插入图片描述

测试 FlowScript 运行结果

在这里插入图片描述
在这里插入图片描述

这确定了在 FlowCanvas 中,委托的 +=-= 是可行的
但是 Delegate Callback 的委托连出来了一个 null,也说明 FlowCanvas 中的 Delegate CallBack 并不是我想的那样简单,它是不能和一般的 Action 相加的

1.2 Delegate Callback

测试代码

		public void DoSomething(Action action)
        {
   
            action.Invoke();
        }

测试 FlowScript

在这里插入图片描述

在这里插入图片描述

所以 Delegate CallBack 似乎是专门用来传递给一个函数的 Action 参数的

如果这个函数的参数是 Action<T> 那么是连不上 Delegate CallBack 的

测试代码

		public void DoSomething(Action<float> action)
        {
   
            action.Invoke(1);
        }

测试 FlowScript

在这里插入图片描述

2. FlowCanvas 中的 Event

2.1 Custom Event,Event CallBack

FlowCanvas 中的事件节点很简单

在这里插入图片描述

新建事件用 Custom Event
发送事件用 Send Event
保证发送者的 Send Event 中填写的事件名就是接收者实现的 Custom Event 的事件名就好了

UnityEvent 的订阅和取消订阅可以通过 Flow 入口调用
CallBack 是执行内容的 Flow 入口

2.2 制作绑定指定类中指定委托的 EventNode

根据官方教程,事件节点的模板为

在这里插入图片描述

我现在有一个需求就是,要能够在 FlowCanvas 中绑定 C# 脚本中指定类中的指定委托

指定测试类

// ----------------------------------------------
// 作者: 廉价喵
// 创建于: 01/04/2022 14:32
// 最后一次修改于: 04/04/2022 0:05
// 版权所有: CheapMeowStudio
// 描述:
// ----------------------------------------------

using System;
using Sirenix.OdinInspector;
using UnityEngine;

namespace MeowFramework.Core
{
   
    /// <summary>
    /// 角色属性泛型
    /// </summary>
    public class ActorAttribute<T>
    {
   
        /// <summary>
        /// 是否使用字面值
        /// </summary>
        [Tooltip("是否使用字面值")]
        public bool IsLiteral = true;

        /// <summary>
        /// 角色属性的值
        /// </summary>
        [ShowIf("@IsLiteral")]
        [Tooltip("值")]
        private T value;

        /// <summary>
        /// 可资产化值
        /// </summary>
        [ShowIf("@!IsLiteral")]
        [ShowInInspector]
        [Tooltip("可资产化值")]
        private ScriptableGenericVariable<T> scriptableValue;

        public T Value
        {
   
            get => value;
            set
            {
   
                AfterSetValue(this.value, value);
                this.value = value;
            }
        }
        
        /// <summary>
        /// 设置值时进行的委托
        /// 同时承担验证验证值改变是否合法的功能
        /// </summary>
        [HideInInspector]
        public Action<T,T> AfterSetValue;
    }
}

依赖指定测试类的 Mono 脚本为

// ----------------------------------------------
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值