【问题标题】:change scene while preserving the player's global direction,3d在保持玩家全局方向的同时改变场景,3d
【发布时间】:2021-09-25 21:12:22
【问题描述】:

当玩家触摸场景 A 的起始传送门框时,将场景从场景 A 切换到场景 B,并降落在场景 B 的着陆传送门框上。 我希望玩家在降落时面向同一个方向,就像他开始进入传送门时一样。 我不知道如何处理它的 vector3 变换。 感谢您提前提供帮助。

【问题讨论】:

  • 感谢 tresor bireke 的编辑。我是堆栈流的新手,所以我不知道如何编辑。现在我知道该怎么做了。

标签: 3d godot


【解决方案1】:

自动加载(单例)在场景变化后仍然存在。因此,您可以使用它们来存储必须在场景变化后保留下来的信息。

要创建自动加载,请转到“项目”菜单,然后选择“项目设置”选项,打开“项目设置”对话框,然后转到“自动加载”选项卡。

创建 - 或使用现有的 - 自动加载脚本,该脚本将保存您需要在场景变化中跟踪的任何变量。 例如,您可以将玩家得分、生命数和类似变量放在那里。

在这种情况下,您需要玩家头像的方向。


由于我们谈论的是 3D,我假设玩家头像是 Spatial(或派生的)节点。另外我会假设我们只想保持旋转。不是缩放或任何其他转换。严格来说只是旋转。


仅轮换

你可以得到一个Quat,它代表这样的方向:

$Avatar.Transform.basis.get_rotation_quat()

并在更改场景之前将其存储在您的 atuoload 中:

AutoloadName.orientation = $Avatar.Transform.basis.get_rotation_quat()

然后,在准备好新场景时,您可以检索并设置它,这需要创建一个新的Transform。


我们可以将我们存储的旋转与我们在目的地上的Basis 结合起来,如下所示:

var quat = AutoloadName.orientation
var basis = $Avatar.Transform.basis
var new_basis:Basis = Basis(quat.xfrom(basis.x), quat.xfrom(basis.y), quat.xfrom(basis.z))
$Avatar.Transform = Transform(new_basis, $Avatar.Transform.origin)

需要明确的是,我在该代码中所做的是创建一个新的 Transform,它将保留其 origin(以及它的翻译),其基础 rotated存储Quat。所以它实际上会结合旋转。


或者,我们可以从Quat 创建一个新的基础:

var quat = AutoloadName.orientation
$Avatar.Transform = Transform(Basis(quat), $Avatar.Transform.origin)

这也意味着目标的任何缩放都将丢失。


好吧,我们可以读取目的地的缩放比例,然后再次缩放:

var scale = $Avatar.Transform.basis.get_scale()
var quat = AutoloadName.orientation
$Avatar.Transform = Transform(Basis(quat).scaled(scale), $Avatar.Transform.origin)

这样它将具有目的地的缩放,以及您存储的旋转。 请注意,基可以表示缩放和旋转以外的变换(例如倾斜)。


旋转和缩放

如果可以保留缩放等,但不能保留平移,则可以简单存储basis:

AutoloadName.basis = $Avatar.Transform.basis

然后设置它:

$Avatar.Transform = Transform(AutoloadName.basis, $Avatar.Transform.origin)

完全变换

当然,如果你也想保留翻译,你只需存储Transform:

AutoloadName.transform = $Avatar.Transform

然后设置它:

$Avatar.Transform = AutoloadName.transform

【讨论】:

  • thank you theraot,所以是以transform的形式保存在autoload script中?好的,我知道了。是的,我只想要轮换。谢谢。
  • 哦,你的意思是以 transform.basis 的形式进行旋转和缩放。我现在才明白。我只是菜鸟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多