2008年03月21日
第10回 スクリプト講座 ポーズボールを作ろう(2)
こんばんは。ぺんです。
前回の講座 ポーズボールを作ろう(1)の続きになります。

さて、今回も前回と同様に座るだけでこんなポーズが簡単にとれる
ポーズボールを作っていきましょう(ポーズは別売り)。
以下、入れるだけでOKなスクリプトとその解説記事です。
読みたい方は 続きを読む を押してくださいね。
前回の講座 ポーズボールを作ろう(1)の続きになります。

さて、今回も前回と同様に座るだけでこんなポーズが簡単にとれる
ポーズボールを作っていきましょう(ポーズは別売り)。
以下、入れるだけでOKなスクリプトとその解説記事です。
読みたい方は 続きを読む を押してくださいね。
以下スクリプトです。
まず、前回と同様スクリプトの処理の流れです。
1.着席位置と方向の設定を行う
2.もし誰かが座れば
3.その誰かに設定されているアニメーションを実行してもよいかどうかの許可を
もらいにいく。
4.許可がされれば
5.現在のデフォルトの座るアニメーションを止めて
6.箱に入れたアニメーションを実行する
7.同時に箱を透明にする
8.もし誰かが箱から立ち上がれば
9.箱に入れたアニメーションをとめる
10.同時に箱を表示する
といった流れになります。
さて、前回と今回の2回に渡って解説しているポーズボールですが、
覚えておいて欲しい重要なポイントは二つと書きました。
・どうやって座ったか、立ち上がったかを検知するのか
・ユーザーにアニメーション実行の許可をもらうにはどうすればいいのか
前回に「どうやって座ったか、立ち上がったかを検知するのか」を解説しましたので、
今回は後者「ユーザーにアニメーション実行の許可をもらうにはどうすればいいのか」について
解説していきます。
この許可をもらうという部分ですが、上記のスクリプト内では
と
の部分にあたります。
最初の部分
は対象に対して何らかの許可をもらいに行く関数です。
今回のスクリプト講座はポーズボールに関してなので、座った人にアニメーションを実行して
良いかどうかの許可をもらいに行くようになります。座った人の指定は前回にも利用した
llAvatarOnSitTarget()という関数を使います。これは座った人のID(key)を教えてくれます。
また、アニメーションのための許可というのを二つ目に指定します。
これはPERMISSION_TRIGGER_ANIMATIONと指定しておけばいいです。
さて、これで座った人にアニメーションの実行を許可するかどうかの
ダイアログをおくることができました。
(ここで、ユーザーにダイアログで許可するかしないかを促すと書きましたが、
アニメーションの実行の場合はダイアログはでません。
アニメーションの実行許可に限った場合、座ったと装着したというイベントの際は
自動的に座った人、装着した人の意思を無視して許可が下されます。)
さて、それでは相手が許可したかどうかを知って、それを元に次の処理を
していく必要があります。その部分が先ほど示した
の部分になります。
まず、
の部分で座った人が許可ボタンまたは不許可ボタンを押すという
イベントを感知します。許可したかどうかは変数のpermissionという箱に
許可なら1以上の値を不許可なら0という値を入れて知らせてくれます。
その変数permissionを元にユーザーが許可した場合に
アニメーションの実行を行えばよいだけです。
それが先ほども示した
になります。
ここまでがスクリプトしての流れになります。
残るはアニメーションを実行する・停止するという方法と
座ったときにボールを透明にする・非透明にする方法がわかれば
スクリプトとして利用できるものになります。
それではアニメーションを実行・停止するにはどうすればよいでしょう?
それが以下のコマンドです。
ここでanimationには実際に利用するアニメーションまたはポーズの名前を
入れてください。ただし、今回の講座で利用したスクリプトは
以下のように変数を使ってアニメーション名を指定しています。
実は直接アニメーションを書いても良いのですが、
アニメーションが別のものに変わったときに書き換える手間が
減るので、こうしています。
さて、最後に透明・非透明ですが以下のコマンドを利用します。
()内の一つめに書かれたのが透明度です。0に近づくほど透明になります。
また二つ目のALL_SIDESとかかれたものですが、オブジェクトのすべての面を
対象にするという意味です。普段はこれしか使わないと思うので
いつもALL_SIDESにしておくとよいです。
さて、今回は2回にわたってポーズボールを作るためのスクリプトについて
解説しました。利用者に許可をとるという作業はスクリプトを書いていると
結構よくでてきます。やや難解な部分ではありますが、しっかり理解しておきましょう。
それでは。また次回。
// Set deafult animation here
string sitting_animation = "hmn-sit02-Seesaw";
// Set Position to sit on chair
vector pos = <0, 0, 0.1>;
// Set Rotation to sit on chair
vector rot = <0, 0, 0>;
//-----------------------------------------------------------------------
default{
state_entry(){
llSitTarget(pos, llEuler2Rot(rot * DEG_TO_RAD));
}
on_rez(integer i){
llResetScript();
}
run_time_permissions(integer permission){
if(permission>0){
llStopAnimation("sit");
llStartAnimation(sitting_animation);
}
}
changed(integer change) {
if (change & CHANGED_LINK) {
if (llAvatarOnSitTarget() == NULL_KEY) {
llStopAnimation(sitting_animation);
llSetAlpha(1.0, ALL_SIDES);
}else{
llRequestPermissions(llAvatarOnSitTarget(),
  PERMISSION_TRIGGER_ANIMATION);
llSetAlpha(0.0, ALL_SIDES);
}
}
}
}
まず、前回と同様スクリプトの処理の流れです。
1.着席位置と方向の設定を行う
2.もし誰かが座れば
3.その誰かに設定されているアニメーションを実行してもよいかどうかの許可を
もらいにいく。
4.許可がされれば
5.現在のデフォルトの座るアニメーションを止めて
6.箱に入れたアニメーションを実行する
7.同時に箱を透明にする
8.もし誰かが箱から立ち上がれば
9.箱に入れたアニメーションをとめる
10.同時に箱を表示する
といった流れになります。
さて、前回と今回の2回に渡って解説しているポーズボールですが、
覚えておいて欲しい重要なポイントは二つと書きました。
・どうやって座ったか、立ち上がったかを検知するのか
・ユーザーにアニメーション実行の許可をもらうにはどうすればいいのか
前回に「どうやって座ったか、立ち上がったかを検知するのか」を解説しましたので、
今回は後者「ユーザーにアニメーション実行の許可をもらうにはどうすればいいのか」について
解説していきます。
この許可をもらうという部分ですが、上記のスクリプト内では
llRequestPermissions(llAvatarOnSitTarget(),PERMISSION_TRIGGER_ANIMATION);
と
run_time_permissions(integer permission){
if(permission>0){
}
}
の部分にあたります。
最初の部分
llRequestPermissions(llAvatarOnSitTarget(),PERMISSION_TRIGGER_ANIMATION);
は対象に対して何らかの許可をもらいに行く関数です。
今回のスクリプト講座はポーズボールに関してなので、座った人にアニメーションを実行して
良いかどうかの許可をもらいに行くようになります。座った人の指定は前回にも利用した
llAvatarOnSitTarget()という関数を使います。これは座った人のID(key)を教えてくれます。
また、アニメーションのための許可というのを二つ目に指定します。
これはPERMISSION_TRIGGER_ANIMATIONと指定しておけばいいです。
さて、これで座った人にアニメーションの実行を許可するかどうかの
ダイアログをおくることができました。
(ここで、ユーザーにダイアログで許可するかしないかを促すと書きましたが、
アニメーションの実行の場合はダイアログはでません。
アニメーションの実行許可に限った場合、座ったと装着したというイベントの際は
自動的に座った人、装着した人の意思を無視して許可が下されます。)
さて、それでは相手が許可したかどうかを知って、それを元に次の処理を
していく必要があります。その部分が先ほど示した
run_time_permissions(integer permission){
if(permission>0){
}
}
の部分になります。
まず、
run_time_permissions(integer permission){
}
の部分で座った人が許可ボタンまたは不許可ボタンを押すという
イベントを感知します。許可したかどうかは変数のpermissionという箱に
許可なら1以上の値を不許可なら0という値を入れて知らせてくれます。
その変数permissionを元にユーザーが許可した場合に
アニメーションの実行を行えばよいだけです。
それが先ほども示した
run_time_permissions(integer permission){
if(permission>0){
}
}
になります。
ここまでがスクリプトしての流れになります。
残るはアニメーションを実行する・停止するという方法と
座ったときにボールを透明にする・非透明にする方法がわかれば
スクリプトとして利用できるものになります。
それではアニメーションを実行・停止するにはどうすればよいでしょう?
それが以下のコマンドです。
llStartAnimation("animation"); //アニメーションをスタート
llStopAnimation("animation"); //アニメーションを停止
ここでanimationには実際に利用するアニメーションまたはポーズの名前を
入れてください。ただし、今回の講座で利用したスクリプトは
以下のように変数を使ってアニメーション名を指定しています。
string sitting_animation = "hmn-sit02-Seesaw"; //変数を指定
llStartAnimation(sitting_animation);
llStopAnimation(sitting_animation);
実は直接アニメーションを書いても良いのですが、
アニメーションが別のものに変わったときに書き換える手間が
減るので、こうしています。
さて、最後に透明・非透明ですが以下のコマンドを利用します。
llSetAlpha(0.0, ALL_SIDES); //透明に
llSetAlpha(1.0, ALL_SIDES); //非透明に
()内の一つめに書かれたのが透明度です。0に近づくほど透明になります。
また二つ目のALL_SIDESとかかれたものですが、オブジェクトのすべての面を
対象にするという意味です。普段はこれしか使わないと思うので
いつもALL_SIDESにしておくとよいです。
さて、今回は2回にわたってポーズボールを作るためのスクリプトについて
解説しました。利用者に許可をとるという作業はスクリプトを書いていると
結構よくでてきます。やや難解な部分ではありますが、しっかり理解しておきましょう。
それでは。また次回。
第10回 スクリプト講座 ポーズボールを作ろう(1)
初心者用 スクリプト講座 再開します
第9回 超初心者用スクリプト講座 タイマーを使おう
第8回 超初心者用スクリプト講座 stateを使おう
第7回 超初心者用スクリプト講座 出したら実行する
第6回 超初心者用スクリプト講座 ステートエントリー?
初心者用 スクリプト講座 再開します
第9回 超初心者用スクリプト講座 タイマーを使おう
第8回 超初心者用スクリプト講座 stateを使おう
第7回 超初心者用スクリプト講座 出したら実行する
第6回 超初心者用スクリプト講座 ステートエントリー?
Posted by ぺん at 01:20│Comments(1)
│超初心者用 スクリプト講座
この記事へのコメント
はじめまして!
超初心者用講座、大変勉強になりました!
これからも楽しみにしています!!
超初心者用講座、大変勉強になりました!
これからも楽しみにしています!!
Posted by Treva Slade
at 2008年06月13日 10:30
