Godot引擎 4.0 文档 - 循序渐进教程 - 创建实例

news2024/11/27 9:57:41

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

Creating instances — Godot Engine (stable) documentation in English

创建实例¶

在前面的部分中,我们看到场景是以树结构组织的节点集合,以单个节点作为其根。您可以将项目拆分为任意数量的场景。此功能可帮助您分解和组织游戏的不同组件。

您可以创建任意数量的场景,并将它们保存为扩展 .tscn名为“文本场景”的文件。tabel.tscn上一课的文件就是一个例子。我们将这些文件称为“打包场景”,因为它们打包了有关场景内容的信息。

这是一个球的例子。它由一个名为 Ball 的根节点RigidBody2D节点、一个Sprite2D节点和一个 CollisionShape2D组成,该节点允许球落在墙上并弹跳。

一旦你保存了一个场景,它就像一个蓝图:你可以在其他场景中多次复制它。像这样从模板复制对象称为实例化

正如我们在上一部分中提到的,实例化场景的行为就像一个节点:编辑器默认隐藏它们的内容。当您实例化 Ball 时,您只会看到 Ball 节点。还要注意每个重复项如何具有唯一的名称。

Ball 场景的每个实例都以相同的结构和属性开始ball.tscn。但是,您可以单独修改各个实例,例如更改它们的弹跳方式、重量或源场景公开的任何属性。

在实践中¶

让我们在实践中使用实例化,看看它在 Godot 中是如何工作的。我们邀请您下载我们为您准备的球的示例项目: instancing_starter.zip。

在您的计算机上提取存档。要导入它,您需要项目管理器。打开 Godot 可以访问项目管理器,或者如果您已经打开了 Godot,请单击项目 -> 退出到项目列表(在 macOS 上Ctrl + Shift + Q, Ctrl + Option + Cmd + B)

在项目管理器中,单击导入按钮以导入项目。

在出现的弹出窗口中,单击浏览按钮并导航到您提取的文件夹。

双击project.godot文件将其打开。

最后,单击导入和编辑按钮。

该项目包含两个打包场景:main.tscn,包含球碰撞的墙壁,以及ball.tscn。主场景main.tscn应该会自动打开。

让我们添加一个球作为主节点的子节点。在场景停靠栏中,选择主节点。然后,单击场景停靠栏顶部的链接图标。此按钮允许您将场景实例添加为当前选定节点的子节点。

双击球场景来实例化它。

球出现在视口的左上角。

单击它并将其拖动到视图的中心。

按F5(在 macOS 上Cmd + B)玩游戏。你应该看到它掉下来。

现在,我们要创建 Ball 节点的更多实例。在球仍处于选中状态的情况下,按(在 macOS 上Ctrl-DCmd-D)调用复制命令。单击并拖动以将新球移动到不同的位置。

您可以重复此过程,直到场景中出现多个为止。

再次玩游戏。您现在应该看到每个球都独立下落。这就是实例所做的。每一个都是模板场景的独立再现。

编辑场景和实例¶

实例还有更多。使用此功能,您可以:

  1. 使用 Inspector 更改一个球的属性而不影响其他球。

  2. ball.tscn通过打开场景并更改那里的 Ball 节点来更改每个 Ball 的默认属性。保存后,项目中 Ball 的所有实例都将看到它们的值更新。

注:更改实例的属性始终会覆盖相应打包场景中的值。

让我们试试这个。打开ball.tscn并选择 Ball 节点。在右侧的 Inspector 中,单击 PhysicsMaterial 属性将其展开。

2单击数字字段,键入2,然后按 ,将其 Bounce 属性设置为Enter。

按F5玩游戏,注意所有的球现在弹跳得更多了。由于 Ball 场景是所有实例的模板,修改它并保存会导致所有实例相应地更新。

现在让我们调整一个单独的实例。单击视口上方的相应选项卡返回主场景。

选择一个实例化的 Ball 节点,并在 Inspector 中将其 Gravity Scale 值设置为10

调整后的属性旁边会出现一个灰色的“还原”按钮。

此图标表示您正在覆盖源打包场景中的值。即使您修改了原始场景中的属性,值覆盖也会保留在实例中。单击还原图标会将属性还原为已保存场景中的值。

重新运行游戏并注意这个球现在下落速度比其他球快得多。

注:如果您更改一个实例的值PhysicsMaterial,它将影响所有其他实例。这是因为PhysicsMaterial是一种资源,资源是在实例之间共享的。要使资源对于一个实例是唯一的,请在检查器中右键单击它,然后在上下文菜单中单击 Make Unique。

资源是 Godot 游戏的另一个重要组成部分,我们将在后面的课程中介绍。

作为设计语言的场景实例¶

Godot 中的实例和场景提供了一种出色的设计语言,使该引擎与众不同。我们从头开始围绕这个概念设计了 Godot。

我们建议在使用 Godot 制作游戏时放弃架构代码模式,例如模型-视图-控制器 (MVC) 或实体-关系图。相反,您可以从想象玩家将在您的游戏中看到的元素开始,并围绕它们构建您的代码。

例如,您可以像这样分解射击游戏:

你几乎可以为任何类型的游戏想出这样的图表。从玩家的角度来看,每个矩形代表一个在游戏中可见的实体。箭头告诉您哪个场景拥有哪个。

有了图表后,我们建议为其中列出的每个元素创建一个场景来开发您的游戏。您将通过代码或直接在编辑器中使用实例化来构建场景树。

程序员倾向于花费大量时间设计抽象架构并尝试将组件装入其中。基于场景的设计让开发更快更直接,让您专注于游戏逻辑本身。因为大多数游戏组件直接映射到场景,使用基于场景实例化的设计意味着您几乎不需要其他架构代码。

以下是具有大量资产和嵌套元素的开放世界游戏的场景图示例:

想象一下,我们从创建房间开始。我们可以制作几个不同的房间场景,其中的家具布置独特。稍后,我们可以制作一个内部使用多个房间实例的房屋场景。我们将用许多实例化的房屋和我们将放置城堡的大地形创建一个城堡。这些中的每一个都是一个实例化一个或多个子场景的场景。

稍后,我们可以创建代表守卫的场景并将它们添加到城堡中。它们将间接添加到整个游戏世界中。

使用 Godot,可以很容易地像这样迭代您的游戏,因为您需要做的就是创建和实例化更多场景。我们将编辑器设计为可供程序员、设计师和艺术家等人使用。一个典型的团队开发过程可能涉及 2D 或 3D 美术师、关卡设计师、游戏设计师和动画师,他们都在使用 Godot 编辑器。

总结¶

实例化,从蓝图生成对象的过程有很多方便的用途。通过场景,它为您提供:

  • 将游戏划分为可重用组件的能力。

  • 构建和封装复杂系统的工具。

  • 一种以自然方式思考游戏项目结构的语言。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【中间件】通过 docker-compose 快速部署 Kafka 保姆级教程

文章目录 一、概述二、前期准备1)部署 docker2)部署 docker-compose 三、创建网络四、安装 Zookeeper五、Kafka 编排部署1)下载 Kafka2)配置3)启动脚本 bootstrap.sh4)构建镜像 Dockerfile5)编排…

【VMware】搭建个人服务器

文章目录 准备工作三种网络模式Bridged(桥接模式)定义设置 NAT(网络地址转换模式)定义设置 Host-Only(仅主机模式)定义设置 搭建服务器网络模式的选择在VMWare的网络编辑器中设置转发端口查看宿主机的ip地址使用ssh连接工具进行连接 Mac笔记本跑虚拟机总感觉别扭,通…

浅谈一下“近期强势”这个指数

最近的行情,如果不理解退潮,那就意味着完全不理解情绪周期,也自然对大周期和小周期的概念了,这样一来无论你嘴上套用什么分歧、一致、修复都是徒劳的。 我说过我定义的新周期开始到结束,为什么我能定义一个很长的大周期?因为我有办法去观察赚钱效应。 如果我们都能理解…

【分布式锁】Redisson分布式锁底层原理

文章目录 前言原理分析Redisson实现Redis分布式锁的底层原理1.加锁机制2.锁互斥机制3. watch dog自动延期机制4.可重入加锁机制5.释放锁机制6.上述Redis分布式锁的缺点 前言 现在最流行的redis分布式锁就是Redisson了,来看看它的底层原理就了解redis是如何使用分布…

真香,聊聊 RocketMQ 5.0 的 POP 消费模式!

大家好,我是君哥。 大家都知道,RocketMQ 消费模式有 PULL 模式和 PUSH 模式,不过本质上都是 PULL 模式,而在实际使用时,一般使用 PUSH 模式。 不过,RocketMQ 的 PUSH 模式有明显的不足,主要体…

Unity 过场工具(Cutscene)设计(四) ——组件化设计

Unity 过场工具(Cutscene)设计(四) ——组件化设计 写到这一篇文章前就开始在考虑如何才能说清楚自己的设计思路,因为后续涉及到编辑器和Runtime框架的实际设计和实现过程,两者之间是互相有设计因果关系的。为了阐述自己的核心设计…

从0.5开始开发一个导购网站

提醒:文中没有具体如何修改的代码,只是提供了修改的思路。 为什么是从0.5开始呢? 因为这里借助了一个大佬的开源项目Springboot项目仿天猫商城: Springboot项目仿天猫商城 前台jsp页面 大佬的代码简洁,没有什么多余的功能&…

系统调用与API

系统调用介绍 什么是系统调用 为了让应用程序有能力访问系统资源,也为了让程序借助操作系统做一些由操作系统支持的行为,每个操作系统都会提供一套接口,以供应用程序使用。系统调用涵盖的功能很广,有程序运行所必需的支持&#xf…

leetCode刷题记录2

文章目录 hot100题560. 和为 K 的子数组581. 最短无序连续子数组 ▲617. 合并二叉树 hot100题 560. 和为 K 的子数组 560. 和为 K 的子数组 先暴力&#xff0c;过了再说 public int subarraySum(int[] nums, int k) {int ans 0;for (int i 0; i < nums.length; i) {in…

保姆级教程Windows11下安装RocketMQ

一、RocketMQ介绍 RocketMQ 是阿里巴巴开源的分布式消息中间件。支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念&#xff0c;如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。 二、Rock…

vector类详解【c++】

&#x1f600;博主主页 &#x1f600;博主码云 目录 &#x1f3c5;vector简介&#x1f3c5;vector使用&#x1f3c6;vector的定义&#x1f3c6;vector iterator 的使用&#x1f3c6;vector 空间函数&#x1f3c6;vector的扩容问题&#x1f3c6;vector 增删查改&#x1f3c6;vec…

Python tkintertools 模块介绍(新版)

&#x1f680;tkintertools&#x1f680; The tkintertools module is an auxiliary module of the tkinter module tkintertools 模块是 tkinter 模块的辅助模块 Installation/模块安装 Stable version/稳定版本 Version/版本 : 2.6.1Release Date/发布日期 : 2023/05/21 p…

Edge 浏览器:隐藏功能揭秘与高效插件推荐

文章目录 一、前言二、Edge 的各种奇淫巧计2.1 开启 Edge 分屏功能2.2 启动 Edge 浏览器后直接恢复上次关闭前的页面2.3 解决 Edge 浏览器无法同步账号内容2.4 开启垂直标签页&#xff08;推荐&#xff09;2.5 设置标签分组&#xff08;推荐&#xff09;2.6 设置标签睡眠时间&a…

网络管理 - 简单网络管理协议 SNMP

文章目录 1 概述1.1 结构1.2 操作 2 SNMP2.1 报文格式2.2 五大报文类型2.3 三大组件 3 扩展3.1 网工软考真题 1 概述 #mermaid-svg-xmaaQjpp1bT1axfw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xmaaQjpp1bT1axf…

实验篇(7.2) 01. 实验环境介绍 远程访问 ❀ Fortinet网络安全专家 NSE4

【简介】学习NSE4&#xff0c;如果只看文章而不动手做实验&#xff0c;就象耍流氓。为了有效的巩固学习到的内容&#xff0c;建议经常动手做实验。实验不怕出错&#xff0c;身经百战后&#xff0c;再在生产环境部署和配置FortiGate防火墙&#xff0c;就会做到胸有成竹。 虚拟实…

【网络协议详解】——RIP协议(学习笔记)

目录 &#x1f552; 1. IP路由协议概述&#x1f558; 1.1 路由表&#x1f558; 1.2 路由的度量尺度/度量值&#x1f558; 1.3 路由管理距离 &#x1f552; 2. RIP协议&#x1f558; 2.1 概述&#x1f558; 2.2 工作原理 &#x1f552; 3. 报文格式&#x1f558; 3.1 RIP 协议报…

【自动化测试】第一次项目实施

测试项目简介&#xff1a;基于python语言 跨平台的测试自动化工具&#xff0c;适用于后台、原生或混合型客户端应用的测试。它支持 Android、iOS、Web、后台、云服务和 Windows 端的 UI 自动化测试。 上手快&#xff0c;操作简单&#xff0c;只要有一点python基础&#xff0c…

5. 多线程并发锁

本文介绍了多线程并发下为了避免临界资源被抢占而出现的错误&#xff0c;引入了锁和原子操作 来解决。 一、问题分析 创建10个线程&#xff0c;每个线程实现往总进程加1万个数。则总进程会达到10万 #include<stdio.h> #include <unistd.h> #include<pthread.h…

路径规划算法:基于头脑风暴算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于头脑风暴的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于头脑风暴的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法头脑…

强化学习-初步认识

前言 强化学习这个概念是2017年Alpha Go战胜了当时世界排名第一的柯洁而被大众知道&#xff0c;后面随着强化学习在各大游戏比如王者荣耀中被应用&#xff0c;而被越来越多人熟知。王者荣耀AI团队&#xff0c;甚至在顶级期刊AAAI上发表过强化学习在王者荣耀中应用的论文。 什么…