Godot 物理引擎 2D
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Godot 物理引擎 2D相关的知识,希望对你有一定的参考价值。
参考技术A area2d只提供检测,能够触发接触检测,区域进出检测,不可用于碰撞,可以想象成雷达。也可以检测区域是否重叠。区域也可以接收鼠标/触摸输入。静态物,无法被移动,固定在场景中,可被碰撞。静态物体可以设置线性速度和线性角动量,用来影响碰撞的刚体。
刚体,最好不要直接移动物体,而是给物体施加力,否则会破坏其中的物理系统。当刚体不运动后,物体会保持静止,类似静态物一样,直到再次受力。
动态物体,不会被物理引擎约束,可以随意控制位置,能和刚体和静态物相互碰撞。
移动时不要使用move(),要使用move_and_collide()或者move_and_slide()方法。如果碰撞,则api会停止,碰撞触发后手动处理之后的事情。
在_process中刷新可能物理位置不稳定,使用_physics_process来处理
物体所在的层
物体可以碰撞的层
可以在项目设置中对图层命名
返回 空 或者 kinematic collision 2d对象,其中包含了碰撞信息
查找碰撞点
反弹效果:
对move_and_collision的高级处理,直接进行滑动运动
行走和跳跃
move_and_collision参数需要乘delta
move_and_slide参数不需要乘delta
move_and_slide_with_snap 粘着
跳跃时会产生冲突,跳跃时可设置snap向量为0
用collision和slide来实现snap
kinematic 不能被物理定律约束,比如主角落地后弹跳,摩擦系数等
rigid的controller 不能被有效的控制,有时候可能会因为物理约束导致不必要的结果
要对物理空间执行查询,必须使用Physics2DDirectSpaceState
或者
发生碰撞时, result 字典包含以下数据:
排除掉对自身的检测
对大型系统来讲,使用碰撞遮罩更好
在 Godot 中接收 Arduino 输入
【中文标题】在 Godot 中接收 Arduino 输入【英文标题】:Receiving Arduino Input in Godot 【发布时间】:2020-01-14 15:41:10 【问题描述】:我对编码非常陌生,我刚刚开始使用 Godot 游戏引擎。我正在尝试让 Godot 中的一个主体从 Arduino 串行接收数字输入。我知道如何在 C++ 和 python 中做到这一点,但以前从未使用过游戏引擎。有人有什么建议吗?
由于我知道如何在 python 中接收输入,我尝试通过 Godot 的 AssetLibrary 安装 python,但文档似乎非常稀缺,所以我不完全确定如何在 Godot 上运行它。如果有人知道如何将 python 集成到 Gdscript 中(即让 Gdscript 调用 python 来读取 Arduino 输出),那就太好了,但是如果有人有一种接收串行输入的通用简单方法,那也很棒。
谢谢!!
【问题讨论】:
【参考方案1】:我自己对此还是有点陌生。我认为有几种方法可以做到这一点。 您需要确切的数字还是我们在谈论大致数字?
如果您使用 Godot 的 C# 版本,您可能会使用 System.IO.Ports.SerialPort
通过串行端口从您的 Arduino 获取输入,但我自己还没有实际测试过。如果我能解决这个问题,我会更新这个答案。
如果串行通信不是绝对必要的,您可以选择使用 Arduino Leonardo 或与 ATmega32u4 兼容。这将允许您通过 USB 发送输入,就好像 Arduino 是键盘、鼠标或操纵杆/游戏手柄一样。
然后您可以使用标准 GDScript 功能来解码传入的数据。例如,您可以决定 F 键是您的数字(F1=1,F2=2 ... F10=0),而 F11 是数字完整的信号。希望这会有所帮助。
【讨论】:
以上是关于Godot 物理引擎 2D的主要内容,如果未能解决你的问题,请参考以下文章