今天我们来学习使用Godot 3D模式下的物体运动操作,我们主要会使用到RigidBody3D「刚体」, StaticBody3D「静态」, Camera3D「相机」, DirectionalLight3D「定向光源」这四个节点。当然,除了这几个主要的节点,我们还会使用到处理碰撞检测的CollisionShape3D节点,Godot预置的3D模型,立方体CSGBox3D节点与圆柱体CSGCylinder3D节点。
创建场景并安放节点
我们新建一个项目,并把会用到的节点按着如下结构放置在场景中:
- Node[重命名为Root]
- StaticBody3D
- RigidBody3D
- CollisionShape3D
- CSGCylinder3D
- Camera3D
- DirectionalLight3D
设置节点
我们为StaticBody3D的子节点CollisionShape3D设置属性Shape,这里我们给定一个BoxShape属性并且把Size x改为10m,z改为10m:
我们将StaticBody3D的子节点CSGBox3D中的Size也做同样的修改,使物理实体对齐碰撞检测的Shape:
我们选中RigidBody3D节点,然后设置它的位置Position,将y改为3.5m:
我们将Camera3D节点的位置Position和旋转角度Rotation也做修改:
我们最后再对DirectionalLight3D节点的位置Position和旋转角度Rotation做修改:
现在我们可以按键盘快捷键F6,运行该场景进行预览:
插入控制脚本
我们右键节点RigidBody3D,点击Attach Script选项,为其添加脚本,并把如下内容写入脚本:
extends RigidBody3D
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _physics_process(delta):
if Input.is_action_pressed("ui_left"):
linear_velocity.x = -3
if Input.is_action_pressed("ui_right"):
linear_velocity.x = 3
if Input.is_action_pressed("ui_up"):
linear_velocity.z = -3
if Input.is_action_pressed("ui_down"):
linear_velocity.z = 3
一般来说我们在函数_physics_process
中控制物体的物理运动。
我们可以使用方法Input.is_action_pressed
来获取键盘方向键输入,ui_left
, ui_right
, ui_up
, ui_down
分别对应键盘方向键左,右,上,下。
linear_velocity
用于设置刚体的运动速度,我们这里只处理x和z方向。
例如,当键盘方向键左被按住时触发:
if Input.is_action_pressed("ui_left"):
linear_velocity.x = -3
我们将x方向的速度设置为-3。
保存后,再次运行场景,我们就可以使用键盘方向键来操作我们的物体进行运动了: