Pulse 是一个面向 C# 与 Unity 的小型实验性 2D 物理引擎,适合需要简单自定义碰撞,而不需要完整拟真模拟的项目。
- 创建方形与圆形刚体,并保存坐标、速度、质量、层级、触发器和弹性数据。
- 通过显式固定步长 Tick 应用重力和平动。
- 检测并处理已经实现的方形与圆形碰撞组合。
- 提供碰撞与触发器的 Enter、Stay 和 Exit 事件。
- 物理状态不依赖 Unity
Rigidbody2D和Collider2D组件。
Pulse 依赖 Abacus。先添加 Abacus:
https://github.com/onovich/Abacus.git?path=/Assets/com.mortise.abacus#main
然后通过 Window → Package Manager → Add package from git URL 添加 Pulse:
https://github.com/onovich/Pulse.git?path=/Assets/com.mortise.pulse#main
包元数据声明支持 Unity 2019.4 及以上版本。仓库内工程使用 Unity 2022.3.13f1c1。
using MortiseFrame.Abacus;
using MortiseFrame.Pulse;
using UnityEngine;
public sealed class PhysicsSample : MonoBehaviour {
PhysicalCore physicsCore;
void Start() {
physicsCore = new PhysicalCore();
physicsCore.SetGravity(new FVector2(0, -9.8f));
var floor = physicsCore.Rigidbody_CreateBox(
new FVector2(0, -2),
new FVector2(8, 1)
);
floor.SetIsStatic(true);
var box = physicsCore.Rigidbody_CreateBox(
new FVector2(0, 2),
FVector2.one
);
box.SetMass(1);
box.SetRestitution(0.6f);
physicsCore.EventCenter.OnCollisionEnterHandle = (a, b) => {
Debug.Log($"Collision: {a.ID} / {b.ID}");
};
}
void FixedUpdate() {
physicsCore.Tick(Time.fixedDeltaTime);
}
void OnDestroy() {
physicsCore?.Clear();
}
}Pulse 是一个尚未完成的学习与原型库。基础平动、重力、窄相碰撞、碰撞响应和事件已经具备;旋转动力学、宽相加速、连续碰撞检测和部分 OBB 碰撞响应尚未实现。
当前包版本为 0.0.2。它没有经过商业项目验证,在缺少大量项目级测试的情况下,不应替代 Unity Physics 2D 用于正式生产。
运行时代码位于 Assets/com.mortise.pulse/Scripts_Runtime/。项目参考了 FPPhysics2d。
