예제 #1
0
    private void OnDestroy()
    {
        if (buoyancy != null)
        {
            buoyancy.Dispose();
            buoyancy = null;
        }

        if (sailboat != null)
        {
            sailboat.Dispose();
        }

        if (sail != null)
        {
            sail.Dispose();
            sail = null;
        }

        if (PhysicsEngineWindSpeed != null)
        {
            PhysicsEngineWindSpeed.Dispose();
        }

        if (registry != null)
        {
            registry.Dispose();
        }
    }
예제 #2
0
    private void Start()
    {
        sail = new PhysicsEngineForFun.AeroForceOnRigidBody(
            new PhysicsEngineForFun.Matrix3(0, 0, 0, 0, 0, 0, 0, 0, -1.0f),
            new PhysicsEngineForFun.Vector3(2.0f, 0, 0),
            PhysicsEngineWindSpeed);

        buoyancy = new PhysicsEngineForFun.BuoyancyOnRigidBody(
            new PhysicsEngineForFun.Vector3(0.0f, 0.5f, 0.0f),
            1.0f, 3.0f, 1.6f);

        sailboat.position    = new PhysicsEngineForFun.Vector3(0, 1.6f, 0);
        sailboat.orientation = new PhysicsEngineForFun.Quaternion(1, 0, 0, 0);
        sailboat.velocity    = new PhysicsEngineForFun.Vector3(0, 0, 0);
        sailboat.rotation    = new PhysicsEngineForFun.Vector3(0, 0, 0);
        sailboat.SetMass(200f);

        PhysicsEngineForFun.Matrix3 i = new PhysicsEngineForFun.Matrix3();
        i.SetBlockInertiaTensor(new PhysicsEngineForFun.Vector3(2, 2, 2), 100f);
        sailboat.SetInertiaTensor(i);

        sailboat.linearDamping = sailboat.angularDamping = 0.8f;
        sailboat.acceleration  = new PhysicsEngineForFun.Vector3(0, -9.8f, 0);
        sailboat.CalculateDerivedData();

        registry.Add(sailboat, sail);
        registry.Add(sailboat, buoyancy);

        Vector3 pos = transform.position = sailboat.position.GetUnityEngineVector3();

        transform.localEulerAngles = sailboat.rotation.GetUnityEngineVector3();

        Vector3 forward = pos - Camera.main.transform.position;

        forward.Normalize();
        if (forward == Vector3.zero)
        {
            return;
        }
        Camera.main.transform.rotation = Quaternion.LookRotation(forward);
    }