pédia: Raycasting
Raycaster est l'utilisation de tests d'intersection pour résoudre des problèmes dans ROBLOX. L'utilisation la plus courante du raycasting est de déterminer le premier objet traversé par un rayon. Cela se fait en projetant un rayon virtuel à partir d'un certain point dans une direction et en déterminant la première surface avec laquelle il a intersecté.
À la mi-2011, ROBLOX a implémenté la méthode FindPartOnRay, qui trouve la première partie avec laquelle un rayon, représenté par un objet Ray, entre en collision lors de la diffusion. Il était déjà possible, en utilisant des algorithmes créés par l'utilisateur, d'implémenter ce comportement, mais de tels algorithmes sont généralement très coûteux en performances. Les algorithmes implémentés à un niveau inférieur (dans ce cas, en C++) sont généralement plus rapides et plus performants que les algorithmes à un niveau supérieur. Même avec la méthode FindPartOnRay, le raycasting est encore suffisamment lent pour être évité lorsqu'il n'est pas nécessaire.
ROBLOX a des valeurs Ray, qui sont utilisées par le moteur pour représenter l'origine et la direction des rayons. Ces rayons peuvent être créés avec la fonction Ray.new :
Ray.new(origine, direction)
Paramètres de la méthode FindPartOnRayParamètre | Type | Détails |
---|---|---|
rayon | rayon | La valeur du rayon qui représente l'origine et la direction dans laquelle le rayon doit être projeté. |
ignoreDescendantsInstance | Instance | Un objet dont les descendants seront ignorés par le rayon. |
terrainCellsAreCubes | booléen | Si ce paramètre est défini sur true, la forme des cellules de terrain sera ignorée et elles seront considérées comme des cubes. |
La méthode, qui est une méthode de l'espace de travail, renvoie deux valeurs : la partie touchée par le rayon, s'il en a touché une, et le point auquel la partie a été touchée.
Il existe également une autre méthode presque identique à la méthode FindPartOnRay, la méthode FindPartOnRayWithIgnoreList, mais avec la différence qu'au lieu d'avoir un paramètre pour ignorer tous les descendants d'un objet, elle ignore tous les descendants des objets d'une table. Cela permet une personnalisation plus poussée des parties qui sont ignorées mais est également plus lente.