Godot引擎 4.0 文档 - 循序渐进教程 - 脚本语言

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面:

Scripting languages — Godot Engine (stable) documentation in English

脚本语言¶

本课将概述 Godot 中可用的脚本语言。您将了解每个选项的优缺点。在下一部分中,您将使用 GDScript 编写您的第一个脚本。

脚本附加到节点并扩展其行为。这意味着脚本继承了它们附加到的节点的所有功能和属性。

例如,假设一个 Camera2D 节点跟随一艘船的游戏。默认情况下,Camera2D 节点跟随其父节点。想象一下,当玩家受到伤害时,您希望相机抖动。由于此功能未内置于 Godot 中,因此您可以将脚本附加到 Camera2D 节点并对摇动进行编码。

可用的脚本语言¶

Godot 提供四种游戏编程语言:GDScript、C#,以及通过其 GDExtension 技术的 C 和 C++。有更多社区支持的语言,但这些是官方语言。

您可以在一个项目中使用多种语言。例如,在一个团队中,您可以在 GDScript 中编写游戏逻辑,因为它编写起来很快,并使用 C# 或 C++ 来实现复杂的算法并最大限度地提高它们的性能。或者您可以用 GDScript 或 C# 编写所有内容。这是你的选择。

我们提供这种灵活性来满足不同游戏项目和开发人员的需求。

我应该使用哪种语言?¶

如果您是初学者,我们建议您从 GDScript 开始。我们专门为 Godot 和游戏开发人员的需求制作了这种语言。它具有轻量级和直接的语法,并提供与 Godot 的最紧密集成。

对于 C#,您将需要一个外部代码编辑器,如 VSCode或 Visual Studio。虽然 C# 支持现已成熟,但与 GDScript 相比,您会发现它的学习资源较少。这就是为什么我们主要向已经有过该语言经验的用户推荐 C# 的原因。

让我们看看每种语言的特性及其优缺点。

GDScript¶

GDScript是 为 Godot 构建的面向对象和 命令式编程语言。它由游戏开发人员制作并为游戏开发人员制作,以节省您编写游戏代码的时间。其特点包括:

  • 导致短文件的简单语法。

  • 极快的编译和加载时间。

  • 紧密的编辑器集成,具有节点、信号的代码完成,以及来自它所附加的场景的更多信息。

  • 内置矢量和变换类型,使其能够高效地大量使用线性代数,这是游戏所必需的。

  • 像静态类型语言一样高效地支持多线程。

  • 没有垃圾回收,因为此功能最终会在创建游戏时成为障碍。在大多数情况下,引擎默认为您计算引用并管理内存,但如果需要,您也可以控制内存。

  • 渐进类型。默认情况下,变量具有动态类型,但您也可以使用类型提示进行强类型检查。

当您使用缩进构建代码块时,GDScript 看起来像 Python,但它在实践中的工作方式并不相同。它受到多种语言的启发,包括 Squirrel、Lua 和 Python。

注:为什么我们不直接使用 Python 或 Lua 呢?

多年前,Godot 使用 Python,然后是 Lua。两种语言的集成需要大量的工作并且有严重的局限性。例如,线程支持是 Python 面临的一大挑战。

开发一种专用语言不会给我们带来更多的工作,我们可以根据游戏开发者的需求对其进行定制。我们现在正致力于性能优化和第三方语言难以提供的功能。

.NET/C#¶

由于 Microsoft 的C#是游戏开发人员的最爱,我们正式支持它。C# 是一种成熟且灵活的语言,拥有大量为其编写的库。感谢微软的慷慨捐赠,我们可以增加对它的支持。

C# 在性能和易用性之间提供了很好的折衷,但您应该了解它的垃圾收集器。

注:您必须使用 Godot 编辑器的 .NET 版本在 C# 中编写脚本。您可以在 Godot 网站的下载页面上下载它。

由于 Godot 使用 .NET 6,理论上,您可以在 Godot 中使用任何第三方 .NET 库或框架,以及任何符合公共语言基础设施的编程语言,例如 F#、Boo 或 ClojureCLR。但是,C# 是唯一官方支持的 .NET 选项。

注:GDScript 代码本身的执行速度不如编译后的 C# 或 C++。但是,大多数脚本代码会调用引擎内用 C++ 代码中的快速算法编写的函数。在许多情况下,使用 GDScript、C# 或 C++ 编写游戏逻辑不会对性能产生重大影响。

基于GDExtension的C++¶

GDExtension 允许您使用 C++ 编写游戏代码,而无需重新编译 Godot。

由于我们使用了内部 C API Bridge,您可以使用任何版本的语言或混合编译器品牌和版本来生成共享库。

GDExtension 是性能的最佳选择。您不需要在整个游戏中都使用它,因为您可以用 GDScript 或 C# 编写其他部分。

使用 GDExtension 时,可用的类型、函数和属性与 Godot 的实际 C++ API 非常相似。

总结¶

脚本是包含附加到节点以扩展其功能的代码的文件。

Godot 支持四种官方脚本语言,为您提供性能和易用性之间的灵活性。

例如,您可以混合使用多种语言,以使用 C 或 C++ 实现要求苛刻的算法,并使用 GDScript 或 C# 编写大部分游戏逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

平板触控笔要原装的吗?苹果平替笔性价比高的推荐

与苹果的电容笔不同,市场上的电容笔只会给人一种倾斜的压感,并不会像苹果的电容笔那样,可以给人一种重力的压感。不过,如果你不一定要画画,那你就不用花很多钱去买一支苹果的原装电容笔了,只需一支平替电容…

postgresql数据库

官方文档:link 安装及简单操作 1 安装 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql15-server sudo /usr/pgsql-15/bin/postgresql-15-setup initdb sudo …

2023.5.21 第五十四次周报

目录 前言 文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型 背景 本文思路 本文解决的问题 方法论 SPATIAL 自动机器学习模型 数据处理 模型性能 代码 用Python编写的LSTM多变量预测模型 总结 前言 This week, I studied an article that uses LSTM to solve p…

MATLAB绘制动画(五)GIF

GIF这个文件大家就比较熟悉了,我们通常当做表情包的动图一般都是用GIF格式。 这是因为GIF格式的文件比较小,传输速度快。 用MATLAB生成GIF图像同样需要将图像保存下来,通过循环展示动画 代码如下: clc; clear; close all; set…

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4)

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4) 结合自由能计算 我们首先计算焙变,用到的是pbsa和gbsa方法。我们需要一下文件 三个top文件,pro.prmtop lig.prmtop com.prmtop;输入文件MM_GBSA.in;将要…

从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

.NET多平台应用程序UI(. NET MAUI)的市场吸引力与日俱增,这是微软最新的开发平台,允许开发者使用单个代码库创建跨平台应用程序。尽管很多WPF开发人员还没有跟上 .NET MAUI的潮流,但我们将在这篇文章中为大家展示他的潜…

【FAQ】视频编辑服务常见问题及解答

Q1问题描述 1、 访问贴纸等素材的时候提示“网络异常,请重试”怎么办? 2、 使用AI能力时,提示“errorCode:20124 errorMsg:Method not Allowed”? 解决方案 请做以下检查: 1、 在代码中检查鉴权信息是否已设置。如…

2023/5/21周报

目录 摘要 论文阅读 1、标题和现存问题 2、各个结构 3、基于GNN-LSTM-CNN 网络轨迹预测模型 4、实验准备 5、实验结果 深度学习 1、费舍尔判别 2、步骤具体化 3、GCN 总结 摘要 本周在论文阅读上,阅读了一篇基于GNN-LSTM-CNN网络的6G车辆轨迹预测算法的…

RabbitMQ如何保证顺序性

1. RabbitMQ消息顺序性说明 顺序性: 消息的顺序性是指消费者消费到消息和发送者发布的消息的顺序是一致的 举个例子,不考虑消息重复的情况下,如果生产者发布的消息分别为msg1、msg2、msg3 那么消费者必然也是按照 msg1、msg2、msg3 的顺序来…

【leetcode刷题总结】——代码随想录(链表总结)

代码随想录按照数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心->动态规划->图论->高级数据结构,再从简单刷起,做了几个类型题目之后,再慢慢做中等题目、困难题目。 以下是个人刷题总结,官…

Python初学小知识(十四):数据分析处理库Pandas

Python初学小知识(十四):数据分析处理库Pandas 十八 Pandas1 文件读取1.1 读取csv1.2 读取txt1.3 读取excel(xlsx) 2 内容读取2.1 读取行2.2 读取列 3 数据处理3.1 加减乘除3.1.1 列 与 元素3.1.2 列 与 列 3.2 最值、…

张驰咨询:突破瓶颈降低成本-精益生产咨询的实践策略

在现代企业运营中,提高效率、优化流程是实现成功的关键因素之一。为了帮助企业在这方面取得突破性的进展,精益生产咨询成为了一种备受推崇的方法。本文将介绍精益生产咨询的基本原理、优势以及如何将其应用于企业实践中。 精益生产咨询是一种源于丰田生…

lwIP更新记02:网络接口标志(一个标志只做一件事)

从 lwIP-2.0.0 开始,网络接口 netif 的 up 标志修改为管理标志,up标志不再具有以前的 IP4 地址有效 含义。 什么是网络接口 netif ? 网络接口 属于链路层范畴,它旨在对具体网络硬件、软件进行统一封装,并为协议栈上层&…

【运维知识进阶篇】集群架构-Nginx反向代理详解

在互联网请求中,客户端通常无法直接向服务端发起请求,就需要用代理服务,来实现客户端和的交互,起到一个中介的作用。 Nginx代理服务常见模式 Nginx代理按照应用场景模式可以分为正向代理和反向代理。 正向代理是内部上网过程中&a…

实现取关和关注功能

将关注过的用户id存如数据库中 //关注或者取关 Override public Result follow(Long id, Boolean flag) { //1.获取当前登录用户的id UserDTO user UserHolder.getUser(); if(usernull){ return Result.fail("请先登录"); } Long userId user.getId(); //2.判断是关…

关于ubuntu20.04 apt 安装源中搜索不到最新版本gcc 12的问题

一、问题描述 最近在搞Open 3d 点云point cloud 相关的东西,过程需要安装较高版本的cmake 3.20版本以上,3.20版本又需要gcc 更高版本 至少11.0以上,理论上本机配置的有 ubuntu 官方的源和阿里云的源,不过 通过搜索就只能搜索安装的…

微信小程序xr-frame实现交互(地月案例)

基础知识: 1.轮廓 如果想要与场景中的物体进行互动,比如说点击、拖拽物体,那么这个物体得先拥有一个轮廓才行。轮廓是一个组件。与某个物体互动,实际上是在与这个物体的轮廓进行互动,轮廓让这个物体在物理世界中拥有…

WordPress 如何开启多站点 含Apache和Nginx伪静态规则

WordPress 3.0以上的版本支持直接开启多站点模式,这样一来,你可以在一个后台切换多个站点进行管理。 最近打算折腾一个主题演示站,给每个主题使用独立的子站点来搭建演示,如果是Apache环境,配置就比较容易,但是倡萌使用的是 Nginx,花了大量的时间测试了N多网络上的伪静…

Weblogic SSRF 漏洞(CVE-2014-4210)

SSRF漏洞 ​ SSRF(服务端请求伪造),指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。 ​ 简单的说就是利用一个可…

Jenkins的持续集成与持续部署

系统总体架构 Gitlab Gitlab是一款主要用于代码管理的工具,相较于GitHub,可以自己搭建服务器,这可以避免因为网络速度慢导致部署效率低下,同时,自己搭建服务器,安全性更高。Jenkins Jenkins主要用于管理版本…