当前位置: 首页 > news >正文

Godot-C#处理节点关系

Godot C#处理节点关系

简介

我们知道在游戏中,任何事物都可以看做一个节点,而节点之间的关系可以帮助我们更好的管理游戏世界。Godot中,节点之间的关系可以分为两种:父子关系和兄弟关系。godot已经提供了现成的方法来获取节点之间的关系,包括

根节点

根节点是游戏世界的最顶层节点,它没有父节点,也就是说它是游戏世界的根,我们称为root节点。整个游戏的所有场景都建立在root之上。因此根据root来查找节点通常是比较准确的。在开发过程中,个人建议是少用相对路径,万一节点位置发生了变化,那么相对路径就会失效。
获取方法:

Node root = GetTree().Root;

节点查找

Godot提供了查找节点的各种方法,包括按名字查找、按类型查找、按路径查找等。

父子关系&兄弟关系

兄弟关系通常指同级节点,也就是父节点的子节点。想获取同级节点,一般也是通过父节点查找子节点的方式
父节点可以有无数个子节点,但是子节点只能有单个父节点。父子关系是节点间最常用的关系,我们可以通过以下方法获取父子关系:

// 获取父节点
Node parent = this.GetParent();
// 获取子节点:仅查找一层,不会递归查找
Node child = parent.FindChild("child_name"); 

路径查找

GetNode 使用路径字符串来查找节点。路径字符串可以是相对路径或绝对路径。
例如,如果你有一个节点路径 "InputTest/SubNode",你可以使用 GetNode("InputTest/SubNode") 来直接获取 SubNode 节点,而不需要逐层查找。
GetNode 是严格且快速的查找方式,因为它直接根据路径定位节点,如果路径错误或者节点不存在,会抛出异常。

// 相对路径查找
Node node = this.GetNode("SubNode");
// 绝对路径查找
Node node = this.GetNode("path/to/node");
// 获取节点并转换为特定类型
Node2D node2D = this.GetNode("path/to/node") as Node2D;

示例

测试节点如图所示:img

using Godot;
using System;public partial class TestNodeRelation : Node2D
{public override void _Ready(){}public override void _Process(double delta){if (Input.IsActionJustPressed("Left")){GD.Print("按下左键");// 获取当前场景的根节点Node root = GetTree().Root;GD.Print("根节点名称: " + root.Name);// 获取当前场景Node currentScene = this.GetTree().CurrentScene;GD.Print("当前场景名称: " + currentScene.Name);// 查找当前场景下名为 InputTest 的子节点,需注意与GetNode方法的区别Node inputTest = currentScene.FindChild("InputTest");// 将 InputTest 节点从它的父节点移除,然后添加到当前节点下GD.Print("将 InputTest 节点移动到 TestNodeRelation 节点下");currentScene.RemoveChild(inputTest);this.AddChild(inputTest);// 删除 InputTest 节点// GD.Print("删除 InputTest 节点");// inputTest.QueueFree();}if (Input.IsActionJustPressed("Right")){GD.Print("按下右键");// 获取当前场景Node currentScene = this.GetTree().CurrentScene;// 新建节点Node2D newNode = new Node2D();// 设置节点名称newNode.Name = "NewNode";// 将新节点添加到当前场景下currentScene.AddChild(newNode);}}
}
http://www.jsqmd.com/news/16732/

相关文章:

  • 2025信息流代运营推荐:线尚网络精准投放,效果显著!
  • 零售行业绩效流程推行难点及 Tita 目标绩效一体化管理方案
  • CTFHub 信息泄露通关笔记4:备份文件下载 bak文件 - 教程
  • 软件工程-结队项目
  • go 并发赋值安全性
  • 《探索C语言中数组的奥秘(下)》 - 教程
  • Vue中keep-alive实现原理解析
  • 2025 年防撞钢护栏厂家推荐聊城市泰锌金属材料有限公司,桥梁,不锈钢,复合管,景观,灯光,热镀锌,河道,铝合金,绳索防撞钢护栏公司推荐
  • [转]学习指南 - PL-600:Microsoft Power Platform 解决方案架构师
  • 2025年聚氨酯制品厂家推荐排行榜,浇注型聚氨酯,聚氨酯预聚体,聚氨酯胶黏剂,聚氨酯组合料,液体聚氨酯,专业品质与创新技术之选
  • Java异步编程难题拆解
  • 三场比赛(二)
  • 深入学习Spring Boot框架
  • 2025年水产养殖设备厂家推荐排行榜,PP鱼池/微滤机/不锈钢微滤机/锦鲤池微滤机一体机/全自动污水过滤器/生物过滤器/循环水养殖系统公司推荐!
  • 预测不可预测之物的校准学习技术
  • java语言程序设计类与对象课后作业 - 20243867孙堃2405
  • 2025年智能防爆灯/工矿灯厂家推荐排行榜,专业安全与高效照明解决方案!
  • AI模型测评平台工程化实战十二讲(第五讲:大模型测评分享机制:安全、高效的结果展示与协作)
  • Java基础——包机制,JavaDoc生成文档
  • Java 无锁方式实现高性能线程
  • 用 【C# + Winform + MediaPipe】 构建人脸468点识别
  • 10.19日模考总结
  • 详细介绍:2020年美国新冠肺炎疫情数据分析与可视化
  • java流程控制。
  • mysql嵌套查询如何利用索引?
  • Misaka2298 的写题自检表
  • 解码Linux文件IO之LCD屏原理及应用
  • 2025年扑灭司林厂家推荐排行榜,高效环保扑灭司林,专业生产与市场口碑深度解析!
  • 微信小程序入门学习教程,从入门到精通,WXML(WeiXin Markup Language)语法基础(8) - 详解
  • Java 中 NullPointerException 的 3 个常见原因及解决