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去辨识。

相关推荐
世人万千丶2 小时前
鸿蒙Flutter Flex多子组件权重分配
学习·flutter·华为·harmonyos·鸿蒙
GitLqr2 小时前
Flutter 无障碍开发实战:玩转 Semantics 解决视障用户使用痛点
android·flutter·dart
圣光SG4 小时前
Servlet学习笔记
笔记·学习·servlet
雨白6 小时前
掌握 NestedScrolling 嵌套滑动:手写仿知乎折叠主页
android
@Mike@6 小时前
02-数据库学习笔记(SQL引擎)
数据库·笔记·学习
六点_dn7 小时前
RabbitMQ学习笔记-定义与作用
笔记·学习·rabbitmq
我的xiaodoujiao8 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
Xzaveir8 小时前
别把所有“认证”都塞进 AuthService:实名、一键登录与号码身份的领域拆分
android·人工智能
BerrySen1788 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
AFinalStone9 小时前
Android 7系统休眠唤醒(一)电源管理架构全景图
android·powermanager·电源管理