Ejemplo n.º 1
0
    public override void Setup()
    {
        physXPosition.FromVector(transform.position);
        physXRotation.FromQuaternion(transform.rotation);
        IntPtr physXTransform = PhysXLib.CreateTransform(physXPosition, physXRotation);

        _position = transform.position;
        _rotation = transform.rotation;
        physXBody = PhysXLib.CreateDynamicRigidBody(physXTransform);

        // PhysXLib.RegisterCollisionEnterCallback(ProcessCollisionEnterEvents, physXDynamicRigidBody);
        // PhysXLib.RegisterCollisionStayCallback(ProcessCollisionStayEvents, physXDynamicRigidBody);
        // PhysXLib.RegisterCollisionExitCallback(ProcessCollisionExitEvents, physXDynamicRigidBody);

        PhysXLib.SetRigidBodyFlag(physXBody, PhysXLib.PhysXRigidBodyFlag.eKINEMATIC, kinematic);
        if (kinematic)
        {
            PhysXLib.SetRigidBodyDominanceGroup(physXBody, 1);
        }

        PhysXLib.SetRigidBodyMaxDepenetrationVelocity(physXBody, Physics.defaultMaxDepenetrationVelocity);
        PhysXLib.SetRigidBodyMaxLinearVelocity(physXBody, maxVelocity);

        wheels = new List <PhysXWheelCollider>(GetComponentsInChildren <PhysXWheelCollider>(true));
        PhysXCollider[] colliders = GetComponentsInChildren <PhysXCollider>(true);

        if (wheels.Count > 0)
        {
            vehicleId = currentVehicleId;
            currentVehicleId++;
        }

        foreach (PhysXCollider collider in colliders)
        {
            collider.Setup(this, vehicleId);
        }
        //Debug.Log(vehicleId);

        PhysXLib.SetRigidBodyMassAndInertia(physXBody, mass, new PhysXVec3(Vector3.zero));
        PhysXLib.SetRigidBodyDamping(physXBody, linearDamping, angularDamping);
    }