场景实例化(Instancing)

原理阐述

创建一个场景并将节点扔到里面对于小项目是适用的,但随着项目不断发展,用到越来越多的节点,整个项目很快就会演化成难以管理的状态。

为了解决这个问题,Godot允许一个项目分割成多个场景。这一点与其它游戏引擎的方式实际上有很大的不同,所以不要跳过这节的内容,仔细看。

要点: 场景是树状组织的节点集合,有且仅有一个根节点。

Godot中可以创建一个场景并将其保存到硬盘中,同时,可以创建多个场景并按需单纯存储。

然后,编辑已有场景或新场景时,其它场景可以被实例化为它的一部分:

上图中,场景B的实例被添加到场景。现在这个效果看起来有点怪,但本文的最后会构建一个完整的场景。

场景实例化的操作步骤

为了学习如何进行场景的实例化,先下载一个演示项目: http://files.cnblogs.com/files/x3d/instancing.zip

解压该场景文件到任意目录,然后用'Import'按钮添加该场景到项目管理器中:

新项目会在项目列表界面中出现,点击 'Edit' 按钮可以编辑项目。

该项目包含两个场景: "ball.scn" 及 "container.scn"。“ball”场景中仅包含一个球体,“container”场景中有一个具象的碰撞检测体,球体可以被扔进去.

打开“container”场景,然后选中根节点:

再“推开”链接形状的按钮,这个就是场景实例化按钮!

选择“ball”场景(ball.scn), 球体现在应该出现在坐标原点(0,0),像下图这样将它移到场景中间区域:

点“Play”看看!

被实例化的球体掉到了坑底。

补充

一个场景可以按照需要被实例化多个,你可以试试,或者直接复制(按ctrl-D或点复制按钮):

然后再试试运行一次这个场景:

这就是为什么叫场景被实例化,而不是场景被载入,因为前者更准确的反映了其原理!

编辑实例

选中那些球体的其中一个拷贝,到属性编辑器那里我们可以让它弹跳更多次,找到“bounce”参数,将其设为“1.0”:

下一次这里将会出现一个"revert"按钮,意味着相对于原始场景该实例化场景的这个属性值发生了变化。即便原始场景中该值发生了改变,还是会按实例化场景的自定义值为准。如果要恢复该属性值为原始场景的值,点"revert"按钮就好了。

结论

实例化看似简单,但它的内涵远不止你现在看到的这些,下一节内容会覆盖剩余的知识点..

[译]Godot系列教程二 - 场景实例化(Instancing)的更多相关文章

  1. [译]Godot系列教程三 - 场景实例化(续)

    场景实例化(续) 要点 场景实例化带来很多便利的用法,总体来说有: 将场景细分,更便于管理 相对于某些引擎中的Prefab组件更灵活,并且在许多方面更强大 是一种设计更复杂的游戏流程甚至UI的方式 这 ...

  2. [译]Godot系列教程一 - 场景与节点

    场景(Scene)与节点(Node) 简介 先设想有那么一瞬间你自己不再是一名游戏开发者了,而是一名大厨! 你的装备换成了一套大厨的制服.不要考虑制作游戏的事情,你现在的职责是为你的顾客创建新的可口的 ...

  3. [译]Godot系列教程五 - 制作Godot编辑器插件

    制作插件 下文仅针对2.1版本. 关于插件 插件是为编辑器扩展出更多有用工具的重要方式.它可以完全用GDScript和标准场景开发,甚至都不需重新加载编辑器就可生效.不像模块,你无需创建C++代码.也 ...

  4. [译]Godot系列教程六 - 简单的二维游戏

    Pong Godot自带的Demo中有大量更复杂的示例,但这款叫"Pong"的游戏可以对2D游戏的基本特性做一个介绍. 静态资源 本文所用到的一些资源文件:http://files ...

  5. [译]Godot系列教程四 - 编写脚本

    编写脚本(Scripting) 简介 关于无需编程即可创建视频游戏的那些工具的谈论有很多.不用学习编程知识对很多独立开发者来说就是一个梦想.这种需求 - 游戏开发者.甚至在很多公司内部,希望对游戏流程 ...

  6. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. WPF系列教程——(二)使用Prism实现MVVM设计模式 - 简书

    原文:WPF系列教程--(二)使用Prism实现MVVM设计模式 - 简书 本文假设你已经知道MVVM设计模式是什么,所以直接进入正题,今天我们就用Prism来实现WPF的MVVM设计模式,百度上关于 ...

  8. C#微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

  9. Android Studio系列教程二--基本设置与运行

    Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...

随机推荐

  1. Python调用C++的DLL

    import os import sys from ctypes import * test = cdll.LoadLibrary('D:\Python27\py.dll') print test.A ...

  2. Node.js返回JSONP

    在使用JQuery的Ajax从服务器请求数据或者向服务器发送数据时常常会遇到跨域无法请求的错误,常用的解决办法就是在Ajax中使用JSONP.基于安全性考虑,浏览器会存在同源策略,然而<scri ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (16) -----第三章 查询之左连接和在TPH中通过派生类排序

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-10应用左连接 问题 你想使用左外连接来合并两个实体的属性. 解决方案 假设你有 ...

  4. WCF 安全性 之 None

    案例下载 http://download.csdn.net/detail/woxpp/4113172 服务端配置代码 <system.serviceModel> <services& ...

  5. ionic中关于ionicView 的生命周期

    当我们来回切换页面时候,视图被缓存下来,不用每次再去new一个新的视图,可以大大地提高性能.当跳出一个视图后,视图的元素被保存在DOM中,它的作用域也就不在$watch的作用域内,当我们访问一个已经被 ...

  6. 开发该选择Blocks还是Delegates

    前文:网络上找了很多关于delegation和block的使用场景,发现没有很满意的解释,后来无意中在stablekernel找到了这篇文章,文中作者不仅仅是给出了解决方案,更值得我们深思的是作者独特 ...

  7. StartUML的基础的使用,用例图,序列图

    转载地址  http://blog.csdn.NET/tianhai110 (下面参考了原博主的内容,也加入自己的内容,为了自己脑补,也方便其他看到的人脑补) 使用StartUML绘制用例图:     ...

  8. WPF入门教程系列十五——WPF中的数据绑定(一)

    使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...

  9. 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。

    ajax跨域请求对于前端开发者几乎在任何一个项目中都会用到,众所周知,跨域请求有三种方式: jsonp; XHR2 代理: jsonp: 这种应该是开发中是使用的最多的,最常见的跨域请求方法,其实aj ...

  10. Latch2:Latch和性能

    1,数据的IO操作 SQL Server访问的任何一个Page必须存在于内存中,如果不存在于内存中,那么SQL Server发出 Disk IO请求,将数据页从Disk读取到内存中,然后SQL Ser ...