Godot 中具有飞行模式的相机控制器
Camera controller with fly mode in Godot
我正在 Godot 中使用程序生成地形进行一个小项目。
我需要一个非常基本的相机控制器,它可以飞而不是跳。即使是 Godot 官方 Fps 教程中的 Fps 控制器也无法满足我的需求。我对 Godot 和 GDScript 很陌生,即使我很了解 C#,我也不知道用它来移动 Godot(我更喜欢 Godot 中的 GDScript,因为缺少 C# 的内部编辑器)。
谁能帮帮我吗?谢谢
出于测试目的,我转到了 adamviola 的“Simple Free-Look Camera”,您可以在资源库中找到它。当您下载它时,它会给您一个 camera.gd
脚本,您可以将其附加到场景中的 Camera
(将文件从“文件系统”面板拖到“场景”面板即可)。使current
的Camera
设置为true
。这就是全部。
该脚本模仿了编辑器相机的基本运动,因此您可以按右键单击环顾四周,然后按 WASD 键飞行。 Q 和 E 垂直移动。并且可以使用鼠标滚轮改变飞行速度。
此外,就像资产库中的所有内容一样,它是免费的(这就是为什么它不是资产 store)。它也是开源的。所以你可以打开它并研究代码。而且它是自由的,所以你也可以随意修改。 上面对控件的描述也应该有助于作为在代码中查找内容的起点。
下面是对camera.gd
代码的作用的简短解释。
你可以在代码中找到当你按下右键时它使用Input.set_mouse_mode
来捕获鼠标。它将在获得 InputEventMouseMotion
时存储 relative
运动(顺便说一句,这是在 _input
中),以便稍后使用 [=21= 的组合旋转 Camera
] 和 rotate_object_local
(那部分在 _update_mouselook
中)。 水平鼠标运动转换为偏航,垂直鼠标运动转换为俯仰,代码还限制了俯仰。
它还会跟踪它感兴趣的键的状态。您可以找到变量 _w
、_s
、_a
、_d
、 _q
、_e
在脚本顶部,并在 _input
获得 InputEventKey
时更新。这些键的状态用于计算方向向量 - 它在其上应用速度和加速度 - 并最终将 Camera
移动到 translate
(您可以在 _update_movement
上找到它)。 请注意 translate
受 Camera
方向的影响,因此 z
轴就是您正在查看的位置。
鼠标滚轮输入也在 _input
上进行,它会更新应用于 _update_movement
的速度倍增器。
我正在 Godot 中使用程序生成地形进行一个小项目。
我需要一个非常基本的相机控制器,它可以飞而不是跳。即使是 Godot 官方 Fps 教程中的 Fps 控制器也无法满足我的需求。我对 Godot 和 GDScript 很陌生,即使我很了解 C#,我也不知道用它来移动 Godot(我更喜欢 Godot 中的 GDScript,因为缺少 C# 的内部编辑器)。
谁能帮帮我吗?谢谢
出于测试目的,我转到了 adamviola 的“Simple Free-Look Camera”,您可以在资源库中找到它。当您下载它时,它会给您一个 camera.gd
脚本,您可以将其附加到场景中的 Camera
(将文件从“文件系统”面板拖到“场景”面板即可)。使current
的Camera
设置为true
。这就是全部。
该脚本模仿了编辑器相机的基本运动,因此您可以按右键单击环顾四周,然后按 WASD 键飞行。 Q 和 E 垂直移动。并且可以使用鼠标滚轮改变飞行速度。
此外,就像资产库中的所有内容一样,它是免费的(这就是为什么它不是资产 store)。它也是开源的。所以你可以打开它并研究代码。而且它是自由的,所以你也可以随意修改。 上面对控件的描述也应该有助于作为在代码中查找内容的起点。
下面是对camera.gd
代码的作用的简短解释。
你可以在代码中找到当你按下右键时它使用Input.set_mouse_mode
来捕获鼠标。它将在获得 InputEventMouseMotion
时存储 relative
运动(顺便说一句,这是在 _input
中),以便稍后使用 [=21= 的组合旋转 Camera
] 和 rotate_object_local
(那部分在 _update_mouselook
中)。 水平鼠标运动转换为偏航,垂直鼠标运动转换为俯仰,代码还限制了俯仰。
它还会跟踪它感兴趣的键的状态。您可以找到变量 _w
、_s
、_a
、_d
、 _q
、_e
在脚本顶部,并在 _input
获得 InputEventKey
时更新。这些键的状态用于计算方向向量 - 它在其上应用速度和加速度 - 并最终将 Camera
移动到 translate
(您可以在 _update_movement
上找到它)。 请注意 translate
受 Camera
方向的影响,因此 z
轴就是您正在查看的位置。
鼠标滚轮输入也在 _input
上进行,它会更新应用于 _update_movement
的速度倍增器。