提问人:iWriteMehPrograms 提问时间:11/17/2023 更新时间:11/21/2023 访问量:42
找不到函数作为类 Godot 的一部分
Cannot find functions as part of classes Godot
问:
我刚刚开始学习 Godot,并且已经从 Unity 中了解了相当多的 C#。我正在尝试设置一个 3D 角色装备。该函数应该存在,因为文档都说它应该存在,但是当我编译此代码时:
using Godot;
using System;
public partial class world_control : Node
{
SceneTree tree;
Node3D camera;
Node3D head;
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
tree = GetTree();
camera = tree.get_current_scene().find_child("camera", false, false);
head = tree.get_current_scene().find_child("head", true, false);
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
{
camera.set_global_position(head.get_global_position());
camera.set_global_rotation(head.get_global_rotation());
}
}
它给了我这些错误:
/***/Godot/Hand_Cannon/world_control.cs(14,17): 'SceneTree' does not contain a definition for 'get_current_scene' and no accessible extension method 'get_current_scene' accepting a first argument of type 'SceneTree' could be found (are you missing a using directive or an assembly reference?)
/***/Godot/Hand_Cannon/world_control.cs(21,35): 'Node3D' does not contain a definition for 'get_global_position' and no accessible extension method 'get_global_position' accepting a first argument of type 'Node3D' could be found (are you missing a using directive or an assembly reference?)
(我遗漏了一些错误,但基本上所有函数都会导致此 excact 错误)
额外信息: 使用 C# 的 Godot 4.1 .NET 8(在发布当天安装).NET 8 (Installed on day of posting) Mac OSX 13.5.1 操作系统
如果需要,我可以而且非常愿意提供更多信息!
这是一个我根本不知道该尝试什么的问题。我今天对 Godot 很陌生.到目前为止没有任何效果,事实上我什至不知道这些值具有 getter 函数!
答:
1赞
Chaknith Bin
11/17/2023
#1
Godot 中的 C# 方法和属性使用 PascalCase,而 GDScript 方法使用 snake_case。C# 中的全局方法(如 Print)可以通过 GD 静态类访问。除此之外,您还可以针对您的用例尝试以下代码:
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
SceneTree tree = GetTree();
camera = (Node3D)tree.CurrentScene.GetNode("camera", false, false);
head = (Node3D)tree.CurrentScene.GetNode("head", true, false);
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
{
camera.Position = head.Position;
camera.Rotation = head.Rotation;
}
评论
0赞
iWriteMehPrograms
11/17/2023
谢谢!当我有时间时,我一定会测试一下。
0赞
iWriteMehPrograms
11/17/2023
我必须进行两项更改才能使其正常工作:将 Root 更改为 CurrentScene,并将 FindChild 更改为 GetNode。否则它会起作用!谢谢你回答我的问题。
0赞
Chaknith Bin
11/20/2023
我会根据您的更新编辑答案以帮助其他人。公平地说,我也是戈多的新手。此外,我将它与 C# 语言一起使用,因为我想提高我的 C# 技能以及游戏开发技能。我很高兴我能帮上忙。
评论
get_current_scene
camera = tree.current_scene.find_child...