Godot 添加信号

前言

Godot 里面C#和GDScirpt 的用法完全不一样,网上相关资料太少了。

什么是信号

信号分为信号源,触发,目的节点。信号源在某些条件下触发信号,比如按钮点击,鼠标悬停等事件
触发 节点1 信号源:按钮点击 触发事件 节点2

新建点击事件





编写信号

我们需要编写完全一模一样的信号。如果是GDScript会自动生成对应的信号,但是如果是C#的话需要我们手动添加方法

csharp 复制代码
/// <summary>
/// 方法名必须完全一致
/// </summary>
private void _on_button_pressed()
{
	//获取子节点LineEdit
    var input = GetNode<LineEdit>("LineEdit");
	//获取子节点Button
    var button = GetNode<Button>("Button");
    //添加按钮事件
    button.Text = $"input.Text:{input.Text}";

}

运行结果

自定义信号

delegate void 信号必须以EventHandler 结尾

csharp 复制代码
	[Signal]
	public delegate void TestEventHandler();

	

自定义信号节点添加成功!

信号节点自动化命名

大家可能会疑惑触发事件是自动生成的,不会出问题吗?一般来说不会出问题。

给别的节点传信号

给自己传信号

同名节点传信号

总结:

信号命名:

复制代码
- 给别的节点传: _on_节点名称_方法名()
- 给自己传:_on_方法名()

所以如果有两个节点名称完全一致,确实会重复信号。不过Godot 限制兄弟节点是不能有同名情况出现的,只能是非兄弟节点才可以。

直接获取信号

我们也可以直接在_Ready函数里面把逻辑给写了。但是只能添加默认的委托方法。此方法不推荐。一个是只能用默认方法,还有一个是必须在代码里面看,没有信号显示的那么直观。

csharp 复制代码
	public override void _Ready()
	{
        var input = GetNode<LineEdit>("LineEdit");
        var button = GetNode<Button>("Button");
		button.Pressed += () =>
		{
			button.Text = input.Text;
		};
	}
相关推荐
CHU72903511 小时前
一番赏盲盒抽卡机小程序:解锁惊喜体验与社交乐趣的多元功能设计
前端·小程序·php
RFCEO11 小时前
前端编程 课程十二、:CSS 基础应用 Flex 布局
前端·css·flex 布局·css3原生自带的布局模块·flexible box·弹性盒布局·垂直居中困难
天若有情67312 小时前
XiangJsonCraft v1.2.0重大更新解读:本地配置优先+全量容错,JSON解耦开发体验再升级
前端·javascript·npm·json·xiangjsoncraft
2501_9445255412 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
打小就很皮...12 小时前
《在 React/Vue 项目中引入 Supademo 实现交互式新手指引》
前端·supademo·新手指引
C澒12 小时前
系统初始化成功率下降排查实践
前端·安全·运维开发
摘星编程12 小时前
React Native + OpenHarmony:自定义useFormik表单处理
javascript·react native·react.js
C澒13 小时前
面单打印服务的监控检查事项
前端·后端·安全·运维开发·交通物流
pas13613 小时前
39-mini-vue 实现解析 text 功能
前端·javascript·vue.js
qq_5324535313 小时前
使用 GaussianSplats3D 在 Vue 3 中构建交互式 3D 高斯点云查看器
前端·vue.js·3d