2007年06月24日
第5回 超初心者用スクリプト講座 タッチイベントを使おう
前回にキャンピングにはまってますって言ってましたが、
たどりついてしまいましたよ。カジノにw
もともとキャンピングでレートのいいとこ
どこかな~って検索かけててただけでいこうっていう気は
まったくなかったのですよw
またまいいとこがカジノやったというだけで。
最初は普通にキャンピングしてたんですけど、
ときどき流れてくるピロリロリ~ンっておとにやられましたねw
ま、ちょっとくらいやってもいいか~って感じでやり始めました。
10払って、負け。
また10払って、負け。
次こそは、、、負け。
...
まぁ、こんな感じでやってたら100L$が海の藻屑に。。。
む~ん、キャンピング5時間分が~
もうやらん、絶対やらんぞ~
さて、雑談はこれくらいにして、スクリプト講座です。
今回ご紹介するアイテムはこれ。

あれ?前と同じ?
ええ、そうですイスです。前に作ったイスは単にちゃんと座れると
いうだけで、面白味も何もありませんでした。いけませんねw
それでです。
今回はイスに触れることによってひっくり返る
いたずらイスを作ることにしました。
さて、出来上がりはどんな感じになるかというと…
まずはビフォー。

そしてアフター。

しっかりとひっくり返ってキャラクターの頭が地面に突き刺さって
いるのがわかりますね~。
用意するものは第4回スクリプト講座で作ったイス。
これを元に新たなスクリプトを足していきます。
まず、スクリプトを出す前に今回のスクリプトにおいて
何が必要なのか考えてみましょう。
・変数 ひっくり返った状態にあるのか、どうかの判断基準
・タッチ イスが触られたかどうかを感知する仕組み
・回転 ひっくり返る動作、元に戻す動作
・分岐 そのままw
これだけあれば目的の物が作れそうです。
流れとしては、以下のようになります。
誰かがイスに触りました(タッチ)。
もし(分岐)、イスが普通の状態(変数)なら
ひっくり返す(回転)
そうでないなら
普通の状態にもどす(回転)
これをスクリプトで表現したものが以下のスクリプトです。
ではこれを踏まえて、スクリプト自身の解説をしていきます。
integer normal;
default
{
state_entry(){
normal = TRUE;
llSitTarget(<0.29,0.0,0.31>, llEuler2Rot(<0.0, 0.0, 0.0> * DEG_TO_RAD));
}
touch_start(integer i){
if(normal == TRUE){
llSetRot(llEuler2Rot(<0.0, 180.0, 0.0> * DEG_TO_RAD));
normal = FALSE;
}else{
llSetRot(llEuler2Rot(<0.0, 0.0, 0.0> * DEG_TO_RAD));
normal = TRUE;
}
}
}
まずはこれ
integer normal;
変数です。変数といっても何だそれは??となるかと思いますw
簡単に言うと値を保存しておくような箱だとおもってください。
今回はnormalという名前の箱を用意しました。この箱の値がTRUEであるならイスは普通の状態、この箱の値がFALSEであればひっくり返っている
状態です。
次に
touch_start(integer i){
}
これが誰かがイスに触ったかどうかを感知するおまじないです。
もし、だれかがイスに触ったなら、このtouch_startの{}内にある
スクリプトが実行されます。
次にこれです。
llSetRot(llEuler2Rot(<0.0, 180.0, 0.0> * DEG_TO_RAD));
これがイスを回転させます。ただし、第3回の講座でやったような
永続的に回転し続けるようなものではなくて、オブジェクトを一定の
回転角度分ずらすようなものだと思ってください。上記の場合であれば
通常角度からy軸を中心に180度回転させたものになります。
表記方法ですが、第4回と同様に<0.0, 180.0, 0.0>の部分にだけ注目して値を変更してください。前から、x軸,y軸,z軸になります。
そして最後に
if(normal == TRUE){
}else{
}
の部分です。これが分岐を表します。
もし、変数normalの中身がTRUEであるなら最初の{}内を、
そうでなければ後ろの{}内を実行します。
また==は同じという状態を表します。
この4つの点を踏まえて、スクリプトをやりたいことの流れと
比較しながら眺めてください。なんとなくわかると思います。
integer normal;
default
{
state_entry(){
normal = TRUE; // normalにイスが普通の状態であることを記入
llSitTarget(<0.29,0.0,0.31>, llEuler2Rot(<0.0, 0.0, 0.0> * DEG_TO_RAD)); // 着席位置の調整(第4回参照のこと)
}
touch_start(integer i){
if(normal == TRUE){ // イスが普通の状態であるならば
llSetRot(llEuler2Rot(<0.0, 180.0, 0.0> * DEG_TO_RAD)); // ひっくり返す
normal = FALSE; // 変数にnormalにひっくり返った状態であることを記す }else{ // イスが普通の状態でないなら
llSetRot(llEuler2Rot(<0.0, 0.0, 0.0> * DEG_TO_RAD)); // 元へ戻す
normal = TRUE; // 変数normalに通常の状態であることを記す
}
}
}
と、まぁこんな感じです。
第4回までに比べるとボリュームたっぷりで消化不良を起こしてしまう
かもしれません。しかし、そこは気合で乗り切ってくださいw
それでは今回はこの辺で終いです。
ではでは~
第10回 スクリプト講座 ポーズボールを作ろう(1)
初心者用 スクリプト講座 再開します
第9回 超初心者用スクリプト講座 タイマーを使おう
第8回 超初心者用スクリプト講座 stateを使おう
第7回 超初心者用スクリプト講座 出したら実行する