Godot学习03 - 实例化、层级访问、Export

接下来我们将继续探索 Godot 的操作:实例化场景、访问节点层级以及使用 export 导出变量。

1.实例化

在Godot中没有Prefab或蓝图的概念,每个场景tscn文件都可以动态加载、实例化创建。例如新建一个名为bullet的tscn场景:

新建csharp脚本BallSpawn:

csharp 复制代码
using Godot;
using System;

public partial class BallSpawn : Node3D
{
	private PackedScene _bulletScene;
	
	public override void _Ready()
	{
		_bulletScene = GD.Load<PackedScene>("res://bullet.tscn");
		GenerateRandomBalls();
	}
	
	private void GenerateRandomBalls()
	{
		Random random = new Random();
		
		for (int i = 0; i < 10; i++)
		{
			Node3D bullet = (Node3D)_bulletScene.Instantiate();
			
			// 在半径为1的球体内生成随机位置
			float x = (float)(random.NextDouble() * 2 - 1);  // -1 到 1
			float y = (float)(random.NextDouble() * 2 - 1);  // -1 到 1
			float z = (float)(random.NextDouble() * 2 - 1);  // -1 到 1
			
			// 归一化到半径为1的球体内
			Vector3 randomPos = new Vector3(x, y, z);
			
			// 如果要在球体表面生成:
			// randomPos = randomPos.Normalized();
			
			bullet.Position = randomPos;
			
			AddChild(bullet);
		}
	}
}

将该脚本挂载到根节点上,点运行即可看见实例化出了10个小球。

2.层级访问

godot与其他游戏引擎不同,提供了较便捷的层级访问接口,可以快速定位到对应节点。

csharp 复制代码
using Godot;
using System;

public partial class Test01 : Node3D
{
	public override void _Ready()
	{
		var deepNode = GetNode("child01/child02");
		GD.Print(deepNode.Name);
	}
}

如果是获取父节点:

csharp 复制代码
public override void _Ready()
{
    // 获取父节点
    var parent = GetNode("..");
    // 获取父节点的父节点(祖父节点)
    var grandParent = GetNode("../..");
    // 获取更上层的节点
    var greatGrandParent = GetNode("../../..");
    
    // 打印节点名称
    GD.Print($"父节点: {parent.Name}");
    GD.Print($"祖父节点: {grandParent?.Name}");
}

3.Export

godot中,需要对编辑器公开的参数可标记Export去辨识。

相关推荐
V搜xhliang024618 小时前
AI智能体的数据安全与合规实践
人工智能·学习·数据分析·自动化·ai编程
alexhilton18 小时前
Android的Agent优先时代:构建时vs运行时
android·kotlin·android jetpack
无敌的牛19 小时前
redis学习过程
数据库·redis·学习
Cutecat_19 小时前
视频字幕处理工具横向:提取模式 vs 编辑模式,该如何选择
android·前端·ios·语音识别
2601_9617652920 小时前
【分享】PlayerPro媒体音乐播放器 完整专业版
android·媒体
旅僧21 小时前
Π环境部署(运行 且 无理论讲解)
学习
jushi899921 小时前
Lucas Chess R国际象棋、中国象棋、日本将棋、五子棋训练学习工具游戏软件
学习
自传.21 小时前
尚硅谷 Vibe Coding|第一章 AI 编程基础理论 学习笔记
笔记·学习·尚硅谷·vibe coding
吃好睡好便好1 天前
改变时间轴的跨度
学习·生活
fox_lht1 天前
15.3.改进我们之前的输入、输出项目
开发语言·后端·学习·rust