Godot笔记:用Viewport实现在2D场景中显示3D内容

2019-07-13  本文已影响0人  吃烧烤的老王

引言
Godot说:视口(Viewport)是通往另一个世界的入口。
在学习本教程之前,你可以先阅读一下我翻译的关于视口的官方文档《Godot 视口》对视口概念有一个大体的了解。本教程以官方提供的案例《视口 之 3d in 2d》为基础,手把手教你使用Godot的视口实现在一个2D场景中用独立视口显示一个3D场景。

最终效果如下:

最终效果

主场景是2D场景,里面有一个顺时针旋转的Godot图标,右边独立视口中显示的是一个3D场景,里面有一个旋转的立方体。

我们先看一下3D场景的实现:

3dscene.png

3D场景的根节点是一个Node节点,其子节点包含1个Camera,1个名为“Cube3D”的MeshInstance和2个OmniLight。注意要勾选CameraCurrent属性,使其成为该场景的有效摄像机。“Cube3D”上的脚本如下:

extends MeshInstance
​
func _process(delta):
 rotation_degrees.y += delta * 100.0

我们在看一下原始2D场景的实现:

2dscene.png

2D场景更为简单,"Player2D"是一个Sprite,其脚本如下:

extends Sprite
​
func _process(delta):
 rotation_degrees += delta * 100.0

小结:从上面我们可以看到,实际上就是两个普通的场景,正如引言中所说:"视口是通往另一个世界的入口"。接下来我们就要使用视口将3D和2D两个场景像平行宇宙一样,显示在一起。

final.png
extends Viewport
​
func _ready():
 var sprite:Sprite = get_node("../Viewport_Sprite")
 sprite.texture = get_texture()

提示:可以看到当前,在编辑器中我们看不到视口中的3D场景,这是因为在视口中的内容只有在运行时的窗口中才可以看到。因此,我们通常会把视口下的子树保存为一个场景来编辑。

FAQ:

上一篇 下一篇

猜你喜欢

热点阅读