Difference between revisions of "LlCastRay/ja"

From Second Life Wiki
Jump to navigation Jump to search
m
m
 
(2 intermediate revisions by the same user not shown)
Line 6: Line 6:
|func_energy
|func_energy


|func_desc=Cast a line from {{LSLP|start}} to {{LSLP|end}} and report collision data for intersections with objects.
|func_desc=関数は、指定された開始位置 {{LSLP|start}} から終了位置 {{LSLP|end}} までの線分を投射し、物体のデータを取得します。


|return_type=list
|return_type=list
|return_text=of strided values on a successful hit, with an additional integer [[#status_code|status_code]] at the end.
|return_text=ヒットがあった場合、成功したヒットごとにキー (uuid) と位置 (position) の 2 つの必須の値を含むストライド値のリストが返され、最後に追加の整数の [[#status_code|status_code]] が含まれます。ストライドは、オプションで link_number normal を含むことができます(詳細は[[#RC_DATA_FLAGS|RC_DATA_FLAGS]]を参照)。status_code が負であればエラーコードであり、それ以外の場合はヒット数(およびストライド数)です。
 
Each stride consists of two mandatory values {[[key]] {{LSLP|uuid}}, [[vector]] {{LSLP|position}}} and optionally {[[integer]] {{LSLP|link_number}}, [[vector]] {{LSLP|normal}}}. (See [[#RC_DATA_FLAGS|RC_DATA_FLAGS]] for details.)
 
A negative {{LSLP|status_code}} is an [[#error_code|error code]], otherwise it is the number of hits (and strides) returned.
|func_footnote=
|func_footnote=
Example return of successful raycast, using the default options:
例(デフォルトオプションの成功したレイキャスト):
<syntaxhighlight lang="lsl2">
<syntaxhighlight lang="lsl2">
[key object_uuid, vector hit_position, integer status_code]
[key object_uuid, vector hit_position, integer status_code]
</syntaxhighlight>
</syntaxhighlight>
In the case of an error, or if the ray hits nothing, the resulting list only contains the status code:
エラーまたは何もヒットしなかった場合の例:
<syntaxhighlight lang="lsl2">
<syntaxhighlight lang="lsl2">
[integer status_code]
[integer status_code]
Line 27: Line 23:
|p3_type=list|p3_subtype=instructions|p3_name=options|p3_desc=can consists of any number of [[#options|option flag]]s and their parameters.
|p3_type=list|p3_subtype=instructions|p3_name=options|p3_desc=can consists of any number of [[#options|option flag]]s and their parameters.
|constants
|constants
|caveats=*Depending upon the value of {{LSLP|flags}} (provided via [[#RC_DATA_FLAGS|RC_DATA_FLAGS]]), the number and types of values in the strides will vary. See [[#RC_DATA_FLAGS|RC_DATA_FLAGS]] for details.
|caveats=*{{LSLP|flags}} の値によって([[#RC_DATA_FLAGS|RC_DATA_FLAGS]]を介して提供される)、ストライド内の値の数とタイプが異なります。詳細は[[#RC_DATA_FLAGS|RC_DATA_FLAGS]]を参照してください。
*[[llGetRot]] will not return an avatar's exact visual rotation because the viewer doesn't update the avatar's rotation under a threshold (see {{jira|VWR-1331}}). To get an avatar's exact looking direction while in mouselook, use [[llGetCameraRot]] instead.
*[[llGetRot/ja]] はビューアがしきい値以下でアバターの回転を更新しないため、アバターの正確な視覚的な回転を返しません({{jira|VWR-1331}}を参照)。マウスルック中のアバターの正確な見ている方向を取得するには、代わりに[[llGetCameraRot/ja]]を使用してください。
*[[llCastRay]] will not detect prims having no physics shape ([[PRIM_PHYSICS_SHAPE_TYPE]] = [[PRIM_PHYSICS_SHAPE_NONE]]).
*[[llCastRay/ja]] は物理形状がないプリム([[PRIM_PHYSICS_SHAPE_TYPE]] = [[PRIM_PHYSICS_SHAPE_NONE]])を検出しません。
*[[llCastRay]] will not detect a prim if the line starts inside the prim. This makes it safe to use the prim position as the start location.
*[[llCastRay/ja]] は、レイがプリムの内部で始まる場合、そのプリムを検出しません。これにより、プリムの位置を安全に開始位置として使用できます。
*[[llCastRay]] can detect the prim the script is in, if the start location is outside the prim.
*[[llCastRay/ja]] は、開始位置がプリムの外部にある場合、スクリプトが含まれているプリムを検出できます。
* The result of this function has been noted to be '''unreliable when the end point is out-of-bounds''' (Occasionally returns status code 0 regardless of amount of objects hit). (See [https://community.secondlife.com/forums/topic/486603-llcastray-returning-zero-hits-seemingly-at-random/ this forum post])
この関数の結果は、「エンドポイントが範囲外の場合には信頼性がない」とされています(オブジェクトのヒット数に関係なく、時折ステータスコード0を返すことがあります)。詳細は[https://community.secondlife.com/forums/topic/486603-llcastray-returning-zero-hits-seemingly-at-random/このフォーラム投稿]を参照してください。
|spec=
|spec=
===={{LSL Param|status_code}}====
===={{LSL Param|status_code}}====


{{LSLP|status_code}} is a number tacked onto the end of the strided list to give you extra information about the ray cast.
{{LSLP|status_code}} は、ストライドリストの末尾に追加される数値で、レイキャストに関する追加情報を提供します。


If the cast succeeded, it will be &gt;=0 and will indicate the number of hits.
レイキャストが成功した場合、status_code は0以上になり、ヒット数を示します。


If the ray cast failed (which should only happen right now if the simulator performance is running low), you'll get a negative status code. [[RCERR_SIM_PERF_LOW]] will be used as the status code if the overall physics time in the simulator is too high to perform raycasts. The idea is that you will know to try your cast again in a few frames.
レイキャストが失敗した場合(現時点ではシミュレータのパフォーマンスが低い場合のみ)、status_code は負の値になります。シミュレータ全体の物理時間が高すぎてレイキャストを実行できない場合、RCERR_SIM_PERF_LOW がステータスコードとして使用されます。アイデアは、数フレーム後に再試行する必要があることを知らせることです。


<table class="lltable" border="1" id="error_code">
<table class="lltable" border="1" id="error_code">
Line 49: Line 45:
<th>Description</th>
<th>Description</th>
</tr>
</tr>
<tr><td>{{LSL Const|RCERR_UNKNOWN|integer|-1}}</td><td>{{#var:value}}</td><td>The raycast failed for an unspecified reason. Please submit a bug report.</td></tr>
<tr><td>{{LSL Const|RCERR_UNKNOWN|integer|-1}}</td><td>未指定の理由でレイキャストが失敗しました。バグレポートを提出してください。</td></tr>
<tr><td>{{LSL Const|RCERR_SIM_PERF_LOW|integer|-2}}</td><td>{{#var:value}}</td><td>The raycast failed because simulator performance is low. Wait a while and then try again. If possible reduce the scene complexity.</td></tr>
<tr><td>{{LSL Const|RCERR_SIM_PERF_LOW|integer|-2}}</td><td>シミュレータのパフォーマンスが低いため、レイキャストが失敗しました。しばらく待ってから再試行してください。可能であれば、シーンの複雑さを低減してください。</td></tr>
<tr><td>{{LSL Const|RCERR_CAST_TIME_EXCEEDED|integer|-3}}</td><td>{{#var:value}}</td><td>The raycast failed because the parcel or agent has exceeded the maximum time allowed for raycasting. This resource pool is continually replenished, so waiting a few frames and retrying is likely to succeed.</td></tr>
<tr><td>{{LSL Const|RCERR_CAST_TIME_EXCEEDED|integer|-3}}</td><td>パーセルまたはエージェントがレイキャストに許可された最大時間を超過したため、レイキャストが失敗しました。このリソースプールは常に補充されるため、数フレーム待ってから再試行すると成功する可能性があります。</td></tr>
</table>
</table>


=====[[RCERR_CAST_TIME_EXCEEDED]]=====
=====[[RCERR_CAST_TIME_EXCEEDED]]=====
'''Note:''' [https://jira.secondlife.com/browse/SCR-199 SCR-199] indicates that pools have been removed from the main grid, so this return code should not appear.
'''注意:''' [https://jira.secondlife.com/browse/SCR-199 SCR-199] によれば、プールはメイングリッドから削除されたため、このリターンコードは現れないはずです。


'''Tips for Efficient Raycasts:'''
'''効率的なレイキャストのためのヒント:'''
*Keep the max number of hits returned as small as possible
*Set as many [[RC_REJECT_TYPES]] as possible (of factors you can control, this will likely have the largest impact). For example, if you only want to know where the nearest agent is along a ray, use <code>[[RC_REJECT_LAND]] {{!}} [[RC_REJECT_PHYSICAL]] {{!}} [[RC_REJECT_NONPHYSICAL]]</code>
*When possible, avoid raycasting through piles of prims and avoid raycasting against concave physics objects (anything with cut, hollow, twist, and so on, and any mesh object that has no decomposition and has physics type "prim"). Obviously this can't always be avoided, so some casts may take significantly longer than others. Plan for that with robust scripts that handle [[RCERR_CAST_TIME_EXCEEDED]] responsibly, namely by sleeping briefly after the call and waiting for a few frames to go by before trying again.


*返される最大ヒット数をできるだけ小さく保つ
*制御可能な因子の[[RC_REJECT_TYPES]]をできるだけ設定する(これはおそらく最も影響が大きいでしょう)。たとえば、レイに沿って最も近いエージェントの位置のみを知りたい場合は、<code>[[RC_REJECT_LAND]] {{!}} [[RC_REJECT_PHYSICAL]] {{!}} [[RC_REJECT_NONPHYSICAL]]</code> を使用します。
*可能な限り、プリムの山を通過したり、凹凸のある物理オブジェクトに対してレイキャストを避けるようにします(カット、中空、ねじれなどがあるもの、および分解がなく物理型が「prim」のメッシュオブジェクトなど)。明らかにこれを常に避けることはできませんので、一部のキャストは他のものよりもかなり長くかかるかもしれません。[[RCERR_CAST_TIME_EXCEEDED]] を適切に処理する堅牢なスクリプトを使用して、呼び出しの直後に短時間スリープし、再試行する前に数フレーム待つように計画します。
==== {{LSL Param|options}} parameter ====
==== {{LSL Param|options}} parameter ====


<table class=lltable border=1 id="options">
<table class=lltable border=1 id="options">
<caption>{{LSLP|options}} flags and their parameters</caption>
<caption>{{LSLP|options}} フラグとそのパラメータ</caption>
<tr>
<tr>
<th>Flag</th>
<th>フラグ</th>
<th title='Value'>V</th>
<th title=''>V</th>
<th>Parameters</th>
<th>パラメータ</th>
<th>Default Value</th>
<th>デフォルト値</th>
<th>Description</th>
<th>説明</th>
</tr>
</tr>
<tr><td>[&nbsp;{{LSL Const|RC_REJECT_TYPES|integer|0}}&nbsp;] </td>
<tr><td>[&nbsp;{{LSL Const|RC_REJECT_TYPES|integer|0}}&nbsp;] </td>
Line 77: Line 73:
<td>[&nbsp;[[integer]]&nbsp;{{LSLPT|filter}}&nbsp;]</td>
<td>[&nbsp;[[integer]]&nbsp;{{LSLPT|filter}}&nbsp;]</td>
<td>[ 0 ]</td>
<td>[ 0 ]</td>
<td> Mask used to ignore specific types of objects (and avatars). </td>
<td> 特定の種類のオブジェクト(およびアバター)を無視するためのマスク。 </td>
</tr>
</tr>
<tr><td>[&nbsp;{{LSL Const|RC_DATA_FLAGS|integer|2}}&nbsp;] </td>
<tr><td>[&nbsp;{{LSL Const|RC_DATA_FLAGS|integer|2}}&nbsp;] </td>
Line 83: Line 79:
<td>[&nbsp;[[integer]]&nbsp;{{LSLPT|flags}}&nbsp;]</td>
<td>[&nbsp;[[integer]]&nbsp;{{LSLPT|flags}}&nbsp;]</td>
<td>[ 0 ]</td>
<td>[ 0 ]</td>
<td> Described in the [[#RC_DATA_FLAGS|RC_DATA_FLAGS]] section. </td>
<td> [[#RC_DATA_FLAGS|RC_DATA_FLAGS]] セクションで説明されています。 </td>
</tr>
</tr>
<tr><td>[&nbsp;{{LSL Const|RC_MAX_HITS|integer|3}}&nbsp;] </td>
<tr><td>[&nbsp;{{LSL Const|RC_MAX_HITS|integer|3}}&nbsp;] </td>
Line 89: Line 85:
<td>[&nbsp;[[integer]]&nbsp;{{LSLPT|max_hits}}&nbsp;]</td>
<td>[&nbsp;[[integer]]&nbsp;{{LSLPT|max_hits}}&nbsp;]</td>
<td>[ 1 ]</td>
<td>[ 1 ]</td>
<td> Maximum number of hits to return. Maximum value is 256. ''To avoid performance issues, keep it small.''</td>
<td> 返す最大ヒット数。最大値は 256。''パフォーマンスの問題を避けるため、小さく保つことが推奨されます。''</td>
</tr>
</tr>
<tr><td>[&nbsp;{{LSL Const|RC_DETECT_PHANTOM|integer|1}}&nbsp;] </td>
<tr><td>[&nbsp;{{LSL Const|RC_DETECT_PHANTOM|integer|1}}&nbsp;] </td>
Line 95: Line 91:
<td>[&nbsp;[[integer]]&nbsp;{{LSLPT|detect_phantom}}&nbsp;]</td>
<td>[&nbsp;[[integer]]&nbsp;{{LSLPT|detect_phantom}}&nbsp;]</td>
<td>[ [[FALSE]] ]</td>
<td>[ [[FALSE]] ]</td>
<td>Set to [[TRUE]] (or nonzero) to detect phantom AND volume detect objects. It is not possible to detect only phantom objects or only volume detect objects. If set to [[TRUE]], phantom and volume detect objects will always be detected, even if [[RC_REJECT_NONPHYSICAL]] and [[RC_REJECT_PHYSICAL]] are set in [[RC_REJECT_TYPES]].</td>
<td>[[TRUE]](または非ゼロ)に設定すると、ファントムおよびボリューム検出オブジェクトが検出されます。ファントムオブジェクトだけまたはボリューム検出オブジェクトだけを検出することはできません。[[TRUE]]に設定すると、[[RC_REJECT_NONPHYSICAL]][[RC_REJECT_PHYSICAL]][[RC_REJECT_TYPES]]で設定されていても、常にファントムおよびボリューム検出オブジェクトが検出されます。</td>
</tr>
</tr>
</table>
</table>
Line 110: Line 106:
<th>Description</th>
<th>Description</th>
</tr>
</tr>
<tr><td>{{LSL Const|RC_REJECT_AGENTS|integer|1}}</td><td>{{#var:value}}</td><td>Avatars won't be detected.</td></tr>
<tr><td>{{LSL Const|RC_REJECT_AGENTS|integer|1}}</td><td>アバターは検出されません。</td></tr>
<tr><td>{{LSL Const|RC_REJECT_PHYSICAL|integer|2}}</td><td>{{#var:value}}</td><td>[https://wiki.secondlife.com/wiki/Physical Physical] objects won't be detected.</td></tr>
<tr><td>{{LSL Const|RC_REJECT_PHYSICAL|integer|2}}</td><td>[https://wiki.secondlife.com/wiki/Physical Physical] オブジェクトは検出されません。</td></tr>
<tr><td>{{LSL Const|RC_REJECT_NONPHYSICAL|integer|4}}</td><td>{{#var:value}}</td><td>The opposite of the above flag. Objects without physics won't be detected. For phantom objects, see [[RC_DETECT_PHANTOM]].</td></tr>
<tr><td>{{LSL Const|RC_REJECT_NONPHYSICAL|integer|4}}</td><td>上記フラグの反対です。物理がないオブジェクトは検出されません。ファントムオブジェクトについては[[RC_DETECT_PHANTOM]]を参照してください。</td></tr>
<tr><td>{{LSL Const|RC_REJECT_LAND|integer|8}}</td><td>{{#var:value}}</td><td>Land won't be detected. This refers to actual [https://wiki.secondlife.com/wiki/LlGround ground] only.</td></tr>
<tr><td>{{LSL Const|RC_REJECT_LAND|integer|8}}</td><td>ランドは検出されません。これは実際の[https://wiki.secondlife.com/wiki/LlGround ground]にのみ言及します。</td></tr>
</table>
</table>


Line 131: Line 127:
<th>Description</th>
<th>Description</th>
</tr>
</tr>
<tr><td>{{LSL Const|RC_GET_NORMAL|integer|1}}</td><td>{{#var:value}}</td><td>Stride includes the surface normal that was hit.</td></tr>
<tr><td>{{LSL Const|RC_GET_NORMAL|integer|1}}</td><td>ストライドにはヒットした表面の法線が含まれます。</td></tr>
<tr><td>{{LSL Const|RC_GET_ROOT_KEY|integer|2}}</td><td>{{#var:value}}</td><td>The hit {{LSLP|uuid}} will be replaced by the object's root instead of any child.</td></tr>
<tr><td>{{LSL Const|RC_GET_ROOT_KEY|integer|2}}</td><td>ヒットした{{LSLP|uuid}}は、子の代わりにオブジェクトのルートに置き換えられます。</td></tr>
<tr><td>{{LSL Const|RC_GET_LINK_NUM|integer|4}}</td><td>{{#var:value}}</td><td>Stride includes the link number that was hit.</td></tr>
<tr><td>{{LSL Const|RC_GET_LINK_NUM|integer|4}}</td><td>ストライドにはヒットしたリンク番号が含まれます。</td></tr>
</table>
</table>


Line 232: Line 228:
To quickly get the status code use <code>[[llList2Integer]](result, -1)</code>.
To quickly get the status code use <code>[[llList2Integer]](result, -1)</code>.


'''Ideas for uses''':
'''使い方のアイデア''':


* '''Weapons''' - Raycasts are the traditional tool used in game development for simulating projectile weapons. They are orders of magnitude more efficient than rezzing a prim and launching it from a weapon.
*'''武器''' - レイキャストは、プロジェクタイル武器をシミュレートするためのゲーム開発で伝統的に使用されるツールです。これは、プリムをレザリングして武器から発射するよりもはるかに効率的です。
* '''AI Objects''' - Line-of-sight detection of avatars and other objects, or for navigating an environment by tracing rays about themselves. For example; casting rays directly downwards to determine the height and angle (normal) of the current floor surface, useful for non-physical object movement.
*'''AIオブジェクト''' - アバターや他のオブジェクトの視線検出、または自分自身を中心にレイを追跡して環境を移動するためのツールとして使用されます。例えば、現在の床の表面の高さと角度(法線)を判定するために、直接下向きにレイをキャストして、非物理的なオブジェクトの移動に役立ちます。
* '''Intelligent Object Placement''' - Static objects can be placed in-scene, but adjust themselves to their environment. For example; an object rezzed too high up may adjust its height to floor-level, or a computer console placed low down may cause an avatar to kneel to use it rather than standing.
*'''インテリジェントなオブジェクト配置''' - 静的なオブジェクトはシーンに配置されますが、環境に合わせて自己調整します。例えば、高い位置にレザリングされたオブジェクトは、その高さを床のレベルに調整したり、低い位置に配置されたコンピュータコンソールは、立ってではなく膝をついて使用するようにアバターに影響を与えたりします。
* '''Environment Analysis''' - Can be used to determine the limitations of a surrounding area, such as determining if an object has been placed within a closed room. Not a test to be performed frequently due to quantity of rays required, but could be used by objects to switch off effects if unobserved (no-one within the room). Auto-adjusting furniture or objects to snap to walls, floors, and ceilings.
*'''環境分析''' - 周囲のエリアの制限を判定するために使用できます。例えば、オブジェクトが閉じられた部屋内に配置されているかどうかを判定することができます。頻繁に実行するべきではないテストですが、部屋内に誰もいない場合は効果をオフにするためにオブジェクトによって使用されたりします。家具やオブジェクトを自動調整して壁、床、天井にスナップすることがあります。
|cat1=Physics
|cat1=Physics
|cat2=Light
|cat2=Light

Latest revision as of 10:32, 22 November 2023

要約

関数: list llCastRay( vector start, vector end, list options );

関数は、指定された開始位置 start から終了位置 end までの線分を投射し、物体のデータを取得します。
ヒットがあった場合、成功したヒットごとにキー (uuid) と位置 (position) の 2 つの必須の値を含むストライド値のリストが返され、最後に追加の整数の status_code が含まれます。ストライドは、オプションで link_number と normal を含むことができます(詳細はRC_DATA_FLAGSを参照)。status_code が負であればエラーコードであり、それ以外の場合はヒット数(およびストライド数)です。を list で返します。

• vector start starting location
• vector end ending location
• list options can consists of any number of option flags and their parameters.

例(デフォルトオプションの成功したレイキャスト):

[key object_uuid, vector hit_position, integer status_code]

エラーまたは何もヒットしなかった場合の例:

[integer status_code]

仕様

status_code

status_code は、ストライドリストの末尾に追加される数値で、レイキャストに関する追加情報を提供します。

レイキャストが成功した場合、status_code は0以上になり、ヒット数を示します。

レイキャストが失敗した場合(現時点ではシミュレータのパフォーマンスが低い場合のみ)、status_code は負の値になります。シミュレータ全体の物理時間が高すぎてレイキャストを実行できない場合、RCERR_SIM_PERF_LOW がステータスコードとして使用されます。アイデアは、数フレーム後に再試行する必要があることを知らせることです。

status_code error codes and their meanings.
Status Code V Description
RCERR_UNKNOWN未指定の理由でレイキャストが失敗しました。バグレポートを提出してください。
RCERR_SIM_PERF_LOWシミュレータのパフォーマンスが低いため、レイキャストが失敗しました。しばらく待ってから再試行してください。可能であれば、シーンの複雑さを低減してください。
RCERR_CAST_TIME_EXCEEDEDパーセルまたはエージェントがレイキャストに許可された最大時間を超過したため、レイキャストが失敗しました。このリソースプールは常に補充されるため、数フレーム待ってから再試行すると成功する可能性があります。
RCERR_CAST_TIME_EXCEEDED

注意: SCR-199 によれば、プールはメイングリッドから削除されたため、このリターンコードは現れないはずです。

効率的なレイキャストのためのヒント:

  • 返される最大ヒット数をできるだけ小さく保つ
  • 制御可能な因子のRC_REJECT_TYPESをできるだけ設定する(これはおそらく最も影響が大きいでしょう)。たとえば、レイに沿って最も近いエージェントの位置のみを知りたい場合は、RC_REJECT_LAND | RC_REJECT_PHYSICAL | RC_REJECT_NONPHYSICAL を使用します。
  • 可能な限り、プリムの山を通過したり、凹凸のある物理オブジェクトに対してレイキャストを避けるようにします(カット、中空、ねじれなどがあるもの、および分解がなく物理型が「prim」のメッシュオブジェクトなど)。明らかにこれを常に避けることはできませんので、一部のキャストは他のものよりもかなり長くかかるかもしれません。RCERR_CAST_TIME_EXCEEDED を適切に処理する堅牢なスクリプトを使用して、呼び出しの直後に短時間スリープし、再試行する前に数フレーム待つように計画します。

options parameter

options フラグとそのパラメータ
フラグ V パラメータ デフォルト値 説明
RC_REJECT_TYPES ] 0 integer filter ] [ 0 ] 特定の種類のオブジェクト(およびアバター)を無視するためのマスク。
RC_DATA_FLAGS ] 2 integer flags ] [ 0 ] RC_DATA_FLAGS セクションで説明されています。
RC_MAX_HITS ] 3 integer max_hits ] [ 1 ] 返す最大ヒット数。最大値は 256。パフォーマンスの問題を避けるため、小さく保つことが推奨されます。
RC_DETECT_PHANTOM ] 1 integer detect_phantom ] [ FALSE ] TRUE(または非ゼロ)に設定すると、ファントムおよびボリューム検出オブジェクトが検出されます。ファントムオブジェクトだけまたはボリューム検出オブジェクトだけを検出することはできません。TRUEに設定すると、RC_REJECT_NONPHYSICALRC_REJECT_PHYSICALRC_REJECT_TYPESで設定されていても、常にファントムおよびボリューム検出オブジェクトが検出されます。
RC_REJECT_TYPES

filter is a bitwise-or combination of the following constants: RC_REJECT_AGENTS, RC_REJECT_PHYSICAL, RC_REJECT_NONPHYSICAL, and RC_REJECT_LAND.

RC_REJECT_TYPES and their meanings.
Reject Type V Description
RC_REJECT_AGENTSアバターは検出されません。
RC_REJECT_PHYSICALPhysical オブジェクトは検出されません。
RC_REJECT_NONPHYSICAL上記フラグの反対です。物理がないオブジェクトは検出されません。ファントムオブジェクトについてはRC_DETECT_PHANTOMを参照してください。
RC_REJECT_LANDランドは検出されません。これは実際のgroundにのみ言及します。

If you reject everything, a script runtime error will be generated (as it makes no sense to do this). Using 0 as the filter value will accept all types (default).

Also note that seated agents are treated like unseated agents. As in, you either get seated and unseated agents in your results, or you use RC_REJECT_AGENTS and get neither.

RC_DATA_FLAGS

flags is a bitwise-or combination of: RC_GET_NORMAL, RC_GET_ROOT_KEY, and RC_GET_LINK_NUM.

RC_DATA_FLAGS and their meanings.
Data Flag V Description
RC_GET_NORMALストライドにはヒットした表面の法線が含まれます。
RC_GET_ROOT_KEYヒットしたuuidは、子の代わりにオブジェクトのルートに置き換えられます。
RC_GET_LINK_NUMストライドにはヒットしたリンク番号が含まれます。

警告

  • flags の値によって(RC_DATA_FLAGSを介して提供される)、ストライド内の値の数とタイプが異なります。詳細はRC_DATA_FLAGSを参照してください。
  • llGetRot/ja はビューアがしきい値以下でアバターの回転を更新しないため、アバターの正確な視覚的な回転を返しません(VWR-1331を参照)。マウスルック中のアバターの正確な見ている方向を取得するには、代わりにllGetCameraRot/jaを使用してください。
  • llCastRay/ja は物理形状がないプリム(PRIM_PHYSICS_SHAPE_TYPE = PRIM_PHYSICS_SHAPE_NONE)を検出しません。
  • llCastRay/ja は、レイがプリムの内部で始まる場合、そのプリムを検出しません。これにより、プリムの位置を安全に開始位置として使用できます。
  • llCastRay/ja は、開始位置がプリムの外部にある場合、スクリプトが含まれているプリムを検出できます。

この関数の結果は、「エンドポイントが範囲外の場合には信頼性がない」とされています(オブジェクトのヒット数に関係なく、時折ステータスコード0を返すことがあります)。詳細は[1]を参照してください。

サンプル

integer filter;// default is 0

default
{
    state_entry()
    {
        string ownerName = llKey2Name(llGetOwner());
        llOwnerSay("Hello, " + ownerName + "!");
    }

    touch_start(integer total_number)
    {
        vector start = llGetPos();
        vector end = start - <0.0, -25.0, 0.0>;

        if ( filter > 8 )
            filter = 0;

        llOwnerSay("Filter " + (string)filter);

        list results = llCastRay(start, end, [RC_REJECT_TYPES, filter, RC_MAX_HITS, 4] );

        integer hitNum = 0;
        // Handle error conditions here by checking llList2Integer(results, -1) >= 0
        while (hitNum < llList2Integer(results, -1))
        {
            // Stride is 2 because we didn't request normals or link numbers
            key uuid = llList2Key(results, 2*hitNum);

            string name = "Land"; // if (uuid == NULL_KEY)

            if (uuid != NULL_KEY)
                name = llKey2Name(uuid);

            llOwnerSay("Hit " + name + ".");

            ++hitNum;
        }

        ++filter;
    }
}
// Fire a weapon at a target, report a hit

integer gTargetChan = -9934917;

default
{
    attach(key id)
    {
        if (id != NULL_KEY)
        { 
            llRequestPermissions(id,PERMISSION_TAKE_CONTROLS|PERMISSION_TRACK_CAMERA);
        }
    }

    run_time_permissions (integer perm)
    {
        if (perm & PERMISSION_TAKE_CONTROLS|PERMISSION_TRACK_CAMERA) 
        {
            llTakeControls(CONTROL_LBUTTON|CONTROL_ML_LBUTTON,TRUE,FALSE);
        }
    }

    control (key id, integer level, integer edge)
    {
        // User must be in mouselook to aim the weapon
        if (level & edge & CONTROL_LBUTTON)
        {
            llSay(0,"You must be in Mouselook to shoot.  Type \"CTRL + M\" or type \"Esc\" and scroll your mouse wheel forward to enter Mouselook.");
        }
        // User IS in mouselook        
        if (level & edge & CONTROL_ML_LBUTTON)
        {
            vector start = llGetCameraPos();
            // Detect only a non-physical, non-phantom object. Report its root prim's UUID.
            list results = llCastRay(start, start+<60.0,0.0,0.0>*llGetCameraRot(),[RC_REJECT_TYPES,RC_REJECT_PHYSICAL|RC_REJECT_AGENTS|RC_REJECT_LAND,RC_DETECT_PHANTOM,FALSE,RC_DATA_FLAGS,RC_GET_ROOT_KEY,RC_MAX_HITS,1]);
            llTriggerSound(llGetInventoryName(INVENTORY_SOUND,0),1.0);
            llSleep(0.03);
            key target = llList2Key(results,0);
            // Tell target that it has been hit. 
            llRegionSayTo(target,gTargetChan,"HIT");
            // Target, scripted to listen on gTargetChan, can explode, change color, fall over .....
        }
    }            
}

注意点

Use llDumpList2String to see what the output looks like when you try a new set of flags.

To quickly get the status code use llList2Integer(result, -1).

使い方のアイデア:

  • 武器 - レイキャストは、プロジェクタイル武器をシミュレートするためのゲーム開発で伝統的に使用されるツールです。これは、プリムをレザリングして武器から発射するよりもはるかに効率的です。
  • AIオブジェクト - アバターや他のオブジェクトの視線検出、または自分自身を中心にレイを追跡して環境を移動するためのツールとして使用されます。例えば、現在の床の表面の高さと角度(法線)を判定するために、直接下向きにレイをキャストして、非物理的なオブジェクトの移動に役立ちます。
  • インテリジェントなオブジェクト配置 - 静的なオブジェクトはシーンに配置されますが、環境に合わせて自己調整します。例えば、高い位置にレザリングされたオブジェクトは、その高さを床のレベルに調整したり、低い位置に配置されたコンピュータコンソールは、立ってではなく膝をついて使用するようにアバターに影響を与えたりします。
  • 環境分析 - 周囲のエリアの制限を判定するために使用できます。例えば、オブジェクトが閉じられた部屋内に配置されているかどうかを判定することができます。頻繁に実行するべきではないテストですが、部屋内に誰もいない場合は効果をオフにするためにオブジェクトによって使用されたりします。家具やオブジェクトを自動調整して壁、床、天井にスナップすることがあります。

特記事項

経緯

  • Date of Release 23/09/2011
  • SCR-199 - fixed - The throttle was too low and thus rendered the function not as useful as it could be.

All Issues

~ Search JIRA for related Issues
   Improve accuracy of avatar's visible rotation

Signature

function list llCastRay( vector start, vector end, list options );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。