Partager via


Guide du programmeur de physique mesh

Conseils généraux

Vous pouvez commencer par analyser les documents de physique Unity. Il existe de nombreuses ressources disponibles sur la façon d’optimiser la physique dans Unity.

Mesh Physics est fourni avec quelques défis supplémentaires. Voici quelques conseils pour aider à les surmonter.

  • Faire des murs épais : la synchronisation réseau peut déplacer légèrement des corps rigides. Par conséquent, vous verrez une pénétration supplémentaire entre les objets. Les petits corps dynamiques peuvent être poussés à travers des murs minces. Pour les objets et les murs plus épais, ces effets de tunneling sont moins probables. Si possible, utilisez la coque convex ou un petit ensemble de coques convex pour les corps dynamiques.

  • Dans la mesure du possible, utilisez des morceaux convex épais pour la géométrie statique. Essayez d’éviter les maillages, en particulier les maillages très denses.

  • Masses réalistes en kg : le contenu provenant de différentes sources peut interagir dans la même scène. Cela fonctionne bien si les ratios de masse entre les objets sont raisonnables. Un bon point de départ consiste à affecter des masses réalistes aux corps à l’aide de kg.

Développement d’un contenu de physique de maillage amélioré

Animations de lecture automatique

Vous pouvez ajouter des animations de lecture automatique à la scène qui interagissent avec les corps physiques. Ces animations sont automatiquement synchronisées entre les clients en ajustant temporairement leur vitesse de lecture (les ralentissant ou les accélérant) sur chaque client jusqu’à ce que tous les clients soient dans le même état d’animation en même temps.

Paramètres

  • Lecture activée automatiquement .
  • Animer la physique recommandée (mais pas obligatoire) si l’animation affecte les collisionneurs qui interagissent avec les corps physiques.
  • Type de culling défini sur « Always Animate » (appliqué automatiquement par mesh Physics) car l’animation peut affecter les corps physiques même lorsqu’ils sont hors écran.

Capture d’écran des paramètres du composant Animation dans l’inspecteur.

Le clip d’animation utilisé par l’animation de lecture automatique peut utiliser n’importe quel mode wrap. Les choix utiles sont « Boucle » et « Ping Pong ».

Capture d’écran des paramètres de ressource Clip d’animation dans l’inspecteur.

Composants

L’ajout de l’un des composants suivants MonoBehaviour à un objet ajoute le comportement spécifique à cet objet.

Corps collant

Rend les corps collés à d’autres corps. Il peut être utilisé pour lever des fléchettes à d’autres corps ou attacher une image sur un mur. Cela est implémenté en créant une contrainte fixe entre les deux corps impliqués. Remarque : cette opération est effectuée sur tous les clients et est donc implémentée en tant que message réseau spécial.

Capture d’écran des options de script Sticky Body dans l’inspecteur.

Paramètres

  • Stick : définit si le corps est collé à des corps dynamiques ou/et statiques.
  • Quand : Parfois, vous voulez coller un corps rapide quand il touche simplement un autre corps, et parfois vous voulez coller un corps lorsqu’il est maintenu contre un autre corps pendant un certain temps, comme attendre que la colle se renforce quand vous collez un bouton sur un mur.
  • Contrôle de collision Pour désactiver des collisions spécifiques entre un corps et un autre. Normalement, vous pouvez/devez utiliser des couches de collision. Toutefois, étant donné qu’il n’existe que 32 couches de collision codées en dur dans Microsoft Mesh, cela peut ne pas être une option. Ici, vous pouvez désactiver des corps spécifiques.
  • Corps affectés pour le filtre corps de collision appliqué pour le contrôle de collision.

Champ contenant-contenu

Garantit que les corps rigides restent dans les limites d’un ou plusieurs collisionneurs déclencheurs.

Capture d’écran des options de script de champ contenant-contenu dans l’inspecteur.

Pour que ce composant fonctionne, il doit être attaché à un ou plusieurs collisionneurs de déclencheurs. (Ces collisionneurs de déclencheurs peuvent également être imbriqués dans la hiérarchie de transformation sous le GameObject composant attaché à ce composant.)

Les corps rigides affectés par ce composant doivent déjà se trouver dans les limites de ses collisionneurs de déclencheurs (le « volume du déclencheur ») au démarrage de la scène. Le centre de masse de chacun de ces corps rigides sera alors contraint de rester dans les limites du volume du déclencheur , il ne sera pas possible d’extraire ou de déplacer autrement les centres de masse de ces corps rigides n’importe où à l’extérieur.

Paramètres:

  • L’écart maximal de l’endiguement permet au centre de masse d’un corps rigide affecté d’aller légèrement en dehors des volumes du déclencheur avant qu’il ne s’aligne. Il s’agit d’un compromis d’optimisation des performances : si l’écart maximal autorisé est grand, le corps peut laisser visiblement le volume du déclencheur et s’aligner, mais le code peut éviter d’avoir à vérifier et à vérifier la position du corps très souvent lorsqu’il repose ou se déplace lentement à l’intérieur du volume du déclencheur.

  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps affectés par ce composant. (Par défaut, tous les corps sont affectés.)

Champ vecteur de vélocité

Permet d’accélérer/décélérer un corps rigide jusqu’à atteindre une vitesse cible spécifique.

Capture d’écran des options de script Champ de vitesse directionnelle dans l’inspecteur.

Ce composant contrôle à la fois l’ampleur et la direction de la vitesse. Consultez le champ de magnitude de vitesse pour contrôler uniquement la magnitude et le champ de direction de la vitesse pour contrôler uniquement la direction. Il existe deux modes d’opération :

  • S’il est attaché à un corps rigide, ce corps rigide sera contrôlé.
  • S’il est attaché à un collisionneur de déclencheurs, tous les corps rigides entrant dans ce volume de déclencheurs seront affectés.

Paramètres:

  • Le type de vitesse définit si nous travaillons sur la vitesse linéaire ou angulaire.
  • La direction dans l’espace local définit si la vitesse cible est spécifiée dans l’espace local de l’objet auquel le composant est attaché.
  • La vitesse cible définit le vecteur de vitesse souhaité en mètres/secondes (ou radians/seconde en cas de vitesse angulaire).
  • L’accélération maximale définit l’accélération maximale appliquée pour atteindre la vitesse cible.
  • Le type d’accélération définit un type d’accélération pour atteindre une vitesse cible.
    • Instantané atteint immédiatement la vitesse cible (identique à l’accélération constante avec Accélération maximale = Infini).
    • L’accélération constante garantit que le corps atteint la vitesse cible, quelle que soit la limite du paramètre Accélération maximale.
    • L’approche lisse réduit l’accélération plus vous approchez de la vitesse cible. Cela signifie que, dans la pratique, vous n’atteindrez jamais la vitesse cible. En outre, s’il y a une influence externe, comme monter ou descendre, cette influence supplémentaire ne sera pas complètement substituée, ce qui entraîne une descente plus rapide que la descente.
  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps affectés par ce composant. (Par défaut, tous les corps sont affectés.)

Champ de gravité mis à l’échelle

Change la façon dont la gravité affecte les corps rigides dans les limites d’un ou plusieurs collisionneurs déclencheurs.

Capture d’écran des options de script Antigravity Field dans l’inspecteur.

Pour que ce composant fonctionne, il doit être attaché à un ou plusieurs collisionneurs de déclencheurs. (Ces collisionneurs de déclencheurs peuvent également être imbriqués dans la hiérarchie de transformation en dessous du GameObject auquel ce composant est attaché.)

Les corps rigides qui touchent ou chevauchent les collisionneurs de déclencheurs (le « volume de déclencheur ») se comportent en fonction des paramètres de gravité de ce composant plutôt que de la gravité physique globale. Les corps rigides dont la gravité est désactivée sont ignorés.

Il existe une relation intéressante entre la perception de la taille du joueur dans le monde et la gravité :

  • Si la gravité est inférieure à ce que nous sommes habitués à (les objets sont plus lents quand ils tombent), le joueur se perçoit comme un géant.
  • Si la gravité est supérieure à ce que nous sommes habitués à (les objets sont plus rapides lorsqu’ils tombent), le joueur se considère comme plus petit , comme une souris.

Paramètres:

  • La présélection de gravité permet la sélection de plusieurs présélections intéressantes et utiles pour la propriété d’échelle de gravité : différents corps célestes (Lune, Mars, Terre, Jupiter), aucune gravité (Espace externe) ou gravité inversée (à l’envers). Vous pouvez toujours remplacer l’échelle de gravité avec n’importe quelle valeur que vous aimez.
  • L’échelle de gravité définit la gravité locale à l’intérieur du volume du déclencheur par rapport à la gravité physique par défaut affectant la scène. L’échelle de gravité par défaut de 1 laisse la gravité non affectée ; les valeurs plus grandes augmentent la gravité ; 0 supprime la gravité ; les valeurs négatives changent la direction de la gravité.
  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps affectés par ce composant. (Par défaut, tous les corps sont affectés.)

Champ de gravité orbitale

Simule la gravité d’une « planète toy » dans votre scène.

Capture d’écran des options de script De champ gravité dans l’inspecteur.

Pour que ce composant fonctionne, il doit être attaché à un ou plusieurs collisionneurs de déclencheurs. (Ces collisionneurs de déclencheurs peuvent également être imbriqués dans la hiérarchie de transformation en dessous du GameObject auquel ce composant est attaché.)

Tous les corps rigides qui touchent ou chevauchent les collisionneurs de déclencheurs (le « volume du déclencheur ») sont tiré vers la position de l’objet qui a ce composant attaché.

Paramètres:

  • La gravité définit l’ampleur de la gravité. Il s’agit de l’accélération du corps en orbite (la « lune ») vers le corps central à une distance d’un mètre. Étant donné que la vitesse orbitale est sqrt(gravité/rayon), cette valeur décrit la vitesse² d’une lune dans une orbite stable à un rayon d’un mètre.

  • Désactiver la gravité globale désactive le paramètre de gravité physique globale de la scène pour les corps affectés par ce composant. Par défaut, la gravité de la scène mondiale affectera toujours votre planète et ses lunes.

  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps qui peuvent devenir des lunes dans ce champ de gravité.

  • Force Moons On Circular Orbit est une triche qui applique des forces douces pour pousser la lune dans une orbite circulaire. La motivation est qu’il est difficile pour un non-expert de définir la gravité et la vitesse initiale des corps d’une façon d’atteindre une orbite circulaire. En outre, si cette option est activée, toutes les lunes placées à l’intérieur du champ de gravité dans l’éditeur Unity commencent automatiquement à orbiter leur corps central lorsque la scène est chargée.

  • La force de l’orbite forcée met à l’échelle l’accélération appliquée pour forcer la lune sur une orbite circulaire.

  • Définir le rayon forcé où placé fait des lunes placées à l’intérieur du champ de gravité dans l’éditeur Unity adoptent automatiquement leur distance initiale du corps central comme orbite préférée.

  • Set Forced Radius Where Dropped fait des lunes qui sont saisies de manière interactive et déplacées dans le champ de gravité adoptent automatiquement la distance du corps central à laquelle ils ont été abandonnés comme leur orbite préférée.

  • Le rayon de force par défaut définit le rayon par défaut pour la triche ci-dessus utilisée, sauf substitution par l’une des autres options.

Champ de bouée

Simule la flottabilité des corps rigides arbitraires sur l’eau : les corps semblent flotter sur le volume de déclencheur connecté.

Capture d’écran des options de script de champ bouée dans l’inspecteur.

Pour que ce composant fonctionne, il doit être attaché à un ou plusieurs collisionneurs de déclencheurs. (Ces collisionneurs de déclencheurs peuvent également être imbriqués dans la hiérarchie de transformation en dessous du GameObject auquel ce composant est attaché.)

Tous les corps rigides qui touchent ou chevauchent les collisionneurs de déclencheurs (le « volume de déclencheur ») subissent des forces de flottabilité (upthrust) pour les maintenir à l’eau.

Ce composant utilise la forme des collisionneurs du corps rigide pour calculer sa densité (en d’autres termes, volume divisé par masse), flottabilité, glisser et friction.

Collisionneurs de bouée

Avantage : Performances. Le coût de calcul des calculs de bouée s’adapte linéairement au nombre de sommets collider. Les collisionneurs physiques typiques pour les corps, même s’ils sont déjà simplifiés, sont souvent beaucoup plus complexes (en termes de nombre de sommets) que nécessaire pour que la bouée fonctionne assez bien.

Comment utiliser : ajouter un (ou plusieurs) collisionneurs supplémentaires (ils peuvent être désactivés) à un corps. Marquez les colliders comme des coques de bouée explicites en leur attribuant un matériau physique nommé BuoyancyHull (orthographe exacte des questions !) à eux. Les détails de configuration de ce matériau physique n’ont pas d’importance : un matériau physique approprié est fourni avec le package du kit de ressources Mesh. Si un corps a des collisionneurs marqués comme cela, seuls ces colliders sont utilisés pour les calculs de bouée ; tous les autres collisionneurs sont ignorés.

Meilleures pratiques : collisions explicites de coque de bouée à n’importe quel rigidbody qui peut être jeté dans un BouéancyField. Il est préférable (et le plus simple) d’utiliser des collisionneurs de cube, car ils ont les plus rares sommets (huit par collisionneur). La mise en correspondance de la forme visuelle exacte du corps boué n’est généralement pas nécessaire pour un bon résultat ; une approximation très grossière est généralement suffisante.

Paramètres:

  • La densité est la densité du liquide simulé qui « remplit » le volume du déclencheur en kilos par mètre cube. (La valeur par défaut représente la densité approximative de l’eau à température ambiante.)
  • Le type de surface spécifie comment le composant échantillonne la forme de la surface de l’eau pour calculer les forces de flottabilité.
    • Static Flat suppose que la surface de l’eau est parfaitement planaire et ne se déplace jamais de sa position initiale dans la scène. La position et l’orientation de la surface de l’eau sont déterminées une seule fois, lorsque la scène commence. Il s’agit de l’option la plus économique de calcul.
    • Le plat dynamique suppose que la surface de l’eau est parfaitement planaire, mais permet de se déplacer (par exemple, le niveau d’eau peut augmenter ou couler). La position et l’orientation de la surface de l’eau sont déterminées une fois par cadre.
    • Dynamic Flat Per Body prend en charge une surface d’eau qui n’est pas planaire (par exemple, elle peut être ondulée). Pour chaque corps rigide flottant sur la surface de l’eau, une approximation planaire locale de la surface de l’eau sous le corps rigide est déterminée une fois par cadre, qui est ensuite utilisée pour calculer les forces de flottabilité pour ce corps rigide.
  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps qui peuvent flotter dans ce champ de bouée. (Par défaut, tous les corps sont éligibles.)
  • Faire glisser contrôle la résistance des mouvements à mesure que le corps rigide frappe l’eau (en d’autres termes, friction orthogonale à la surface du corps).
  • La friction de la peau contrôle la résistance des mouvements , car le corps rigide est déplacé à travers l’eau (en d’autres termes, frottement parallèle à la surface du corps).

Important ! Pour permettre au composant d’accéder à des triangles de maillage de collisionneur rigide, la case à cocher « En lecture/écriture activée » doit être cochée dans les paramètres d’importation du maillage de collider. Sinon, le corps sera ignoré par le champ de flottabilité et tombera dans le champ sans être affecté par elle.

Important ! Assurez-vous que vos corps physiques ont des masses plausibles pour s’assurer qu’ils se comportent comme prévu dans un champ de bouée :

  • Si la masse d’un corps rigide est invraisembliblement élevée par rapport à son volume, elle s’enfonce vers le bas.
  • Si la masse d’un corps rigide est invraisemblablement faible par rapport à son volume (par exemple, la valeur par défaut de Unity d’une unité de masse), elle s’asseoira Rigidbody simplement sur le liquide simulé.

Par défaut, le champ de bouée échantillonne la surface du volume du déclencheur pour déterminer la forme de la surface de l’eau (sous réserve du paramètre de type de surface d’eau choisi). Les surfaces animées en mémoire processeur peuvent être échantillonné de cette façon, mais les surfaces animées par un nuanceur de vertex GPU ne sont pas visibles par le script au moment de l’exécution. Le BuoyancyField composant fournit un délégué de rappel accessible par un script nommé GetDistanceFromSurface qui permet aux scripts externes de fournir des informations sur une forme de surface d’eau animée par GPU.

Consultez le BuoyancyFieldWaves composant ci-dessous pour savoir comment obtenir une surface d’eau ondulée avec une approche sans code.

Vagues de champ de bouée

Module complémentaire au composant qui fonctionne avec un nuanceur de vertex spécifique ( BuoyancyFieldWaves_VertexPosition disponible à la BuoyancyField fois en tant que graphique de sous-nuanceur et fichier HLSL include). Cela crée l’effet visuel d’une surface d’eau ondulée avec le comportement correspondant des objets flottants sur la surface de l’eau.

Capture d’écran des options de script Bouéancy Field Waves dans l’inspecteur.

Ce composant doit être ajouté à un GameObject qui a déjà un BuoyancyField composant ajouté à celui-ci.

La surface de l’eau à animer doit être fournie sous la forme d’un maillage plat et pavé dont les limites sont de la forme souhaitée de la surface de l’eau lorsqu’elle est vue du haut vers le bas. Le matériau utilisé pour la surface de l’eau doit utiliser un nuanceur qui incorpore le BuoyancyFieldWaves_VertexPosition sous-nuanceur pour déterminer les positions de vertex du maillage. Vous pouvez utiliser l’exemple BasicWavyWaterSurface de matériau inclus (et le graphique de nuanceur portant le même nom) comme point de départ pour vos propres développements de nuanceur.

Paramètres:

  • Waves Mesh Renderer fait référence au MeshRenderer composant qui restitue le maillage de surface d’eau.
    • Le matériau indique quel matériau est utilisé par le renderer. Il s’agit d’informations uniquement.
    • Le nuanceur indique quel nuanceur est utilisé par le matériau. Il s’agit d’informations uniquement.
  • Waves Shader Property Names définit les noms des propriétés de nuanceur requises qui doivent être exposées par le nuanceur. Ces propriétés sont accessibles par ce composant au moment de l’exécution pour s’assurer que le comportement du champ de bouée reste synchronisé avec les visuels de surface d’eau de tous les clients.
    • Le temps contrôlé par le script est le nom d’une propriété de nuanceur de type exposé floatqui sera continuellement mise à jour par ce composant chaque image avec une durée croissante (mesurée en secondes) qui est synchronisée entre tous les clients. Le BuoyancyFieldWaves_VertexPosition sous-nuanceur utilise ce temps partagé pour créer un modèle d’onde qui reste synchronisé sur tous les clients et synchronisé avec le comportement du champ de bouée.
    • Wave Speed est le nom d’une propriété de nuanceur de type exposé floatqui détermine la vitesse de base à laquelle les ondes se propagent horizontalement. La valeur de propriété elle-même doit être définie dans le matériau appliqué au maillage de surface d’onde. Le fait de définir cette valeur sur zéro rend la surface d’onde devenue statique et inmovible.
    • Wave Length est le nom d’une propriété de nuanceur de type exposé floatqui détermine la grossièreté du modèle d’onde. La valeur de propriété elle-même doit être définie dans le matériau appliqué au maillage de surface d’onde. Des valeurs plus petites produisent des ondes courtes ; de plus grandes valeurs produisent des vagues longues et balayées.
    • Wave Height est le nom d’une propriété de nuanceur de type exposé floatqui détermine la hauteur de base des vagues. La valeur de propriété elle-même doit être définie dans le matériau appliqué au maillage de surface d’onde. La définition de cette valeur sur zéro rend la surface d’onde complètement plate.

L’exemple BasicWavyWaterSurface de graphe de nuanceur inclus (utilisé par le matériau portant le même nom) utilise le sous-nuanceur de vertex requis BuoyancyFieldWaves_VertexPosition pour produire la surface 3D ondulée, mais inclut uniquement une implémentation de stand-in minimale pour le nuanceur de fragments, ce qui le rend rendu de la surface en tant que maillage uni, de couleur simple et semi-transparente.

Capture d’écran du graphe de nuanceur surface wavy de base dans l’éditeur de graphe du nuanceur.

Vous pouvez personnaliser le chemin fragment d’un nuanceur utilisé avec le BuoyancyFieldWaves composant entièrement à votre goût. Toutefois, il est essentiel que le chemin de vertex de votre nuanceur utilise le BuoyancyFieldWaves_VertexPosition graphique de sous-nuanceur et qu’il expose les quatre entrées à ce graphique de sous-nuanceur en tant que floatpropriétés de nuanceur de type du graphique du nuanceur global afin que le composant puisse y accéder au moment de l’exécution. Si votre nuanceur ne parvient pas à inclure le graphique de sous-nuanceur requis ou si l’une des propriétés de nuanceur requises n’est pas exposée, l’inspecteur du composant affiche un message d’erreur au moment du design et la flottabilité échoue au moment de l’exécution :

Capture d’écran des options de script Ondes de champ de bouée montrant le message d’erreur : sous-nuanceur de vertex requis non utilisé.

Capture d’écran des options de script Ondes de champ de bouée montrant le message d’erreur : propriété shader non exposée par matériel.

L’exemple BasicWavyWaterSurface de graphique de nuanceur peut servir de point de départ pendant le développement du contenu et comme point de départ pour vos propres développements de nuanceur. Vous pouvez également prendre un nuanceur de surface d’eau existant, conserver son chemin Fragment et remplacer uniquement son chemin de vertex .

Vitesse Angular maximale

Remplace la vitesse angulaire maximale par défaut d’un corps physique.

Capture d’écran des options de script Max Angular Velocity dans l’inspecteur.

Le moteur physique ne permet pas au rigidebody de dépasser cette vitesse angulaire. Cela peut être utile pour limiter la vitesse de roulement d’un corps rigide donné ou pour lui permettre de rouler plus rapidement que la valeur par défaut de la physique, qui est de 50 radians par seconde (environ 8 révolutions par seconde).

La vitesse angulaire maximale doit être entrée en radians par seconde. La valeur entrée est également affichée en degrés par seconde (180 degrés ≈ 3,14 radians) et révolutions par seconde (1 révolution = 360 degrés ≈ 6,28 radians).

Champ de magnitude de vitesse

Permet l’accélération/décélération d’un corps rigide jusqu’à atteindre une vitesse comprise dans une plage autorisée.

Capture d’écran des options de script De champ de vélocité dans l’inspecteur.

Ce composant contrôle l’ampleur de la vitesse et conserve la direction actuelle. Si l’objet doit être toujours, il choisit une direction aléatoire pour la durée d’une image. Il existe deux modes d’opération :

  • S’il est attaché à un corps rigide, ce corps rigide sera contrôlé.
  • S’il est attaché à un collisionneur de déclencheurs, tous les corps rigides entrant dans ce volume de déclencheurs seront affectés.

Paramètres:

  • Le type de vitesse définit si nous travaillons sur la vitesse linéaire ou angulaire.
  • Les limites de vitesse définissent les limites souhaitées de vitesse minimale et maximale en mètres/secondes (ou radians/seconde en cas de vitesse angulaire). Si la vitesse actuelle est inférieure au minimum, elle accélère, si elle est supérieure à la vitesse maximale que le corps décéléra. Si la vitesse actuelle est déjà dans les limites, le script n’a aucun effet. Pour définir une vitesse cible spécifique, définissez la valeur minimale et maximale sur la même valeur.
  • L’accélération maximale définit l’accélération maximale appliquée pour atteindre la vitesse cible.
  • Le type d’accélération définit un type d’accélération pour atteindre une vitesse cible.
    • Instantané atteint immédiatement la limite de vitesse (identique à l’accélération constante avec Accélération maximale = Infini).
    • L’accélération constante garantit que le corps atteint la vitesse cible, quelle que soit la limite du paramètre Accélération maximale.
    • L’approche lisse réduit l’accélération plus vous approchez de la vitesse cible. Cela signifie que, dans la pratique, vous n’atteindrez jamais la vitesse cible. En outre, s’il y a une influence externe, comme monter ou descendre, cette influence supplémentaire ne sera pas complètement substituée, ce qui entraîne une descente plus rapide que la descente.
  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps affectés par ce composant. (Par défaut, tous les corps sont affectés.)

Aligner le champ

Aligne le corps sur l’axe spécifié.

Capture d’écran des options de script Aligner le champ dans l’inspecteur.

Ce composant ajoute du couple au corps pour l’aligner sur une direction spécifique. Notez que le couple est toujours appliqué dans la direction qui fait pivoter le corps vers la cible. Il existe deux modes d’opération :

  • S’il est attaché à un corps rigide, ce corps rigide sera aligné.
  • S’il est attaché à un collisionneur de déclencheurs, tous les corps rigides entrant dans ce volume de déclencheur sont alignés.

Paramètres:

  • L’axe rigide définit l’axe du corps rigide affecté qui doit être aligné sur la cible.
  • Le mode d’alignement fournit différents modes pour spécifier l’alignement cible :
    • Dans l’espace global pour spécifier l’alignement cible dans l’espace global.
    • Dans l’espace local pour spécifier l’alignement cible dans l’espace local (n’est logique qu’avec le volume du déclencheur).
    • Direction de la vitesse pour aligner le corps sur sa vitesse linéaire.
    • Vers l’objet Game pour aligner le corps vers un objet gameobject cible.
  • L’alignement cible définit la direction cible de l’alignement. (Uniquement quand Le mode d’alignement est défini sur Dans l’espace global ou dans l’espace local.)
  • L’objet jeu cible définit la direction cible de l’alignement. (Uniquement quand Le mode d’alignement est défini sur Vers l’objet Game.)
  • Le multiplicateur de couple met à l’échelle le couple appliqué pour atteindre l’alignement cible ; un multiplicateur plus élevé fait pivoter le corps plus rapidement (entre 1 et 1 000).
  • Le coefficient d’amortissement définit le facteur d’amortissement (compris entre 0 et 5). Lorsqu’il est défini en dessous de 1, le corps peut osciller autour de l’orientation cible.
  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps affectés par ce composant. (Par défaut, tous les corps sont affectés.)

Champ de direction de la vitesse

Permet de diriger un corps rigide jusqu’à ce que la vitesse atteigne une direction cible.

Capture d’écran des options de script de champ de direction de la vitesse dans l’inspecteur.

Ce composant contrôle uniquement la direction de la vitesse et conserve la vitesse actuelle. Il existe deux modes d’opération :

  • S’il est attaché à un corps rigide, ce corps rigide sera contrôlé.
  • S’il est attaché à un collisionneur de déclencheurs, tous les corps rigides entrant dans ce volume de déclencheurs seront affectés.

Paramètres:

  • Le type de vitesse définit si nous travaillons sur la vitesse linéaire ou angulaire.
  • Suivez l’objet Game pour déterminer si la cible est une direction prédéfinie ou une direction vers un GameObject spécifique. Fonctionne uniquement pour la vitesse linéaire.
  • Corps cible (si l’objet Follow Game a la valeur true) : définit la direction de suivi souhaitée.
  • La direction cible définit la direction souhaitée. Cette valeur est normalisée, donc la magnitude n’a aucun effet.
  • La direction dans l’espace local définit si la direction est spécifiée dans une transformation locale de l’explosion.
  • L’accélération maximale définit l’accélération maximale appliquée pour atteindre la vitesse cible.
  • Le type d’accélération définit un type d’accélération pour atteindre une vitesse cible.
    • Instantané atteint immédiatement la direction cible (identique à l’accélération constante avec Accélération maximale = Infini).
    • L’accélération constante garantit que le corps atteint la vitesse cible, quelle que soit la limite du paramètre Accélération maximale.
    • L’approche lisse réduit l’accélération plus vous approchez de la vitesse cible. Cela signifie que, dans la pratique, vous n’atteindrez jamais la vitesse cible. En outre, s’il y a une influence externe telle que monter ou descendre, cette influence supplémentaire ne sera pas complètement substituée, ce qui entraîne une descente plus rapide que la descente.
  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps affectés par ce composant. (Par défaut, tous les corps sont affectés.)

Corps magnétique

Donne au corps une propriété magnétique qui attire ou repousse d’autres corps.

Capture d’écran des options de script corps magnétique dans l’inspecteur.

Pour que ce composant fonctionne, il doit être attaché à un ou plusieurs collisionneurs. (Ces collisionneurs peuvent également être imbriqués dans la hiérarchie de transformation en dessous de ce GameObject composant attaché.) Chaque collider présente une force sur d’autres rigides qui sont assez proches de ce collider.

Paramètres:

  • La force définit l’accélération de l’aimant au point de contact (lorsque la distance entre les colliders est égale à zéro).
  • Distance d’influence contrôle la plage de la force magnétique. La force magnétique est appliquée uniquement si la distance la plus courte entre les colliders est plus petite.
  • Le type de champ définit la façon dont la force magnétique s’affaiblit avec la distance.
    • Constante suppose que la force magnétique est la même indépendamment de la distance.
    • Linéaire suppose que la force magnétique passe linéairement de force à zéro (à la distance de l’influence).
    • Inverse suppose une dépendance proportionnelle inverse à la distance.
    • Inverse Squared suppose une dépendance proportionnelle inverse à la distance carrée (semblable à un aimant réel).
  • Le pôle magnétique contrôle les objets qui sont attirés ou répellés par cet objet.
    • Le pôle Nord attire le pôle Sud et repousse le pôle Nord.
    • Le pôle Sud attire le pôle Nord et repousse le pôle sud.
    • Magnétique attire à la fois le pôle sud et le pôle nord.
  • Désactiver la gravité au contact : si cela est activé, et la force de l’aimant est deux fois plus grande que la gravité, la gravité est désactivée pour les corps qui sont en contact avec cet aimant. L’un des objets doit être statique pour que cela ait un impact. Cela est souvent utilisé pour empêcher le glissement des corps vers le bas d’un mur.

Explosion sphérique

Crée une explosion qui amène tous les corps dans un rayon spécifique à se déplacer vers l’extérieur.

Capture d’écran des options de script d’explosion sphérique dans l’inspecteur.

La force d’explosion dépend de la masse d’un corps rigide (et potentiellement de la distance du centre d’explosion).

Paramètres:

  • La force définit l’effet de l’explosion sur les corps en mètres/seconde. Le changement de vitesse réel est inférieur en fonction du type d’explosion et de la masse critique (voir ci-dessous).
  • Distance d’influence contrôle la plage de la force d’explosion.
  • Le type de champ définit la façon dont l’effet d’explosion affaiblit la distance.
    • Constante suppose que l’effet est indépendant de la distance.
    • La chute linéaire part du principe que l’effet passe de maximum à zéro (à la distance de l’influence).
  • La masse critique définit la masse du corps non affectée par l’explosion. Les corps plus lourds se sentent moins d’effet que les corps plus légers. Par exemple, un corps rigide qui pèse un tiers de la masse critique se sentira deux tiers du changement de vitesse.
  • Angular Impulse Scale définit l’emplacement où la force est appliquée. Si la valeur est définie sur 0, la force est appliquée au centre de la masse, ce qui signifie qu’aucune rotation n’est effectuée. Si la valeur est définie sur 1, la force est appliquée au point le plus proche de l’explosion.
  • Occlusion Si activée, les objets masqués derrière d’autres objets ne sentent pas l’explosion. Un seul rayon entre le centre de l’explosion et le centre de masse est vérifié pour l’occlusion.

Explosion directionnelle

Crée une explosion qui provoque le déplacement de tous les corps au sein d’un déclencheur dans une direction spécifique.

Capture d’écran des options de script Directional Eplosion dans l’inspecteur.

La force d’explosion dépend de la masse d’un corps rigide. Pour que ce composant fonctionne, il doit être attaché à un collisionneur de déclencheurs. Tous les corps au sein de l’collider de déclencheur sont affectés.

Paramètres:

  • La force définit l’effet de l’explosion sur les corps en mètres/seconde. La vitesse réelle change moins en fonction de la masse critique (voir ci-dessous).
  • La direction définit la direction de l’explosion. Cette valeur est normalisée, donc la magnitude n’a aucun effet.
  • La direction dans l’espace local définit si la direction est spécifiée dans une transformation locale de l’explosion.
  • La masse critique définit la masse du corps non affectée par l’explosion. Les corps plus lourds se sentent moins d’effet que les corps plus légers. Par exemple, un corps rigide qui pèse un tiers de la masse critique se sentira deux tiers du changement de vitesse.
  • Angular Impulse Scale définit l’emplacement où la force est appliquée. Si la valeur est définie sur 0, la force est appliquée au centre de la masse, ce qui signifie qu’aucune rotation n’est effectuée. Si la valeur est définie sur 1, la force est appliquée au point le plus proche de l’explosion.
  • Les corps affectés définissent des conditions de filtrage facultatives pour les corps affectés par ce composant. (Par défaut, tous les corps sont affectés.)

Stabilisation conjointe

Stabilise le système de contrainte en ajustant le capteur d’inertie du corps rigide.

Capture d’écran des options de script de stabilisation conjointe dans l’inspecteur.

Le script fonctionne sur tous les enfants avec le composant Rigidbody ou Joint attaché.

Paramètres:

  • Le facteur de stabilisation définit la quantité de sacrifices physiques corrects pour la stabilité. Par exemple, 1 -> principalement la physique correcte, 4 -> compromis, 10 -> stable avec des artefacts.
  • La projection conjointe permet la projection de contraintes sur tous les enfants. Cela peut améliorer considérablement la stabilité, mais sacrifier physiquement la justesse physique. Il fonctionne uniquement sur les jointures configurables et de caractères.
  • La distance de projection définit la violation maximale autorisée des contraintes. Pour éviter les problèmes physiques, essayez de définir cette valeur aussi élevée que possible.

Surface de rebond

Crée une surface de rebond qui provoque le rebondissement de tous les objets en collision avec une vitesse prédéfinie.

Capture d’écran des options de script Surface de rebond dans l’inspecteur.

Paramètres:

  • La magnitude de vitesse de rebond définit la magnitude minimale et maximale de la vitesse de l’objet après le rebond. Consultez l’effet de rebond pour savoir comment la direction est déterminée. Définissez Min et Max sur une valeur égale si vous souhaitez spécifier une vitesse cible unique.
  • L’effet de rebond définit le comportement prévu des objets de rebond.
    • Rebond parfait : l’angle de la vitesse entrante à la normale du plan de collision est identique à l’angle de la vitesse sortante.
    • Définir l’ampleur de la vitesse : l’angle de la vitesse sortante à la normale est affecté par la friction.
    • Définir la vitesse normale : similaire à définir la vitesse de vitesse, mais la magnitude de la vitesse de rebond définit l’ampleur de la vitesse perpendiculaire au plan (vitesse normale).
    • Rebond vers le corps cible : la direction de la vitesse sortante est dirigée vers un corps cible. Si cette option est sélectionnée, la propriété Corps cible s’affiche et doit être définie.
  • Les frictions contrôlent la quantité de vitesse tangentielle perdue lors d’une collision. Lorsqu’il est défini sur 0, l’objet de rebond conserve la vitesse tangentielle. Lorsqu’il est défini sur 1, l’objet rebondit dans la direction perpendiculaire à la surface (la vitesse tangentielle est 0). Pour les valeurs supérieures à 1, l’objet rebondit vers l’arrière.

Centre de décalage de masse

Décalé le centre de masse d’un corps rigide.

Capture d’écran des options de script Centre of Mass Offset dans l’inspecteur.

Paramètres:

  • Le décalage dans les coordonnées locales définit le décalage dans les coordonnées locales.

Étendue physique locale

Toutes lesbodies rigides dans la hiérarchie sous ce composant ne seront pas synchronisées entre les clients. Ce script doit être ajouté à des objets rigides dont les positions ou rotations sont définies par le biais d’un script visuel ou d’une animation.

Capture d’écran des paramètres d’étendue physique locale dans l’inspecteur.

Découvrez les nœuds d’événements physiques mesh Visual Scripting.

Trajectoire de levée

Calcule la position future du corps rigide dans l’espace libre sous l’effet de la gravité.

Capture d’écran des options de script De trajectoire levée dans l’inspecteur.

Paramètres:

  • Mode rigide : lorsqu’il est défini sur true, la position et la vélocité du corps rigide sont prises comme conditions initiales. Active le calcul de position future en temps réel.
  • Rigidbody (s’applique uniquement lorsque le mode Rigidbody est défini sur true.) : définit quel corps rigide est pris.
  • Vitesse initiale : (s’applique uniquement lorsque le mode Rigidbody est défini sur false) : définit la vitesse initiale. La position initiale est prise à partir de la position du GameObject auquel ce composant est attaché.
  • Nombre maximal de points : définit le nombre maximal de points calculés.
  • Étape de temps : définit la différence de temps entre les positions futures.
  • Gravité : Il s’agit de l’accélération gravitationnelle.
  • Renderer de ligne : spécifie le renderer de ligne vers lequel la position des points est copiée. Cela affiche la trajectoire de levée.

Réinitialiser les transformations de corps

Lorsqu’il est déclenché par un script visuel, ce composant réinitialise la position et la rotation de tous les corps physiques sur la même transformation ou toute transformation enfant à leurs valeurs initiales.

Capture d’écran du composant Réinitialiser les transformations du corps dans l’inspecteur.

Paramètres:

  • Enregistrement automatique initial : si cette option est sélectionnée, utilisez les transformations au démarrage de l’environnement en tant que transformations de réinitialisation. Si vous n’êtes pas sélectionné, vous devez utiliser un script visuel pour appeler la fonction Enregistrer les transformations de corps maintenant pour enregistrer les transformations de réinitialisation avant d’effectuer une réinitialisation.

Fonctions disponibles pour les scripts visuels

  • Réinitialiser les transformations de corps maintenant : réinitialise la position et la rotation de tous les corps physiques dans l’étendue de ce composant Reset Body Transforms à leur dernière transformation de réinitialisation enregistrée. Appelez-le uniquement sur un seul client.

Capture d’écran du composant Réinitialiser les transformations du corps en mode Édition avec le bouton Réinitialiser les transformations de corps maintenant uniquement en mode lecture mis en surbrillance.

Capture d’écran du composant Réinitialiser les transformations de corps en mode lecture avec le bouton Réinitialiser la transformation du corps maintenant mis en surbrillance.

  • Enregistrer les transformations de corps enregistre maintenant la position et la rotation actuelles de tous les corps physiques dans l’étendue de ce composant Reset Body Transforms comme transformation de réinitialisation. Appelez-le uniquement sur un seul client.

Étapes suivantes