PRIM MATERIAL/ja
Jump to navigation
Jump to search
素材についてのビデオチュートリアル
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
解説
定数: integer PRIM_MATERIAL = 2;<videoflash>6OXYO61kQCA</videoflash>
integer 定数 PRIM_MATERIAL の値は 2 です。
プリム素材を設定します。素材は質量には作用しませんが、抵抗、弾み(弾力)そして衝突音に作用します。33°の木の傾斜で、例のスクリプトは以下の結果を下回って発生します。
型 | 速度 (m/s) | 距離 (m) |
---|---|---|
石 | 0.453181 | 0.361655 |
鉄 | 5.475444 | 10.211180 |
ガラス | 6.483150 | 11.678304 |
木 | 2.154549 | 9.433724 |
皮 | 0.351543 | 0.188043 |
プラスチック | 4.502428 | 9.590952 |
ゴム | 0.374964 | 0.187106 |
llSetPrimitiveParams
[ PRIM_MATERIAL, integer material ]• integer | material | – | PRIM_MATERIAL_* フラグ |
llSetPrimitiveParamsとllSetLinkPrimitiveParamsを実行する時に用いられます。
llGetPrimitiveParams
llGetPrimitiveParams([ PRIM_MATERIAL ]);list [ integer material ]を返します。
• integer | material | – | PRIM_MATERIAL_* フラグ |
関連記事
定数
|
関数
• | llSetPrimitiveParams | |||
• | llSetLinkPrimitiveParams | |||
• | llGetPrimitiveParams |
イベント
• | changed |
サンプル
<lsl>// © 2008 by Karzita Zabaleta // Author of Scripting Your World, Wiley, October 2008.
list gMaterialTypes = [
"STONE", "METAL", "GLASS", "WOOD", "FLESH", "PLASTIC", "RUBBER"
];
vector gHomePosition; rotation gHomeRotation; integer gWaitCount = 0; float gMaxVelMag; integer gPrimMaterial;
moveTo(vector origin, vector destination) {
float dist = llVecDist(origin, destination); integer passes = llCeil( llLog(dist/10.0) / llLog(2.0) ); integer i; list params = [PRIM_POSITION, destination]; for (i=0; i<passes; i++) { params = (params=[]) + params + params; } // actually move the prim, now llSetPrimitiveParams(params);
}
returnHome() {
llSetStatus(STATUS_PHYSICS, FALSE); moveTo(llGetPos(),gHomePosition); llSetTimerEvent(0); llSetRot(gHomeRotation);
}
calculate_velocity() {
float velMag = llVecMag(llGetVel()); if (velMag > gMaxVelMag) { gMaxVelMag = velMag; }
}
default {
state_entry() { gHomePosition = llGetPos(); gHomeRotation = llGetRot(); } on_rez(integer _n) { llResetScript(); } touch_start(integer n) { gMaxVelMag = 0; llSetPrimitiveParams([PRIM_MATERIAL, gPrimMaterial]); llSetStatus(STATUS_PHYSICS,TRUE); llSetTimerEvent(0.1); llResetTime(); gWaitCount=0; gPrimMaterial++; if (gPrimMaterial == 7 ) gPrimMaterial = 0; } timer() { calculate_velocity(); gWaitCount++; if (gWaitCount > 100) { // 10 seconds string type = llList2String( gMaterialTypes, gPrimMaterial-1 ); llOwnerSay(type+" reached maximum velocity of "+(string)gMaxVelMag+ " and traveled "+(string)llVecDist(llGetPos(), gHomePosition)+" meters."); returnHome(); } }
}</lsl>