找不到函数作为类 Godot 的一部分

Cannot find functions as part of classes Godot

提问人:iWriteMehPrograms 提问时间:11/17/2023 更新时间:11/21/2023 访问量:42

问:

我刚刚开始学习 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 函数!

C# 戈多 4

评论

0赞 Tim Roberts 11/17/2023
是什么让您认为 SceneTree 支持某个方法?get_current_scene
0赞 iWriteMehPrograms 11/17/2023
@TimRoberts 文档:docs.godotengine.org/en/stable/classes/...
0赞 Tim Roberts 11/17/2023
该文档来自 2014 年。你能把它当作一个财产吗?如?camera = tree.current_scene.find_child...

答:

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# 技能以及游戏开发技能。我很高兴我能帮上忙。