コード例 #1
0
ファイル: CollisionManager.cs プロジェクト: lanicon/Flowmo
    private void CollisionResolutionSphere(SphereCollider sp1, SphereCollider sp2, float overlapDistance)
    {
        Vector3 dir = sp2._center - sp1._center;

        dir.Normalize();

        Vector3 currPoint = sp1._center + dir * sp1.Radius;
        Vector3 displace  = dir * overlapDistance;
        Vector3 projPoint = currPoint - displace;

        if (!sp1.IsStatic() && !sp2.IsStatic())
        {
            this.SeparateParticleObjects(sp1.GetParticleObject(), currPoint, projPoint, sp2.GetParticleObject());
        }
        else
        {
            if (!sp1.IsStatic())
            {
                this.SeparateParticleObjects(sp1.GetParticleObject(), currPoint, projPoint);
            }
            else if (!sp2.IsStatic())
            {
                this.SeparateParticleObjects(sp2.GetParticleObject(), projPoint, currPoint);
            }
        }
    }
コード例 #2
0
ファイル: CollisionManager.cs プロジェクト: lanicon/Flowmo
    public void CollisionResolutionObbSphere(ColliderBox b, SphereCollider s, bool sphereInsideObb)
    {
        Vector3 temp    = this.currentClosestPointOnObb - s._center;
        float   dirMult = sphereInsideObb ? -1 : 1;
        Vector3 dir     = temp.normalized * dirMult;

        Vector3 currPoint = s._center + dir * s.Radius;
        Vector3 projPoint = this.currentClosestPointOnObb;

        if (!b.IsStatic() && !s.IsStatic())
        {
            this.SeparateParticleObjects(s.GetParticleObject(), currPoint, projPoint, b.GetParticleObject());
        }
        else
        {
            if (!s.IsStatic())
            {
                this.SeparateParticleObjects(s.GetParticleObject(), currPoint, projPoint);
            }
            else if (!b.IsStatic())
            {
                this.SeparateParticleObjects(b.GetParticleObject(), projPoint, currPoint);
            }
        }
    }