Passer au contenu principal

Physique

Introduction

Studio dispose d'un système physique intégré destiné à gérer des interactions robustes et dynamiques dans votre scène.

Ajout de collisionneurs

remarque
  • Les collisionneurs peuvent être imbriqués dans certaines configurations, mais pas dans d'autres. Par exemple, un collisionneur statique à l'intérieur d'un collisionneur dynamique, ou deux collisionneurs dynamiques imbriqués, pourraient mal se comporter.
  • À moins que vous ne disposiez d'un composant géométrique qui soit également une forme de collision valide, vous devrez spécifier une forme manuellement. Par exemple, il n'existe pas de collisionneur compatible avec la primitive tétraèdre.
  • La génération de collisionneurs de modèles GLTF pour les modèles complexes peut affecter les performances. :: :

physics-component.png

Exemple

L'exemple qui suit montre comment ajouter un collider à une entité au moment de l'exécution.

ecs.Collider.set(world, component.eid, {
shape : ecs.ColliderShape.Sphere,
radius,
mass : 1,
eventOnly : false,
lockXAxis : false,
lockYAxis : false,
lockZAxis : false,
friction : 0.5,
restitution : 0.5,
linearDamping : 0,
angularDamping : 0,
rollingFriction : 0.1,
spinningFriction : 0.1,
})

Fonctions

Vous pouvez appliquer directement des forces (linéaires et angulaires) à n'importe quelle entité dotée d'un collisionneur physique. Ces forces sont appliquées lors de la prochaine mise à jour de la simulation physique, qui a lieu à intervalles réguliers. La fonction accepte un vecteur 3D pour définir la direction et l'ampleur de la force.

Vélocité

Linéaire

ecs.physics.setLinearVelocity(world, component.eid, forceX, forceY, forceZ)

Force et couple

La force

ecs.physics.applyForce(world, component.eid, forceX, forceY, forceZ)

Couple

ecs.physics.applyTorque(world, component.eid, torqueX, torqueY, torqueZ)

Impulsion

conseil

Cette fonction est utilisée pour appliquer une force instantanée unique à un collisionneur physique, modifiant sa vitesse en fonction du vecteur d'impulsion donné. Cette méthode est utile pour les événements qui nécessitent une réaction rapide et unique, comme un saut, un coup de poing ou une poussée soudaine.

ecs.physics.applyImpulse(world, component.eid, impulseX, impulseY, impulseZ)

Gravité

Facteur de gravité

Dans chaque scène, la gravité agit comme une force constante connue sous le nom de "gravité mondiale". Cette force affecte tous les collisionneurs de la scène qui sont définis comme dynamiques. Pour personnaliser l'impact de la gravité mondiale sur un collisionneur donné, nous fournissons un attribut appelé "facteur de gravité".

Définir la gravité du monde

ecs.physics.setWorldGravity(world, gravity)