
スクリプトのお勉強 ②
2008年07月19日
小さいとき(まだ幼い少女だったころ^^;)見たことがある、
昔のルマンのCカー(かな?)、AZ-1のように
上にあくドアが昔ありましたね。
なんていうんだろう、ガルウィングとは違うのかな(^^;)
昨日、スクリプトのお勉強①で作った2つのスクリプトを
合体して作りました。
これは、プリムの中心、蝶番を作らずに作りました。
別々のスクリプトで動かしたら、LOCAL座標が変になっちゃった。
それぞれGetLocalを取得してるから当たり前ですけどね。
なので、1つのスクリプトに回転と上下を入れました。
動きは上に移動してから回転といった感じです。
戻るときは、命令を逆にしました。


★ 昨日のスクリプトを合体させただけです。
***********************
integer isOpen = FALSE;
vector defpos;
vector opendoor;
vector idodoor = < 0,0.09,-1>;
default
{
touch_start(integer total_number)
{
defpos = llGetLocalPos();
rotation doorRot = llGetLocalRot();
if(isOpen==FALSE){
opendoor = defpos - idodoor ;
llSetPos(opendoor);
llSetLocalRot(doorRot * llEuler2Rot(<45,0,0 * DEG_TO_RAD>));
isOpen = TRUE;
}else{
llSetLocalRot(doorRot * llEuler2Rot(<-45,0,0 * DEG_TO_RAD>));
opendoor = defpos + idodoor ;
llSetPos(opendoor);
isOpen = FALSE;
}
}
}
*************************
お詫び、tabがなく見づらくてすみません。
昔のルマンのCカー(かな?)、AZ-1のように
上にあくドアが昔ありましたね。
なんていうんだろう、ガルウィングとは違うのかな(^^;)
昨日、スクリプトのお勉強①で作った2つのスクリプトを
合体して作りました。
これは、プリムの中心、蝶番を作らずに作りました。
別々のスクリプトで動かしたら、LOCAL座標が変になっちゃった。
それぞれGetLocalを取得してるから当たり前ですけどね。
なので、1つのスクリプトに回転と上下を入れました。
動きは上に移動してから回転といった感じです。
戻るときは、命令を逆にしました。


★ 昨日のスクリプトを合体させただけです。
***********************
integer isOpen = FALSE;
vector defpos;
vector opendoor;
vector idodoor = < 0,0.09,-1>;
default
{
touch_start(integer total_number)
{
defpos = llGetLocalPos();
rotation doorRot = llGetLocalRot();
if(isOpen==FALSE){
opendoor = defpos - idodoor ;
llSetPos(opendoor);
llSetLocalRot(doorRot * llEuler2Rot(<45,0,0 * DEG_TO_RAD>));
isOpen = TRUE;
}else{
llSetLocalRot(doorRot * llEuler2Rot(<-45,0,0 * DEG_TO_RAD>));
opendoor = defpos + idodoor ;
llSetPos(opendoor);
isOpen = FALSE;
}
}
}
*************************
お詫び、tabがなく見づらくてすみません。
スクリプトのお勉強 ①
2008年07月18日
色々調べたりサンプルを改造したりして勉強しています。
んで、実際に作成したスクリプトを公開していきます。
なにかの参考になれば。
でも、私も初心者なので間違いなどあるかもしれませんが
そのときはすみません。
また色々な人のスクリプトを参照して作ってますので
同じような記述もありますが、ご勘弁を(^^;)
初回は車を作っていて、ドアなどに必要なスクリプトを作ってみました。
「aipiro」さんの公開スクリプトを参考に修正しました。
注意) 移動や回転の動作はプリムの中心になっているため
パスカットなどで中心を蝶番の位置にしています。
★ ドアや、荷台の扉の開閉(タッチで動作)

**************************
integer isOpen = FALSE;
default
{
touch_start(integer total_number)
{
rotation doorRot = llGetLocalRot();
if(isOpen==FALSE){
llSetLocalRot(doorRot * llEuler2Rot(<-PI_BY_TWO,0,0>));
isOpen = TRUE;
}else{
llSetLocalRot(doorRot * llEuler2Rot());
isOpen = FALSE;
}
}
}
***************************
★ プリムを移動させる(タッチで動作)


**********************
integer isOpen = FALSE;
vector defpos;
vector opendoor;
vector idodoor = < 0,0,-0.5>;
default
{
touch_start(integer total_number)
{
defpos = llGetLocalPos();
if(isOpen==FALSE){
opendoor = defpos - idodoor ;
llSetPos(opendoor);
isOpen = TRUE;
}else{
opendoor = defpos + idodoor ;
llSetPos(opendoor);
isOpen = FALSE;
}
}
}
*******************
んで、実際に作成したスクリプトを公開していきます。
なにかの参考になれば。
でも、私も初心者なので間違いなどあるかもしれませんが
そのときはすみません。
また色々な人のスクリプトを参照して作ってますので
同じような記述もありますが、ご勘弁を(^^;)
初回は車を作っていて、ドアなどに必要なスクリプトを作ってみました。
「aipiro」さんの公開スクリプトを参考に修正しました。
注意) 移動や回転の動作はプリムの中心になっているため
パスカットなどで中心を蝶番の位置にしています。
★ ドアや、荷台の扉の開閉(タッチで動作)

**************************
integer isOpen = FALSE;
default
{
touch_start(integer total_number)
{
rotation doorRot = llGetLocalRot();
if(isOpen==FALSE){
llSetLocalRot(doorRot * llEuler2Rot(<-PI_BY_TWO,0,0>));
isOpen = TRUE;
}else{
llSetLocalRot(doorRot * llEuler2Rot(
isOpen = FALSE;
}
}
}
***************************
★ プリムを移動させる(タッチで動作)


**********************
integer isOpen = FALSE;
vector defpos;
vector opendoor;
vector idodoor = < 0,0,-0.5>;
default
{
touch_start(integer total_number)
{
defpos = llGetLocalPos();
if(isOpen==FALSE){
opendoor = defpos - idodoor ;
llSetPos(opendoor);
isOpen = TRUE;
}else{
opendoor = defpos + idodoor ;
llSetPos(opendoor);
isOpen = FALSE;
}
}
}
*******************