Skip to content

Latest commit

 

History

History
87 lines (60 loc) · 2.55 KB

File metadata and controls

87 lines (60 loc) · 2.55 KB

Pulse

English

Pulse 是一个面向 C# 与 Unity 的小型实验性 2D 物理引擎,适合需要简单自定义碰撞,而不需要完整拟真模拟的项目。

Pulse 封面

Pulse 能做什么

  • 创建方形与圆形刚体,并保存坐标、速度、质量、层级、触发器和弹性数据。
  • 通过显式固定步长 Tick 应用重力和平动。
  • 检测并处理已经实现的方形与圆形碰撞组合。
  • 提供碰撞与触发器的 Enter、Stay 和 Exit 事件。
  • 物理状态不依赖 Unity Rigidbody2DCollider2D 组件。

安装

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

许可证

MIT