【发布时间】:2020-12-17 16:50:46
【问题描述】:
我正在尝试在 Godot 中创建触手。我尝试在 Blender 中制作它,然后放入骨头,但我无法让它工作,所以我尝试了一些更简单的方法:我有 13 个 CSGMesh(圆柱网格)来表示触手段,每个段都是触手的其余部分。
tentacle
+-> segment1
+-> segment2
+-> segmen...
所以我要做的很简单,在每次更新时,我都会来回修改片段的 Z 旋转。效果看起来确实像触手挥舞,但我每秒可能会获得 1-2 帧。场景中没有其他任何东西,所以我觉得我可能做错了什么,虽然我不知道是什么。
我做的事情很简单,但是代码很多,所以相关的部分就在这里:
public class tentacle4 : Spatial
{
private class SegmentPosition
{
// ... I cut out the stuff in here for keeping track of position and rotation speed
// the actual segment in the scene
public Spatial Node { get; set; }
public void RotateZ(float delta)
{
// the bit that actually roates is:
this.Node.Rotation = new Vector3(0, 0, proposed);
}
}
// No meaningful difference here in performance between
// this and _PhysicsProcess()
public override void _Process(float delta)
{
foreach (var segment in Segments)
{
segment.RotateZ(delta);
}
}
}
我做错了什么让它表现如此糟糕?我假设我在管道中的错误时间进行轮换,尽管我不知道什么时候是正确的。我会提到 Godot 中的预览运行得很好,并且在运行项目时(在 GLES2 或 GLES3 中)计算机并没有紧张——CPU (i7-8705) 和 GPU (Vega GL) 似乎都不在乎.
【问题讨论】:
-
看起来我这样做的方式不正确。我切换到,而不是在每次更新时设置旋转,而是创建一个 Tween 节点并将其设置为
rotation_degrees:z上的InterpolateProperty(),这更平滑 - 但它看起来仍然很不稳定。我在每个_Process()中都放了一个GD.Print(),也就是说delta=0.016,所以我想我得到了60 fps?感觉更像是 20 岁左右。
标签: godot