如何在运行时更改 CollisionShape (3D) 的大小和形状?
How to change the size and shape of a CollisionShape (3D) in runtime?
我正在尝试通过使攻击碰撞箱可缩放来使我的游戏更具动态性。然而,当向当前 CollisionShape 添加新形状时,它在打印时显示正确的半径,但游戏中的半径与新值不对应。
我目前使用的代码是这样的:
var shape = CylinderShape.new()
shape.set_radius(new_radius)
shape.set_height(new_height)
$Spatial/CollisionShape.shape = shape
当 运行 我尝试打印当前的 CollisionShape.shape.radius 并且它显示了新的数字但是在游戏中碰撞形状仍然是旧的形状并且没有任何改变(在调试选项打开和测试碰撞大小时)
所以我的问题是:如何在运行时更改形状的形状或大小。
我已经尝试过的事情:
$Spatial/CollisionShape.shape.radius = new_radius
$Spatial/CollisionShape.shape.height = new_height
不幸的是,这给出了相同的结果。在将新形状放入 CollisionShape 之前,我还尝试使形状为空。这也没有任何改变。
我是不是漏掉了什么?
看起来无法更新碰撞形状;你必须创建一个新的。我是这样解决的,我有一个 CSGBox,它拥有一个 StaticBody,它拥有一个 CollisionShape,我想让静态物体的碰撞形状与 CSGBox 相匹配:
var box : BoxShape = BoxShape.new()
box.extents.x = self.width/2
box.extents.y = self.height/2
box.extents.z = self.depth/2
$StaticBody/CollisionShape.shape = box
(此脚本附在CSGBox中)
我正在尝试通过使攻击碰撞箱可缩放来使我的游戏更具动态性。然而,当向当前 CollisionShape 添加新形状时,它在打印时显示正确的半径,但游戏中的半径与新值不对应。
我目前使用的代码是这样的:
var shape = CylinderShape.new()
shape.set_radius(new_radius)
shape.set_height(new_height)
$Spatial/CollisionShape.shape = shape
当 运行 我尝试打印当前的 CollisionShape.shape.radius 并且它显示了新的数字但是在游戏中碰撞形状仍然是旧的形状并且没有任何改变(在调试选项打开和测试碰撞大小时)
所以我的问题是:如何在运行时更改形状的形状或大小。
我已经尝试过的事情:
$Spatial/CollisionShape.shape.radius = new_radius
$Spatial/CollisionShape.shape.height = new_height
不幸的是,这给出了相同的结果。在将新形状放入 CollisionShape 之前,我还尝试使形状为空。这也没有任何改变。
我是不是漏掉了什么?
看起来无法更新碰撞形状;你必须创建一个新的。我是这样解决的,我有一个 CSGBox,它拥有一个 StaticBody,它拥有一个 CollisionShape,我想让静态物体的碰撞形状与 CSGBox 相匹配:
var box : BoxShape = BoxShape.new()
box.extents.x = self.width/2
box.extents.y = self.height/2
box.extents.z = self.depth/2
$StaticBody/CollisionShape.shape = box
(此脚本附在CSGBox中)