关键词:碰撞检测、godot、游戏开发、RigidBody3D、CSGBox3D
一、简介
在游戏开发中, 你经常需要知道游戏中的两个对象在何时相交或接触. 这被称为 碰撞检测 . 检测到碰撞时, 你通常希望某些事情发生. 这被称为 碰撞响应 .
Godot在2D和3D中提供了许多碰撞对象, 以提供碰撞检测和响应. 你可能很难决定哪个适合你的项目. 一旦了解了每种方法的工作原理以及它们的优缺点, 你就可以避免出现问题并简化开发过程.
本文主要是RigidBody3D节点的碰撞检测。
二、场景搭建
按照下面场景书构造一个场景:
- floor表示地板,launch是发射台,landingpad是降落台,这三个节点的类型都是CSGBox3D。
- player是RigidBody3D。
给player添加MeshInstance3D和CollisionShape3D子节点,并设置合适的碰撞形状。
给player场景添加脚本(GDscript):
extends RigidBody3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
if Input.is_action_pressed("ui_up"):
apply_central_force(Vector3.UP * delta * 1000.0)
if Input.is_action_pressed("ui_left"):
apply_central_force(Vector3.LEFT * delta * 500.0)
if Input.is_action_pressed("ui_right"):
apply_central_force(Vector3.RIGHT * delta * 500.0)
三、添加信号
开启contact Monitor 并把最大碰撞点数设置为合适的值。
添加信号
floor,launch,landingpad启用碰撞。