PRIM MATERIAL/ja
		
		
		
		
		
		Jump to navigation
		Jump to search
		 
     
素材についてのビデオチュートリアル 
     
		
	
| 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 ]);[ integer material ] のリストを返します
| • integer | material | – | PRIM_MATERIAL_* フラグ | 
関連記事
定数
| 
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
関数
| • | llSetPrimitiveParams | |||
| • | llSetLinkPrimitiveParams | |||
| • | llGetPrimitiveParams | 
イベント
| • | changed | 
サンプル
// © 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();
        }
    }
}