
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.