关键词:碰撞检测、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启用碰撞。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐