PRIM MATERIAL/ja

From Second Life Wiki
< PRIM MATERIAL
Revision as of 16:33, 10 September 2008 by EJ Hirano (talk | contribs) (翻訳ミスの訂正)
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.

解説

定数: 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_* フラグ

llSetPrimitiveParamsllSetLinkPrimitiveParamsを実行する時に用いられます。

llGetPrimitiveParams

llGetPrimitiveParams([ PRIM_MATERIAL ]);

list [ integer material ]を返します。

• integer material PRIM_MATERIAL_* フラグ

関連記事

定数

素材 フラグ 説明 摩擦 反発
PRIM_MATERIAL_STONE 0 石材 0.8 0.4
PRIM_MATERIAL_METAL 1 金属 0.3 0.4
PRIM_MATERIAL_GLASS 2 ガラス 0.2 0.7
PRIM_MATERIAL_WOOD 3 木材 0.6 0.5
PRIM_MATERIAL_FLESH 4 0.9 0.3
PRIM_MATERIAL_PLASTIC 5 プラスチック 0.4 0.7
PRIM_MATERIAL_RUBBER 6 ゴム 0.9 0.9
PRIM_MATERIAL_LIGHT 7 光, 非推奨: [ PRIM_FULLBRIGHT, ALL_SIDES, TRUE ] と同じように見えます 0.6 0.5

関数

•  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>

特記事項

この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)