场景和节点
seraph526 在星期三, 10/14/2015 - 15:10 提交
介绍
想像一个,你不再是一个游戏开发者,而是一名大厨!将时髦的衣服换成绒边帽和双排扣夹克.现在,你不做游戏,而是为你的客人烹饪新鲜美味的食物. 现在,一位大厨如何烹饪食物?分为两道工序,首先是材料,其次是准备工序的介绍.这样,每个人都可以按照食谱制作,并品尝你伟大的料理.
用Godot做游戏和做菜的感觉非常像.使用引擎就像置身于厨房中.在这间厨房里,"节点"就像是装满了要烹饪的原材料的冰箱.
有许多类型的节点,一些显示图片,另外一些播放声音,还有一些显示3D模型等等.有许多这样的节点
节点
让我们开始学习基础知识.节点是创建游戏的基本元素,它有以下几个特点: *要定义一个名字*有可编辑的属性*逐帧运行以接收callback调用*可以被继承(拥有更多的函数) *可以作为其他节点的子节点
最后一点很重要.节点可以拥有其他节点作为子节点.当我们按这种方式组织节点,节点便成了"tree".
在Godot中,按这种方式管理节点的方式成就了一个伟大的管理项目的工具.因为不同的节点有不同的函数,组合他们会创建更复杂的节函数. 这些可能你还不太清楚,没什么太深的理解.但是所有这些将来都会有所说明.现在最重要的是要记住,节点的存在,而且可以按上述的方式组织节点.
场景
既然已经定义了节点的存在,下一步便是说明什么是场景.场景由一组节点构成,这些节点被分级管理(以树的形式).它有以下的特征: 一个场景通常只有一个root节点*场景可以被保存到磁盘并加载加来*场景可以被instanced*(后面会详细说明) *运行一个游戏也就是运行了一个场景*一个项目中可以有几个场景,但是要开始游戏,一定要先加载其
中一个. 基本上,Godot编辑器就是一个"场景编辑器".它有许多工具用来编辑2D和3D 场景以及用户界面,但所有的编辑器都是都是围绕编辑场景和节点展开的.
创建新项目
理论是枯燥的.让我们改变主题,实践一下.跟随一个传统的教程,第一个工程将是"helloworld".为此,将使用编辑器. 当Godot在项目外运行时,工程管理器将会出现.它帮助开发者管理他们的项目.
要创建一个新项目.要使用"new Project"选项.选择并创建项目路径和定义项目名称.
编辑器
新项目创建后,下一步就是打开它.这将打开Godot编辑器.下图是我们新打开时编辑器
的样子.
如前文所述,在Godot中制作游戏,就像置身于厨房.所以,让我们打开冰箱并填加一些新节点到场景中去.我们将以"HelloWorld"项目开始.按下"新节点"按扭:
这将打开节点创建对话框,它显示了所能创建的节点的长度列表:
这里,我们选择"Label",搜索节点通常更快捷一些.
最后,创建Label!.当创建按扭被按下时,发生了很多事:
首先,场景变为2D编辑器(因为Label是2D节点类型),Label显示,被选中,在viewport
的左上角. 节点出现在场景树编辑器中(在右上角),label属性出现在Inspector面板中(在右下角). 下一步,我们将改变label的"Text"属性,将其值改为"Hello World":
OK,所有的事都准备好了,可以运行场景了!点击顶部的"PLAY SCENE"按扭(或者按F6):哎呀
运行前场景要先保存,选择Scene->Save,保存场景为"helllo.scn"一类的名字
这里有一些有趣的事情.文件对话框比较特别,它允许保存场景到工程内部.工程的根目
录是"",它就是资源路径.也就是说,文件只能保存到项目内部.将来,当在Godot中做文件操作时,记住""是资源路径,不管是什么平台或安装路径,这是从游戏内部定位资源的方法. 在保存了场景并按下run之后,"Hello World!"最终正常运行了:
成功了!!
配置项目
好了,是时候对项目做一些配置了.现在,运行场景是唯一执行程序的方法.项目通常都有向个场景,所以要将它们中的一个设置为主场景.主场景将在项目运行时被第一个加载. 这些设置都被存储在engine.cfg文件中,这是一个纯文本的win.ini格式的文件,以便可以方便的编辑.还有很多选项可以设置以声明项目如何运行,为了让设置变得简单,可以通过项目设置对话框设置engine.cfg.
要访问此对话框,可通过Scene->Project Settings打开. 窗口打开后,任务是设置一个主场景.我们可以很容易的改变application/main_scene的属性,选择"hello.scn"为主场景
修改后,点击"regular Play"按扭(或F5)会运行项目,无论当前是哪个场景被编辑.
settings设置中文在哪里
返回项目设置对话框.这个对话框提供了很多可以填加到engine.cfg的选项,这里显示了它们的默认值.如果默认值是正确的,我们不需要云改变它们.当值改变时,名字左侧的选择框会变为选中状态.这意味着这个值会被保存到engine.cfg文件中,会被项目记住所做的更改. 这里是边注,为将来提供参考,有一些断章取义(毕竟,这只是第一篇教程).通过使用Globals singleton可以填加自定义的设置选项,并且可以实时读取.
实例化
seraph526 在星期三, 10/14/2015 - 15:27 提交
基本原理
有一个小型的场景,有些节点在场景中,可能有很多小的项目都可以正常工作,但当项目成长时,越来越多的节点被使用,它很快就会变得难以管理.为了解决这个问题,Godot允许项目被划分为不同的场景.这和其他的一些游戏引擎的工作方式不一样.事实上,差别很大.所以请不要跳过这篇教程.
重申一下:场景是节点的集合,按照trew的结构组织,只能有一个单独的节点做为这个树的根结点.
在Godot中,场景可以创建并保存到磁盘上.任意场景都可以创建和并按你希望的形式保存.
之后,当编辑一个存在的场景或新场景时,其他场景可以被初始化为此场景的一部分.
上图中,场景B被加载并初始化为场景A中的一个实例,开始可能会觉得奇怪,但当看完这篇教程时会完全了解是什么回事.
初始化, Step by Step
要学习如何初始化,让我们从下载一个pre-made souene. 解压下载的场景到任意我们喜欢的路径下.然后,使用import选项加载到项目管理器
定位到你的项目,打开"engine.cfg"文件.新的项目会出现在项目列表中.要管理这个项目,可以点击"Edit"选项. 这个项目包含两个场景"ball.scn"和"container.scn".ball场景只是一个带有物体属性的球,container场景有一个很好的碰撞形状.球会被限制指定的区域中.
打开container场景,选择根节点:
之后,点击"+"按扭,这就是初始化按扭!
选择ball场景(ball.scn),球会出现在origin(0,0)位置,围绕场景中心移动ball,如下:
点击"Play"按扭,瞧!
初始化的小球都落到底部的陷阱中
多一些
场景中可以有任意多个初始化实例,试下创建更多的球,或者复制(ctrl-D或复制按扭):
再一次运行场景:
是不是很酷? 这就是实例如何工作的.
编辑实例
选中实例化的小球中的一个,打开属性编辑器.我们让它的弹力再大些,查看bounce参数,将其值设置为1.0:
接下来,会出现一个绿的"revert"按扭,当这个按扭出现时,意味着我们编辑一个实例场景的属性,将重写这个实例为特别的值.甚至属性在原场景中编辑过.自定义的值将会重写它们.按下"revert"按扭将恢复场景中原来的值.
结论
实例化看起来很简单,实际上它还有很多功能,下一节实例化教程将会说明剩下的部分...实例化(继续)
seraph526 在星期三, 10/14/2015 - 16:06 提交
概括
实例化有很多方便的用法.一目了然,使用实例,你可以: *细分场景,使之易于管理. *更加灵活的方法替代prefabs(可以工作在更多层级的功能更加强大的实例化). *设计更加复杂的游戏流程甚至是UIs的方法(UI元素在Godot中也是节点).
设计语言
但是,实例化场景真正强大的点在于它像一门优秀的设计语言一样工作.这使得Godot完全不同于其他的游戏引擎.整个引擎从底层都是围绕这一概念设计的. 用Godot制作游戏时,建议的方式是将其他的设计模式如MVC或Entity-Relationship diagrams放到一边.以更加自然的方式开始制作游戏.开始设想游戏中的可视化元素,那些不光可以被程序员命名,也可以被任何人命名的游戏元素.
如,这里是一个简单的射击类游戏的创意思路:
任何类型的游戏都可以十分简单的想像出这样的图表.只要写下想法中的元素,然后用箭头标注所有权关系. 这个图表存在后,制作游戏基本就成了为这些节点创建场景,使用实例化(通过代码,之后会介绍,或者通过编辑器)表示所有权关系
编写游戏的大部分时间(或者一般的软件)都花在设计游戏模式并让游戏组件适应这一模式上.基于场景的设计取代了这些,使得开发更快更直接,允许直接关注游戏本身.基于场景/实例化的设计节省了大部分上述的工作,使工作变得十分有效率,因为大部分组件被直接映射成一个场景.这样,不再需要或只需很少的模式代码.
下面是一个复杂点的例子,一个开放沙盒类型的游戏,其中有很多资源或部分是交互的:
用家具搭建一些屋子,之后连接它们.制作一间房子,用这些房间作为这间房子的内部.这间房子可能是堡垒的一部分,堡垒有许多房子组成.最后,堡垒可以被放置到世界地图上.也要填加一些守卫和一些NPCsg到先前创建的场景中. 使用Godot,可以快速的按你所想实现游戏,因为只是多个场景的制作和初始化.编辑器UI也设计成无需程序员操作的模式,所以,通常一个游戏开发小组包括3D或2D艺术家,关卡设计师,游戏设计师,动画师等等,都是通过编辑器界面工作.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。