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 ]);[ 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();
}
}
}